Issue |
142593
|
Summary |
Missed optimization: (xor (lshr i32 %0, 31), true) ? (%0 < 0) : false ==> false
|
Labels |
new issue
|
Assignees |
|
Reporter |
GINN-Imp
|
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
```llvm
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:
```llvm
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:
```llvm
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
}
```
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs