diff options
author | Bill Wendling <isanbard@gmail.com> | 2013-02-16 23:41:36 +0000 |
---|---|---|
committer | Bill Wendling <isanbard@gmail.com> | 2013-02-16 23:41:36 +0000 |
commit | 23242098e7dc8b585f1a9e780f3932b40252ec62 (patch) | |
tree | b5a0d4191da2e97892ef3a175513ec31bdfeea6c /llvm/test | |
parent | 61b474f97d5cff5e26587e47ef61f0d92f307cdc (diff) | |
download | bcm5719-llvm-23242098e7dc8b585f1a9e780f3932b40252ec62.tar.gz bcm5719-llvm-23242098e7dc8b585f1a9e780f3932b40252ec62.zip |
The transform is:
(or (bool?A:B),(bool?C:D)) --> (bool?(or A,C):(or B,D))
By the time the OR is visited, both the SELECTs have been visited and not
optimized and the OR itself hasn't been transformed so we do this transform in
the hopes that the new ORs will be optimized.
The transform is explicitly disabled for vector-selects until "codegen matures
to handle them better".
Patch by Muhammad Tauqir!
llvm-svn: 175380
Diffstat (limited to 'llvm/test')
-rw-r--r-- | llvm/test/Transforms/InstCombine/logical-select.ll | 30 | ||||
-rw-r--r-- | llvm/test/Transforms/InstCombine/or.ll | 5 |
2 files changed, 12 insertions, 23 deletions
diff --git a/llvm/test/Transforms/InstCombine/logical-select.ll b/llvm/test/Transforms/InstCombine/logical-select.ll index 07a326b47f0..f8c06768453 100644 --- a/llvm/test/Transforms/InstCombine/logical-select.ll +++ b/llvm/test/Transforms/InstCombine/logical-select.ll @@ -10,10 +10,8 @@ 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-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 +; CHECK-NEXT: [[result:%.*]] = select i1 %e, i32 %c, i32 %d +; CHECK-NEXT: ret i32 [[result]] } define i32 @bar(i32 %a, i32 %b, i32 %c, i32 %d) nounwind { %e = icmp slt i32 %a, %b @@ -24,10 +22,8 @@ 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-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 +; CHECK-NEXT: [[result:%.*]] = select i1 %e, i32 %c, i32 %d +; CHECK-NEXT: ret i32 [[result]] } define i32 @goo(i32 %a, i32 %b, i32 %c, i32 %d) nounwind { @@ -40,10 +36,8 @@ entry: %3 = or i32 %1, %2 ret i32 %3 ; CHECK: %0 = icmp slt i32 %a, %b -; 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 +; CHECK-NEXT: [[result:%.*]] = select i1 %0, i32 %c, i32 %d +; CHECK-NEXT: ret i32 [[result]] } define i32 @poo(i32 %a, i32 %b, i32 %c, i32 %d) nounwind { entry: @@ -55,10 +49,8 @@ entry: %3 = or i32 %1, %2 ret i32 %3 ; CHECK: %0 = icmp slt i32 %a, %b -; 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 +; CHECK-NEXT: [[result:%.*]] = select i1 %0, i32 %c, i32 %d +; CHECK-NEXT: ret i32 [[result]] } define i32 @par(i32 %a, i32 %b, i32 %c, i32 %d) nounwind { @@ -71,8 +63,6 @@ entry: %3 = or i32 %1, %2 ret i32 %3 ; CHECK: %0 = icmp slt i32 %a, %b -; 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 +; CHECK-NEXT: [[result:%.*]] = select i1 %0, i32 %c, i32 %d +; CHECK-NEXT: ret i32 [[result]] } diff --git a/llvm/test/Transforms/InstCombine/or.ll b/llvm/test/Transforms/InstCombine/or.ll index c0bb28d15cc..bde2a54048a 100644 --- a/llvm/test/Transforms/InstCombine/or.ll +++ b/llvm/test/Transforms/InstCombine/or.ll @@ -344,10 +344,9 @@ define <4 x i32> @test32(<4 x i1> %and.i1352, <4 x i32> %vecinit6.i176, <4 x i32 %and.i = and <4 x i32> %vecinit6.i191, %neg.i ; <<4 x i32>> [#uses=1] %or.i = or <4 x i32> %and.i, %and.i129 ; <<4 x i32>> [#uses=1] ret <4 x i32> %or.i -; Don't turn this into a vector select until codegen matures to handle them -; better. +; codegen is mature enough to handle vector selects. ; CHECK: @test32 -; CHECK: or <4 x i32> %and.i, %and.i129 +; CHECK: select <4 x i1> %and.i1352, <4 x i32> %vecinit6.i176, <4 x i32> %vecinit6.i191 } define i1 @test33(i1 %X, i1 %Y) { |