InstCombine: Don't assume that m_ZExt matches an Instruction
[oota-llvm.git] / test / Transforms / InstCombine / and-or-not.ll
index 9b812c7f736921731448c15625d5a1d120ae2f5d..cc661d50c896cfe4dc9b37ad3cc38dd6c4c87a1f 100644 (file)
@@ -1,10 +1,10 @@
-; RUN: llvm-as < %s | opt -instcombine | llvm-dis | grep xor | wc -l | grep 2
-; RUN: llvm-as < %s | opt -instcombine | llvm-dis | not grep and
-; RUN: llvm-as < %s | opt -instcombine | llvm-dis | not grep { or}
+; RUN: opt < %s -instcombine -S | grep xor | count 4
+; RUN: opt < %s -instcombine -S | not grep and
+; RUN: opt < %s -instcombine -S | not grep " or"
 
 ; PR1510
 
-; These are all equivelent to A^B
+; These are all equivalent to A^B
 
 define i32 @test1(i32 %a, i32 %b) {
 entry:
@@ -25,3 +25,22 @@ entry:
         ret i32 %tmp7
 }
 
+define <4 x i32> @test3(<4 x i32> %a, <4 x i32> %b) {
+entry:
+        %tmp3 = or <4 x i32> %a, %b             ; <<4 x i32>> [#uses=1]
+        %tmp3not = xor <4 x i32> %tmp3, < i32 -1, i32 -1, i32 -1, i32 -1 >              ; <<4 x i32>> [#uses=1]
+        %tmp6 = and <4 x i32> %a, %b            ; <<4 x i32>> [#uses=1]
+        %tmp7 = or <4 x i32> %tmp6, %tmp3not            ; <<4 x i32>> [#uses=1]
+        %tmp7not = xor <4 x i32> %tmp7, < i32 -1, i32 -1, i32 -1, i32 -1 >              ; <<4 x i32>> [#uses=1]
+        ret <4 x i32> %tmp7not
+}
+
+define <4 x i32> @test4(<4 x i32> %a, <4 x i32> %b) {
+entry:
+        %tmp3 = or <4 x i32> %a, %b             ; <<4 x i32>> [#uses=1]
+        %tmp6 = and <4 x i32> %a, %b            ; <<4 x i32>> [#uses=1]
+        %tmp6not = xor <4 x i32> %tmp6, < i32 -1, i32 -1, i32 -1, i32 -1 >              ; <<4 x i32>> [#uses=1]
+        %tmp7 = and <4 x i32> %tmp3, %tmp6not           ; <<4 x i32>> [#uses=1]
+        ret <4 x i32> %tmp7
+}
+