]> granicus.if.org Git - llvm/commitdiff
[x86] add test for PR28044
authorSanjay Patel <spatel@rotateright.com>
Fri, 10 Jun 2016 18:05:55 +0000 (18:05 +0000)
committerSanjay Patel <spatel@rotateright.com>
Fri, 10 Jun 2016 18:05:55 +0000 (18:05 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@272411 91177308-0d34-0410-b5e6-96231b3b80d8

test/CodeGen/X86/sse1.ll

index fd35e75d71aea6d31263fb86dbcf9382613b5aab..6ed3c1c48d6aa160f171173629d077e9e1d8db19 100644 (file)
@@ -47,3 +47,65 @@ entry:
   %a14 = select <4 x i1> %a1, <4 x float> <float 1.000000e+00, float 2.000000e+00, float 3.000000e+00, float 4.000000e+0> , <4 x float> zeroinitializer
   ret <4 x float> %a14
 }
+
+; v4i32 isn't legal for SSE1, but this should be cmpps.
+
+define <4 x float> @PR28044(<4 x float> %a0, <4 x float> %a1) nounwind {
+; CHECK-LABEL: PR28044:
+; CHECK:       # BB#0:
+; CHECK:         movaps %xmm1, %xmm2
+; CHECK-NEXT:    shufps {{.*#+}} xmm2 = xmm2[3,1,2,3]
+; CHECK-NEXT:    movaps %xmm0, %xmm3
+; CHECK-NEXT:    shufps {{.*#+}} xmm3 = xmm3[3,1,2,3]
+; CHECK-NEXT:    ucomiss %xmm2, %xmm3
+; CHECK-NEXT:    setnp %al
+; CHECK-NEXT:    sete %cl
+; CHECK-NEXT:    andb %al, %cl
+; CHECK-NEXT:    movzbl %cl, %eax
+; CHECK-NEXT:    shll $31, %eax
+; CHECK-NEXT:    sarl $31, %eax
+; CHECK-NEXT:    movl %eax,
+; CHECK-NEXT:    movaps %xmm1, %xmm2
+; CHECK-NEXT:    shufps {{.*#+}} xmm2 = xmm2[1,1,2,3]
+; CHECK-NEXT:    movaps %xmm0, %xmm3
+; CHECK-NEXT:    shufps {{.*#+}} xmm3 = xmm3[1,1,2,3]
+; CHECK-NEXT:    ucomiss %xmm2, %xmm3
+; CHECK-NEXT:    setnp %al
+; CHECK-NEXT:    sete %cl
+; CHECK-NEXT:    andb %al, %cl
+; CHECK-NEXT:    movzbl %cl, %eax
+; CHECK-NEXT:    shll $31, %eax
+; CHECK-NEXT:    sarl $31, %eax
+; CHECK-NEXT:    movl %eax,
+; CHECK-NEXT:    ucomiss %xmm1, %xmm0
+; CHECK-NEXT:    setnp %al
+; CHECK-NEXT:    sete %cl
+; CHECK-NEXT:    andb %al, %cl
+; CHECK-NEXT:    movzbl %cl, %eax
+; CHECK-NEXT:    shll $31, %eax
+; CHECK-NEXT:    sarl $31, %eax
+; CHECK-NEXT:    movl %eax,
+; CHECK-NEXT:    shufps {{.*#+}} xmm1 = xmm1[2,1,2,3]
+; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[2,1,2,3]
+; CHECK-NEXT:    ucomiss %xmm1, %xmm0
+; CHECK-NEXT:    setnp %al
+; CHECK-NEXT:    sete %cl
+; CHECK-NEXT:    andb %al, %cl
+; CHECK-NEXT:    movzbl %cl, %eax
+; CHECK-NEXT:    shll $31, %eax
+; CHECK-NEXT:    sarl $31, %eax
+; CHECK-NEXT:    movl %eax,
+; CHECK-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
+; CHECK-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
+; CHECK-NEXT:    unpcklps {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
+; CHECK-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
+; CHECK-NEXT:    movss {{.*#+}} xmm2 = mem[0],zero,zero,zero
+; CHECK-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
+; CHECK-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
+;
+  %cmp = fcmp oeq <4 x float> %a0, %a1
+  %sext = sext <4 x i1> %cmp to <4 x i32>
+  %res = bitcast <4 x i32> %sext to <4 x float>
+  ret <4 x float> %res
+}
+