Closed
Description
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.