[PATCH] D53844: [InstSimplify] fold icmp based on range of abs/nabs
Sanjay Patel via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Oct 29 15:46:11 PDT 2018
spatel created this revision.
spatel added reviewers: craig.topper, lebedev.ri, RKSimon.
Herald added a subscriber: mcrosier.
This is a fix for PR39475:
https://bugs.llvm.org/show_bug.cgi?id=39475
We managed to get some of these patterns using the computeKnownBits logic in https://reviews.llvm.org/D47041, but I don't think that can be used for nabs().
Instead, put in some range-based logic, so we can fold both abs/nabs with icmp with a constant value.
Alive proofs:
https://rise4fun.com/Alive/21r
Name: abs_nsw_is_positive
%cmp = icmp slt i32 %x, 0
%negx = sub nsw i32 0, %x
%abs = select i1 %cmp, i32 %negx, i32 %x
%r = icmp sgt i32 %abs, -1
=>
%r = i1 true
Name: abs_nsw_is_not_negative
%cmp = icmp slt i32 %x, 0
%negx = sub nsw i32 0, %x
%abs = select i1 %cmp, i32 %negx, i32 %x
%r = icmp slt i32 %abs, 0
=>
%r = i1 false
Name: nabs_is_negative_or_0
%cmp = icmp slt i32 %x, 0
%negx = sub i32 0, %x
%nabs = select i1 %cmp, i32 %x, i32 %negx
%r = icmp slt i32 %nabs, 1
=>
%r = i1 true
Name: nabs_is_not_over_0
%cmp = icmp slt i32 %x, 0
%negx = sub i32 0, %x
%nabs = select i1 %cmp, i32 %x, i32 %negx
%r = icmp sgt i32 %nabs, 0
=>
%r = i1 false
https://reviews.llvm.org/D53844
Files:
lib/Analysis/InstructionSimplify.cpp
test/Transforms/InstSimplify/icmp-abs-nabs.ll
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D53844.171597.patch
Type: text/x-patch
Size: 10163 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20181029/e1abd22f/attachment.bin>
More information about the llvm-commits
mailing list