diff options
author | Nadav Rotem <nrotem@apple.com> | 2013-01-30 06:35:22 +0000 |
---|---|---|
committer | Nadav Rotem <nrotem@apple.com> | 2013-01-30 06:35:22 +0000 |
commit | 513bd8a73c0451119eb88cf9023b7aa37cd4381e (patch) | |
tree | 02d6aa1e737c28b7ef3c66a330179f119d20804e /llvm/test/Transforms | |
parent | 4dab709484043f4058c62f671e63fb0dafbed8ca (diff) | |
download | bcm5719-llvm-513bd8a73c0451119eb88cf9023b7aa37cd4381e.tar.gz bcm5719-llvm-513bd8a73c0451119eb88cf9023b7aa37cd4381e.zip |
InstCombine: canonicalize sext-and --> select
sext-not-and --> select.
Patch by Muhammad Tauqir Ahmad.
llvm-svn: 173901
Diffstat (limited to 'llvm/test/Transforms')
-rw-r--r-- | llvm/test/Transforms/InstCombine/logical-select.ll | 30 | ||||
-rw-r--r-- | llvm/test/Transforms/InstCombine/mul.ll | 5 | ||||
-rw-r--r-- | llvm/test/Transforms/InstCombine/vector-casts.ll | 3 |
3 files changed, 24 insertions, 14 deletions
diff --git a/llvm/test/Transforms/InstCombine/logical-select.ll b/llvm/test/Transforms/InstCombine/logical-select.ll index bb59817a4f6..07a326b47f0 100644 --- a/llvm/test/Transforms/InstCombine/logical-select.ll +++ b/llvm/test/Transforms/InstCombine/logical-select.ll @@ -10,8 +10,10 @@ define i32 @foo(i32 %a, i32 %b, i32 %c, i32 %d) nounwind { %j = or i32 %g, %i ret i32 %j ; CHECK: %e = icmp slt i32 %a, %b -; CHECK: %j = select i1 %e, i32 %c, i32 %d -; CHECK: ret i32 %j +; CHECK-NEXT: %g = select i1 %e, i32 %c, i32 0 +; CHECK-NEXT: %i = select i1 %e, i32 0, i32 %d +; CHECK-NEXT: %j = or i32 %g, %i +; CHECK-NEXT: ret i32 %j } define i32 @bar(i32 %a, i32 %b, i32 %c, i32 %d) nounwind { %e = icmp slt i32 %a, %b @@ -22,8 +24,10 @@ define i32 @bar(i32 %a, i32 %b, i32 %c, i32 %d) nounwind { %j = or i32 %i, %g ret i32 %j ; CHECK: %e = icmp slt i32 %a, %b -; CHECK: %j = select i1 %e, i32 %c, i32 %d -; CHECK: ret i32 %j +; CHECK-NEXT: %g = select i1 %e, i32 %c, i32 0 +; CHECK-NEXT: %i = select i1 %e, i32 0, i32 %d +; CHECK-NEXT: %j = or i32 %i, %g +; CHECK-NEXT: ret i32 %j } define i32 @goo(i32 %a, i32 %b, i32 %c, i32 %d) nounwind { @@ -36,8 +40,10 @@ entry: %3 = or i32 %1, %2 ret i32 %3 ; CHECK: %0 = icmp slt i32 %a, %b -; CHECK: %1 = select i1 %0, i32 %c, i32 %d -; CHECK: ret i32 %1 +; CHECK-NEXT: %1 = select i1 %0, i32 %c, i32 0 +; CHECK-NEXT: %2 = select i1 %0, i32 0, i32 %d +; CHECK-NEXT: %3 = or i32 %1, %2 +; CHECK-NEXT: ret i32 %3 } define i32 @poo(i32 %a, i32 %b, i32 %c, i32 %d) nounwind { entry: @@ -49,8 +55,10 @@ entry: %3 = or i32 %1, %2 ret i32 %3 ; CHECK: %0 = icmp slt i32 %a, %b -; CHECK: %1 = select i1 %0, i32 %c, i32 %d -; CHECK: ret i32 %1 +; CHECK-NEXT: %1 = select i1 %0, i32 %c, i32 0 +; CHECK-NEXT: %2 = select i1 %0, i32 0, i32 %d +; CHECK-NEXT: %3 = or i32 %1, %2 +; CHECK-NEXT: ret i32 %3 } define i32 @par(i32 %a, i32 %b, i32 %c, i32 %d) nounwind { @@ -63,6 +71,8 @@ entry: %3 = or i32 %1, %2 ret i32 %3 ; CHECK: %0 = icmp slt i32 %a, %b -; CHECK: %1 = select i1 %0, i32 %c, i32 %d -; CHECK: ret i32 %1 +; CHECK-NEXT: %1 = select i1 %0, i32 %c, i32 0 +; CHECK-NEXT: %2 = select i1 %0, i32 0, i32 %d +; CHECK-NEXT: %3 = or i32 %1, %2 +; CHECK-NEXT: ret i32 %3 } diff --git a/llvm/test/Transforms/InstCombine/mul.ll b/llvm/test/Transforms/InstCombine/mul.ll index 34ce088e293..16213b8628c 100644 --- a/llvm/test/Transforms/InstCombine/mul.ll +++ b/llvm/test/Transforms/InstCombine/mul.ll @@ -138,9 +138,8 @@ define i32 @test16(i32 %b, i1 %c) { ; e = b & (a >> 31) %e = mul i32 %d, %b ; <i32> [#uses=1] ret i32 %e -; CHECK: [[TEST16:%.*]] = sext i1 %c to i32 -; CHECK-NEXT: %e = and i32 %1, %b -; CHECK-NEXT: ret i32 %e +; CHECK: [[TEST16:%.*]] = select i1 %c, i32 %b, i32 0 +; CHECK-NEXT: ret i32 [[TEST16]] } ; X * Y (when Y is 0 or 1) --> x & (0-Y) diff --git a/llvm/test/Transforms/InstCombine/vector-casts.ll b/llvm/test/Transforms/InstCombine/vector-casts.ll index 7bbf53c270f..2f2990b7b05 100644 --- a/llvm/test/Transforms/InstCombine/vector-casts.ll +++ b/llvm/test/Transforms/InstCombine/vector-casts.ll @@ -64,7 +64,8 @@ entry: ; CHECK: @test5 ; CHECK: sext <4 x i1> %cmp to <4 x i32> -; CHECK: sext <4 x i1> %cmp4 to <4 x i32> +; The sext-and pair is canonicalized to a select. +; CHECK: select <4 x i1> %cmp4, <4 x i32> %sext, <4 x i32> zeroinitializer } |