summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/X86/sadd_sat.ll
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/CodeGen/X86/sadd_sat.ll')
-rw-r--r--llvm/test/CodeGen/X86/sadd_sat.ll71
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;
OpenPOWER on IntegriCloud