diff options
Diffstat (limited to 'llvm/test/CodeGen/X86/sadd_sat.ll')
-rw-r--r-- | llvm/test/CodeGen/X86/sadd_sat.ll | 71 |
1 files changed, 22 insertions, 49 deletions
diff --git a/llvm/test/CodeGen/X86/sadd_sat.ll b/llvm/test/CodeGen/X86/sadd_sat.ll index 3f91b6674e8..b5524e1db8b 100644 --- a/llvm/test/CodeGen/X86/sadd_sat.ll +++ b/llvm/test/CodeGen/X86/sadd_sat.ll @@ -185,55 +185,28 @@ define <4 x i32> @vec(<4 x i32> %x, <4 x i32> %y) nounwind { ; ; X64-LABEL: vec: ; X64: # %bb.0: -; X64-NEXT: pshufd {{.*#+}} xmm2 = xmm1[1,1,2,3] -; X64-NEXT: movd %xmm2, %ecx -; X64-NEXT: pshufd {{.*#+}} xmm2 = xmm0[1,1,2,3] -; X64-NEXT: movd %xmm2, %r8d -; X64-NEXT: xorl %edx, %edx -; X64-NEXT: movl %r8d, %esi -; X64-NEXT: addl %ecx, %esi -; X64-NEXT: setns %dl -; X64-NEXT: addl $2147483647, %edx # imm = 0x7FFFFFFF -; X64-NEXT: addl %ecx, %r8d -; X64-NEXT: cmovol %edx, %r8d -; X64-NEXT: movd %xmm1, %edx -; X64-NEXT: movd %xmm0, %ecx -; X64-NEXT: xorl %esi, %esi -; X64-NEXT: movl %ecx, %edi -; X64-NEXT: addl %edx, %edi -; X64-NEXT: setns %sil -; X64-NEXT: addl $2147483647, %esi # imm = 0x7FFFFFFF -; X64-NEXT: addl %edx, %ecx -; X64-NEXT: cmovol %esi, %ecx -; X64-NEXT: pshufd {{.*#+}} xmm2 = xmm1[2,3,0,1] -; X64-NEXT: movd %xmm2, %edx -; X64-NEXT: pshufd {{.*#+}} xmm2 = xmm0[2,3,0,1] -; X64-NEXT: movd %xmm2, %eax -; X64-NEXT: xorl %edi, %edi -; X64-NEXT: movl %eax, %esi -; X64-NEXT: addl %edx, %esi -; X64-NEXT: setns %dil -; X64-NEXT: addl $2147483647, %edi # imm = 0x7FFFFFFF -; X64-NEXT: addl %edx, %eax -; X64-NEXT: cmovol %edi, %eax -; X64-NEXT: pshufd {{.*#+}} xmm1 = xmm1[3,1,2,3] -; X64-NEXT: movd %xmm1, %r9d -; X64-NEXT: pshufd {{.*#+}} xmm0 = xmm0[3,1,2,3] -; X64-NEXT: movd %xmm0, %edx -; X64-NEXT: xorl %edi, %edi -; X64-NEXT: movl %edx, %esi -; X64-NEXT: addl %r9d, %esi -; X64-NEXT: setns %dil -; X64-NEXT: addl $2147483647, %edi # imm = 0x7FFFFFFF -; X64-NEXT: addl %r9d, %edx -; X64-NEXT: cmovol %edi, %edx -; X64-NEXT: movd %edx, %xmm0 -; X64-NEXT: movd %eax, %xmm1 -; X64-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1] -; X64-NEXT: movd %ecx, %xmm0 -; X64-NEXT: movd %r8d, %xmm2 -; X64-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1] -; X64-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] +; X64-NEXT: pxor %xmm3, %xmm3 +; X64-NEXT: pxor %xmm4, %xmm4 +; X64-NEXT: pcmpgtd %xmm1, %xmm4 +; X64-NEXT: pcmpeqd %xmm2, %xmm2 +; X64-NEXT: pxor %xmm2, %xmm4 +; X64-NEXT: pxor %xmm5, %xmm5 +; X64-NEXT: pcmpgtd %xmm0, %xmm5 +; X64-NEXT: pxor %xmm2, %xmm5 +; X64-NEXT: pcmpeqd %xmm5, %xmm4 +; X64-NEXT: paddd %xmm1, %xmm0 +; X64-NEXT: pcmpgtd %xmm0, %xmm3 +; X64-NEXT: pxor %xmm3, %xmm2 +; X64-NEXT: pcmpeqd %xmm5, %xmm2 +; X64-NEXT: pandn %xmm4, %xmm2 +; X64-NEXT: movdqa %xmm3, %xmm1 +; X64-NEXT: pandn {{.*}}(%rip), %xmm1 +; X64-NEXT: psrld $1, %xmm3 +; X64-NEXT: por %xmm1, %xmm3 +; X64-NEXT: pand %xmm2, %xmm3 +; X64-NEXT: pandn %xmm0, %xmm2 +; X64-NEXT: por %xmm3, %xmm2 +; X64-NEXT: movdqa %xmm2, %xmm0 ; X64-NEXT: retq %tmp = call <4 x i32> @llvm.sadd.sat.v4i32(<4 x i32> %x, <4 x i32> %y); ret <4 x i32> %tmp; |