diff options
Diffstat (limited to 'llvm/test')
| -rw-r--r-- | llvm/test/CodeGen/X86/vsplit-and.ll | 59 |
1 files changed, 53 insertions, 6 deletions
diff --git a/llvm/test/CodeGen/X86/vsplit-and.ll b/llvm/test/CodeGen/X86/vsplit-and.ll index c16b2949358..345ea5a3d93 100644 --- a/llvm/test/CodeGen/X86/vsplit-and.ll +++ b/llvm/test/CodeGen/X86/vsplit-and.ll @@ -1,9 +1,17 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ; RUN: llc < %s -mtriple=x86_64-linux -mcpu=penryn | FileCheck %s define void @t0(<2 x i64>* %dst, <2 x i64> %src1, <2 x i64> %src2) nounwind readonly { -; CHECK: t0 -; CHECK: pand -; CHECK: ret +; CHECK-LABEL: t0: +; CHECK: # BB#0: +; CHECK-NEXT: pxor %xmm2, %xmm2 +; CHECK-NEXT: pcmpeqq %xmm2, %xmm0 +; CHECK-NEXT: pcmpeqd %xmm3, %xmm3 +; CHECK-NEXT: pxor %xmm0, %xmm3 +; CHECK-NEXT: pcmpeqq %xmm2, %xmm1 +; CHECK-NEXT: pandn %xmm3, %xmm1 +; CHECK-NEXT: movdqa %xmm1, (%rdi) +; CHECK-NEXT: retq %cmp1 = icmp ne <2 x i64> %src1, zeroinitializer %cmp2 = icmp ne <2 x i64> %src2, zeroinitializer %t1 = and <2 x i1> %cmp1, %cmp2 @@ -13,9 +21,48 @@ define void @t0(<2 x i64>* %dst, <2 x i64> %src1, <2 x i64> %src2) nounwind read } define void @t2(<3 x i64>* %dst, <3 x i64> %src1, <3 x i64> %src2) nounwind readonly { -; CHECK: t2 -; CHECK: pand -; CHECK: ret +; CHECK-LABEL: t2: +; CHECK: # BB#0: +; CHECK-NEXT: movd %r9, %xmm1 +; CHECK-NEXT: movd %r8, %xmm0 +; CHECK-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] +; CHECK-NEXT: movd %rdx, %xmm1 +; CHECK-NEXT: movd %rsi, %xmm2 +; CHECK-NEXT: punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm1[0] +; CHECK-NEXT: movd %rcx, %xmm1 +; CHECK-NEXT: movq {{.*#+}} xmm3 = mem[0],zero +; CHECK-NEXT: pxor %xmm4, %xmm4 +; CHECK-NEXT: pcmpeqq %xmm4, %xmm1 +; CHECK-NEXT: pcmpeqd %xmm5, %xmm5 +; CHECK-NEXT: pxor %xmm5, %xmm1 +; CHECK-NEXT: pshufd {{.*#+}} xmm1 = xmm1[0,1,0,2] +; CHECK-NEXT: pcmpeqq %xmm4, %xmm2 +; CHECK-NEXT: pxor %xmm5, %xmm2 +; CHECK-NEXT: pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3] +; CHECK-NEXT: pblendw {{.*#+}} xmm2 = xmm2[0,1,2,3],xmm1[4,5,6,7] +; CHECK-NEXT: pslld $31, %xmm2 +; CHECK-NEXT: psrad $31, %xmm2 +; CHECK-NEXT: pcmpeqq %xmm4, %xmm3 +; CHECK-NEXT: pxor %xmm5, %xmm3 +; CHECK-NEXT: pshufd {{.*#+}} xmm1 = xmm3[0,1,0,2] +; CHECK-NEXT: pcmpeqq %xmm4, %xmm0 +; CHECK-NEXT: pxor %xmm5, %xmm0 +; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3] +; CHECK-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7] +; CHECK-NEXT: pslld $31, %xmm0 +; CHECK-NEXT: psrad $31, %xmm0 +; CHECK-NEXT: pand %xmm2, %xmm0 +; CHECK-NEXT: pmovzxdq {{.*#+}} xmm1 = xmm0[0],zero,xmm0[1],zero +; CHECK-NEXT: psllq $63, %xmm1 +; CHECK-NEXT: psrad $31, %xmm1 +; CHECK-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] +; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,2,3,3] +; CHECK-NEXT: psllq $63, %xmm0 +; CHECK-NEXT: psrad $31, %xmm0 +; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] +; CHECK-NEXT: movq %xmm0, 16(%rdi) +; CHECK-NEXT: movdqa %xmm1, (%rdi) +; CHECK-NEXT: retq %cmp1 = icmp ne <3 x i64> %src1, zeroinitializer %cmp2 = icmp ne <3 x i64> %src2, zeroinitializer %t1 = and <3 x i1> %cmp1, %cmp2 |

