[all-commits] [llvm/llvm-project] fae900: [InstCombine] reduce demand-limited bool math to l...
RotateRight via All-commits
all-commits at lists.llvm.org
Wed Mar 11 12:49:52 PDT 2020
Branch: refs/heads/master
Home: https://github.com/llvm/llvm-project
Commit: fae900921b12ea04e43a5d010a094eb6f5c19243
https://github.com/llvm/llvm-project/commit/fae900921b12ea04e43a5d010a094eb6f5c19243
Author: Sanjay Patel <spatel at rotateright.com>
Date: 2020-03-11 (Wed, 11 Mar 2020)
Changed paths:
M llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp
M llvm/test/Transforms/InstCombine/add.ll
Log Message:
-----------
[InstCombine] reduce demand-limited bool math to logic
The cmp math test is inspired by memcmp() patterns seen in 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.
We have some other bool math patterns that we want to reduce, but
that might require fixing the bogus transforms noted in 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
Differential Revision: https://reviews.llvm.org/D75961
More information about the All-commits
mailing list