aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
diff options
context:
space:
mode:
authorSanjay Patel <spatel@rotateright.com>2021-12-29 15:53:56 -0500
committerSanjay Patel <spatel@rotateright.com>2021-12-29 15:53:56 -0500
commit6c716c8589506cec407f01b0cd60005a3e346cf0 (patch)
tree89722a11388426de85ffbc780cbc6da0e845ac0e /llvm/lib/Bitcode/Reader/BitcodeReader.cpp
parentbaa22e9327a85ce16f2d112c610d828f2ce1cb1c (diff)
downloadllvm-6c716c8589506cec407f01b0cd60005a3e346cf0.zip
llvm-6c716c8589506cec407f01b0cd60005a3e346cf0.tar.gz
llvm-6c716c8589506cec407f01b0cd60005a3e346cf0.tar.bz2
[InstCombine] add more folds for unsigned overflow checks
((Op1 + C) & C) u< Op1 --> Op1 != 0 ((Op1 + C) & C) u>= Op1 --> Op1 == 0 Op0 u> ((Op0 + C) & C) --> Op0 != 0 Op0 u<= ((Op0 + C) & C) --> Op0 == 0 https://alive2.llvm.org/ce/z/iUfXJN https://alive2.llvm.org/ce/z/caAtjj define i1 @src(i8 %x, i8 %y) { ; the add/mask must be with a low-bit mask (0x01ff...) %y1 = add i8 %y, 1 %pop = call i8 @llvm.ctpop.i8(i8 %y1) %ismask = icmp eq i8 %pop, 1 call void @llvm.assume(i1 %ismask) %a = add i8 %x, %y %m = and i8 %a, %y %r = icmp ult i8 %m, %x ret i1 %r } define i1 @tgt(i8 %x, i8 %y) { %r = icmp ne i8 %x, 0 ret i1 %r } I suspect this can be generalized in some way, but this is the pattern I'm seeing in a motivating test based on issue #52851.
Diffstat (limited to 'llvm/lib/Bitcode/Reader/BitcodeReader.cpp')
0 files changed, 0 insertions, 0 deletions