[PATCH] D75961: [InstCombine] reduce demand-limited bool math to logic
Sanjay Patel via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Mar 10 14:46:30 PDT 2020
spatel created this revision.
spatel added reviewers: lebedev.ri, nikic, efriedma.
Herald added subscribers: hiraditya, mcrosier.
Herald added a project: LLVM.
The cmp math test is inspired by memcmp() patterns seen in D75840 <https://reviews.llvm.org/D75840>. I know there's at least 1 related fold we can do here if both values are sext'd, but I'm not seeing a way to generalize further.
I know we have some other bool math patterns that we want to reduce, but that might require fixing the bogus transforms noted in D72396 <https://reviews.llvm.org/D72396>.
Alive proof translations of the regression tests:
https://rise4fun.com/Alive/zGWi
Name: demand add 1
%xz = zext i1 %x to i32
%ys = sext i1 %y to i32
%sub = add i32 %xz, %ys
%r = lshr i32 %sub, 31
=>
%notx = xor i1 %x, 1
%and = and i1 %y, %notx
%r = zext i1 %and to i32
Name: demand add 2
%xz = zext i1 %x to i5
%ys = sext i1 %y to i5
%sub = add i5 %xz, %ys
%r = and i5 %sub, 16
=>
%notx = xor i1 %x, 1
%and = and i1 %y, %notx
%r = select i1 %and, i5 -16, i5 0
Name: demand add 3
%xz = zext i1 %x to i8
%ys = sext i1 %y to i8
%a = add i8 %ys, %xz
%r = ashr i8 %a, 7
=>
%notx = xor i1 %x, 1
%and = and i1 %y, %notx
%r = sext i1 %and to i8
Name: cmp math
%gt = icmp ugt i32 %x, %y
%lt = icmp ult i32 %x, %y
%xz = zext i1 %gt to i32
%yz = zext i1 %lt to i32
%s = sub i32 %xz, %yz
%r = lshr i32 %s, 31
=>
%r = zext i1 %lt to i32
https://reviews.llvm.org/D75961
Files:
llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp
llvm/test/Transforms/InstCombine/add.ll
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D75961.249501.patch
Type: text/x-patch
Size: 4786 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200310/2f0e40ad/attachment.bin>
More information about the llvm-commits
mailing list