X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=test%2FCodeGen%2FX86%2Fvec_compare.ll;h=df3eae3399f36f61815033f3f43539f9f8b7c3d0;hb=90c9a16dbfa347016977fa49b0cfe0db438a9504;hp=b6d91a3f770effd4ce519b06a967a3f513f46f4b;hpb=99f78061e05833e815cb7a27e6c17eadcd028ce2;p=oota-llvm.git diff --git a/test/CodeGen/X86/vec_compare.ll b/test/CodeGen/X86/vec_compare.ll index b6d91a3f770..df3eae3399f 100644 --- a/test/CodeGen/X86/vec_compare.ll +++ b/test/CodeGen/X86/vec_compare.ll @@ -2,7 +2,7 @@ define <4 x i32> @test1(<4 x i32> %A, <4 x i32> %B) nounwind { -; CHECK: test1: +; CHECK-LABEL: test1: ; CHECK: pcmpgtd ; CHECK: ret @@ -12,7 +12,7 @@ define <4 x i32> @test1(<4 x i32> %A, <4 x i32> %B) nounwind { } define <4 x i32> @test2(<4 x i32> %A, <4 x i32> %B) nounwind { -; CHECK: test2: +; CHECK-LABEL: test2: ; CHECK: pcmp ; CHECK: pcmp ; CHECK: pxor @@ -23,7 +23,7 @@ define <4 x i32> @test2(<4 x i32> %A, <4 x i32> %B) nounwind { } define <4 x i32> @test3(<4 x i32> %A, <4 x i32> %B) nounwind { -; CHECK: test3: +; CHECK-LABEL: test3: ; CHECK: pcmpgtd ; CHECK: movdqa ; CHECK: ret @@ -33,7 +33,7 @@ define <4 x i32> @test3(<4 x i32> %A, <4 x i32> %B) nounwind { } define <4 x i32> @test4(<4 x i32> %A, <4 x i32> %B) nounwind { -; CHECK: test4: +; CHECK-LABEL: test4: ; CHECK: movdqa ; CHECK: pcmpgtd ; CHECK: ret @@ -43,9 +43,9 @@ define <4 x i32> @test4(<4 x i32> %A, <4 x i32> %B) nounwind { } define <2 x i64> @test5(<2 x i64> %A, <2 x i64> %B) nounwind { -; CHECK: test5: +; CHECK-LABEL: test5: ; CHECK: pcmpeqd -; CHECK: pshufd $-79 +; CHECK: pshufd $177 ; CHECK: pand ; CHECK: ret %C = icmp eq <2 x i64> %A, %B @@ -54,9 +54,9 @@ define <2 x i64> @test5(<2 x i64> %A, <2 x i64> %B) nounwind { } define <2 x i64> @test6(<2 x i64> %A, <2 x i64> %B) nounwind { -; CHECK: test6: +; CHECK-LABEL: test6: ; CHECK: pcmpeqd -; CHECK: pshufd $-79 +; CHECK: pshufd $177 ; CHECK: pand ; CHECK: pcmpeqd ; CHECK: pxor @@ -65,3 +65,159 @@ define <2 x i64> @test6(<2 x i64> %A, <2 x i64> %B) nounwind { %D = sext <2 x i1> %C to <2 x i64> ret <2 x i64> %D } + +define <2 x i64> @test7(<2 x i64> %A, <2 x i64> %B) nounwind { +; CHECK: [[CONSTSEG:[A-Z0-9_]*]]: +; CHECK: .long 2147483648 +; CHECK-NEXT: .long 0 +; CHECK-NEXT: .long 2147483648 +; CHECK-NEXT: .long 0 +; CHECK-LABEL: test7: +; CHECK: movdqa [[CONSTSEG]], [[CONSTREG:%xmm[0-9]*]] +; CHECK: pxor [[CONSTREG]] +; CHECK: pxor [[CONSTREG]] +; CHECK: pcmpgtd %xmm1 +; CHECK: pshufd $160 +; CHECK: pcmpeqd +; CHECK: pshufd $245 +; CHECK: pand +; CHECK: pshufd $245 +; CHECK: por +; CHECK: ret + %C = icmp sgt <2 x i64> %A, %B + %D = sext <2 x i1> %C to <2 x i64> + ret <2 x i64> %D +} + +define <2 x i64> @test8(<2 x i64> %A, <2 x i64> %B) nounwind { +; CHECK-LABEL: test8: +; CHECK: pxor +; CHECK: pxor +; CHECK: pcmpgtd %xmm0 +; CHECK: pshufd $160 +; CHECK: pcmpeqd +; CHECK: pshufd $245 +; CHECK: pand +; CHECK: pshufd $245 +; CHECK: por +; CHECK: ret + %C = icmp slt <2 x i64> %A, %B + %D = sext <2 x i1> %C to <2 x i64> + ret <2 x i64> %D +} + +define <2 x i64> @test9(<2 x i64> %A, <2 x i64> %B) nounwind { +; CHECK-LABEL: test9: +; CHECK: pxor +; CHECK: pxor +; CHECK: pcmpgtd %xmm0 +; CHECK: pshufd $160 +; CHECK: pcmpeqd +; CHECK: pshufd $245 +; CHECK: pand +; CHECK: pshufd $245 +; CHECK: por +; CHECK: pcmpeqd +; CHECK: pxor +; CHECK: ret + %C = icmp sge <2 x i64> %A, %B + %D = sext <2 x i1> %C to <2 x i64> + ret <2 x i64> %D +} + +define <2 x i64> @test10(<2 x i64> %A, <2 x i64> %B) nounwind { +; CHECK-LABEL: test10: +; CHECK: pxor +; CHECK: pxor +; CHECK: pcmpgtd %xmm1 +; CHECK: pshufd $160 +; CHECK: pcmpeqd +; CHECK: pshufd $245 +; CHECK: pand +; CHECK: pshufd $245 +; CHECK: por +; CHECK: pcmpeqd +; CHECK: pxor +; CHECK: ret + %C = icmp sle <2 x i64> %A, %B + %D = sext <2 x i1> %C to <2 x i64> + ret <2 x i64> %D +} + +define <2 x i64> @test11(<2 x i64> %A, <2 x i64> %B) nounwind { +; CHECK: [[CONSTSEG:[A-Z0-9_]*]]: +; CHECK: .long 2147483648 +; CHECK-NEXT: .long 2147483648 +; CHECK-NEXT: .long 2147483648 +; CHECK-NEXT: .long 2147483648 +; CHECK-LABEL: test11: +; CHECK: movdqa [[CONSTSEG]], [[CONSTREG:%xmm[0-9]*]] +; CHECK: pxor [[CONSTREG]] +; CHECK: pxor [[CONSTREG]] +; CHECK: pcmpgtd %xmm1 +; CHECK: pshufd $160 +; CHECK: pcmpeqd +; CHECK: pshufd $245 +; CHECK: pand +; CHECK: pshufd $245 +; CHECK: por +; CHECK: ret + %C = icmp ugt <2 x i64> %A, %B + %D = sext <2 x i1> %C to <2 x i64> + ret <2 x i64> %D +} + +define <2 x i64> @test12(<2 x i64> %A, <2 x i64> %B) nounwind { +; CHECK-LABEL: test12: +; CHECK: pxor +; CHECK: pxor +; CHECK: pcmpgtd %xmm0 +; CHECK: pshufd $160 +; CHECK: pcmpeqd +; CHECK: pshufd $245 +; CHECK: pand +; CHECK: pshufd $245 +; CHECK: por +; CHECK: ret + %C = icmp ult <2 x i64> %A, %B + %D = sext <2 x i1> %C to <2 x i64> + ret <2 x i64> %D +} + +define <2 x i64> @test13(<2 x i64> %A, <2 x i64> %B) nounwind { +; CHECK-LABEL: test13: +; CHECK: pxor +; CHECK: pxor +; CHECK: pcmpgtd %xmm0 +; CHECK: pshufd $160 +; CHECK: pcmpeqd +; CHECK: pshufd $245 +; CHECK: pand +; CHECK: pshufd $245 +; CHECK: por +; CHECK: pcmpeqd +; CHECK: pxor +; CHECK: ret + %C = icmp uge <2 x i64> %A, %B + %D = sext <2 x i1> %C to <2 x i64> + ret <2 x i64> %D +} + +define <2 x i64> @test14(<2 x i64> %A, <2 x i64> %B) nounwind { +; CHECK-LABEL: test14: +; CHECK: pxor +; CHECK: pxor +; CHECK: pcmpgtd %xmm1 +; CHECK: pshufd $160 +; CHECK: pcmpeqd +; CHECK: pshufd $245 +; CHECK: pand +; CHECK: pshufd $245 +; CHECK: por +; CHECK: pcmpeqd +; CHECK: pxor +; CHECK: ret + %C = icmp ule <2 x i64> %A, %B + %D = sext <2 x i1> %C to <2 x i64> + ret <2 x i64> %D +}