Skip to content

[InstCombine] poison-generating attributes are not dropped when folding logical and/or of icmps #111934

Closed
@dtcxzyw

Description

@dtcxzyw

Reproducer: https://alive2.llvm.org/ce/z/rSUfvo

define i1 @src(i32 noundef %Value) {
entry:
  %cmp.not = icmp eq i32 %Value, 0
  %0 = call range(i32 1, 33) i32 @llvm.ctpop.i32(i32 %Value)
  %cmp1 = icmp ult i32 %0, 2
  %1 = select i1 %cmp.not, i1 false, i1 %cmp1
  ret i1 %1
}

define i1 @tgt(i32 noundef %Value) {
entry:
  %0 = call range(i32 1, 33) i32 @llvm.ctpop.i32(i32 %Value)
  %1 = icmp eq i32 %0, 1
  ret i1 %1
}

When %Value == 0, @src returns false but @tgt returns poison.
This miscompilation was triggered after #111284 was landed.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions