summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/X86/usub_sat_plus.ll
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/CodeGen/X86/usub_sat_plus.ll')
-rw-r--r--llvm/test/CodeGen/X86/usub_sat_plus.ll37
1 files changed, 21 insertions, 16 deletions
diff --git a/llvm/test/CodeGen/X86/usub_sat_plus.ll b/llvm/test/CodeGen/X86/usub_sat_plus.ll
index 6a9e5a46642..f56e0962eac 100644
--- a/llvm/test/CodeGen/X86/usub_sat_plus.ll
+++ b/llvm/test/CodeGen/X86/usub_sat_plus.ll
@@ -111,17 +111,22 @@ define zeroext i8 @func8(i8 zeroext %x, i8 zeroext %y, i8 zeroext %z) nounwind {
define zeroext i4 @func4(i4 zeroext %x, i4 zeroext %y, i4 zeroext %z) nounwind {
; X86-LABEL: func4:
; X86: # %bb.0:
+; X86-NEXT: pushl %ebx
+; X86-NEXT: pushl %esi
; X86-NEXT: movb {{[0-9]+}}(%esp), %cl
; X86-NEXT: movb {{[0-9]+}}(%esp), %al
; X86-NEXT: mulb {{[0-9]+}}(%esp)
-; X86-NEXT: shlb $4, %al
-; X86-NEXT: shlb $4, %cl
-; X86-NEXT: xorl %edx, %edx
-; X86-NEXT: subb %al, %cl
-; X86-NEXT: movzbl %cl, %eax
-; X86-NEXT: cmovbl %edx, %eax
-; X86-NEXT: shrb $4, %al
-; X86-NEXT: movzbl %al, %eax
+; X86-NEXT: movl %eax, %edx
+; X86-NEXT: andb $15, %dl
+; X86-NEXT: movzbl %dl, %esi
+; X86-NEXT: movzbl %cl, %ebx
+; X86-NEXT: cmpb %dl, %cl
+; X86-NEXT: cmovbel %esi, %ebx
+; X86-NEXT: subb %al, %bl
+; X86-NEXT: movzbl %bl, %eax
+; X86-NEXT: andl $15, %eax
+; X86-NEXT: popl %esi
+; X86-NEXT: popl %ebx
; X86-NEXT: retl
;
; X64-LABEL: func4:
@@ -129,14 +134,14 @@ define zeroext i4 @func4(i4 zeroext %x, i4 zeroext %y, i4 zeroext %z) nounwind {
; X64-NEXT: movl %esi, %eax
; X64-NEXT: # kill: def $al killed $al killed $eax
; X64-NEXT: mulb %dl
-; X64-NEXT: shlb $4, %al
-; X64-NEXT: shlb $4, %dil
-; X64-NEXT: xorl %ecx, %ecx
-; X64-NEXT: subb %al, %dil
-; X64-NEXT: movzbl %dil, %eax
-; X64-NEXT: cmovbl %ecx, %eax
-; X64-NEXT: shrb $4, %al
-; X64-NEXT: movzbl %al, %eax
+; X64-NEXT: movl %eax, %ecx
+; X64-NEXT: andb $15, %cl
+; X64-NEXT: movzbl %cl, %ecx
+; X64-NEXT: cmpb %cl, %dil
+; X64-NEXT: cmoval %edi, %ecx
+; X64-NEXT: subb %al, %cl
+; X64-NEXT: movzbl %cl, %eax
+; X64-NEXT: andl $15, %eax
; X64-NEXT: retq
%a = mul i4 %y, %z
%tmp = call i4 @llvm.usub.sat.i4(i4 %x, i4 %a)
OpenPOWER on IntegriCloud