[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