Open
Description
The following reduced IR is derived from https://github.com/boostorg/geometry/blob/d2e5137f4070d8bbcd8ab150ad4fe42713c8ceb3/include/boost/geometry/algorithms/correct_closure.hpp#L56
Godbolt: https://godbolt.org/z/oW5b74jc4
alive2 proof: https://alive2.llvm.org/ce/z/QHnD7e
define i1 @src(i32 %0, ptr writeonly captures(none) initializes((0, 4)) %p) local_unnamed_addr #0 {
common.ret1:
%.lobit = lshr i32 %0, 31
%1 = trunc nuw i32 %.lobit to i1
%2 = icmp slt i32 %0, 0
%not. = xor i1 %1, true
%common.ret1.op = select i1 %not., i1 %2, i1 false
store i32 %.lobit, ptr %p, align 1
ret i1 %common.ret1.op
}
expected:
define i1 @tgt(i32 %0, ptr writeonly captures(none) initializes((0, 1)) %p) local_unnamed_addr #0 {
common.ret1:
%.lobit = lshr i32 %0, 31
store i32 %.lobit, ptr %p, align 1
ret i1 false
}
opt-trunk -O3 generates:
define i1 @src(i32 %0, ptr writeonly captures(none) initializes((0, 4)) %p) local_unnamed_addr #0 {
common.ret1:
%.lobit = lshr i32 %0, 31
%1 = trunc nuw i32 %.lobit to i1
%2 = icmp slt i32 %0, 0
%not. = xor i1 %1, true
%common.ret1.op = select i1 %not., i1 %2, i1 false
store i32 %.lobit, ptr %p, align 1
ret i1 %common.ret1.op
}