[SimplifyCFG] Make the value type of the hole check bitmask a power-of-2.
[oota-llvm.git] / test / Transforms / InstCombine / logical-select.ll
index ffdaa9145453a6988b329f48b5890365e7421522..f8c06768453da0eda9a6271a9e567c9d3fc6702b 100644 (file)
@@ -1,7 +1,5 @@
-; RUN: llvm-as < %s | opt -instcombine | llvm-dis > %t
-; RUN: grep select %t | count 4
-; RUN: not grep and %t
-; RUN: not grep or %t
+; RUN: opt < %s -instcombine -S | FileCheck %s
+
 
 define i32 @foo(i32 %a, i32 %b, i32 %c, i32 %d) nounwind {
   %e = icmp slt i32 %a, %b
@@ -11,6 +9,9 @@ define i32 @foo(i32 %a, i32 %b, i32 %c, i32 %d) nounwind {
   %i = and i32 %d, %h
   %j = or i32 %g, %i
   ret i32 %j
+; CHECK: %e = icmp slt i32 %a, %b
+; 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
@@ -20,7 +21,11 @@ define i32 @bar(i32 %a, i32 %b, i32 %c, i32 %d) nounwind {
   %i = and i32 %d, %h
   %j = or i32 %i, %g
   ret i32 %j
+; CHECK: %e = icmp slt i32 %a, %b
+; 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 {
 entry:
   %0 = icmp slt i32 %a, %b
@@ -30,7 +35,24 @@ entry:
   %2 = and i32 %not, %d
   %3 = or i32 %1, %2
   ret i32 %3
+; CHECK: %0 = icmp slt i32 %a, %b
+; 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:
+  %0 = icmp slt i32 %a, %b
+  %iftmp.0.0 = select i1 %0, i32 -1, i32 0
+  %1 = and i32 %iftmp.0.0, %c
+  %iftmp = select i1 %0, i32 0, i32 -1
+  %2 = and i32 %iftmp, %d
+  %3 = or i32 %1, %2
+  ret i32 %3
+; CHECK: %0 = icmp slt i32 %a, %b
+; 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 {
 entry:
   %0 = icmp slt i32 %a, %b
@@ -40,4 +62,7 @@ entry:
   %2 = and i32 %not, %d
   %3 = or i32 %1, %2
   ret i32 %3
+; CHECK: %0 = icmp slt i32 %a, %b
+; CHECK-NEXT: [[result:%.*]] = select i1 %0, i32 %c, i32 %d
+; CHECK-NEXT: ret i32 [[result]]
 }