mirror of
https://github.com/RPCS3/llvm.git
synced 2026-07-19 15:13:49 -04:00
[SDAG] Fold umul_lohi with 0 or 1 multiplicand
These can turn up during multiplication legalization. In principle these should also apply to smul_lohi, but I wasn't able to figure out how to produce those with the necessary operands. Differential Revision: https://reviews.llvm.org/D66380 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@369864 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -4364,6 +4364,18 @@ SDValue DAGCombiner::visitUMUL_LOHI(SDNode *N) {
|
||||
EVT VT = N->getValueType(0);
|
||||
SDLoc DL(N);
|
||||
|
||||
// (umul_lohi N0, 0) -> (0, 0)
|
||||
if (isNullConstant(N->getOperand(1))) {
|
||||
SDValue Zero = DAG.getConstant(0, DL, VT);
|
||||
return CombineTo(N, Zero, Zero);
|
||||
}
|
||||
|
||||
// (umul_lohi N0, 1) -> (N0, 0)
|
||||
if (isOneConstant(N->getOperand(1))) {
|
||||
SDValue Zero = DAG.getConstant(0, DL, VT);
|
||||
return CombineTo(N, N->getOperand(0), Zero);
|
||||
}
|
||||
|
||||
// If the type is twice as wide is legal, transform the mulhu to a wider
|
||||
// multiply plus a shift.
|
||||
if (VT.isSimple() && !VT.isVector()) {
|
||||
|
||||
@@ -14,42 +14,29 @@ define i64 @foo(i64 %x, i64 %y) nounwind {
|
||||
; X86-NEXT: pushl %edi
|
||||
; X86-NEXT: pushl %esi
|
||||
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
|
||||
; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
|
||||
; X86-NEXT: movl {{[0-9]+}}(%esp), %ebp
|
||||
; X86-NEXT: movl {{[0-9]+}}(%esp), %edi
|
||||
; X86-NEXT: movl {{[0-9]+}}(%esp), %ebx
|
||||
; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
|
||||
; X86-NEXT: movl %ecx, %eax
|
||||
; X86-NEXT: mull %ebp
|
||||
; X86-NEXT: movl %edx, %ebx
|
||||
; X86-NEXT: movl %esi, %eax
|
||||
; X86-NEXT: mull %ebp
|
||||
; X86-NEXT: movl %edx, %ebp
|
||||
; X86-NEXT: movl %eax, %esi
|
||||
; X86-NEXT: addl %ebx, %esi
|
||||
; X86-NEXT: adcl $0, %ebp
|
||||
; X86-NEXT: movl %ecx, %eax
|
||||
; X86-NEXT: mull %edi
|
||||
; X86-NEXT: movl %edx, %ebx
|
||||
; X86-NEXT: addl %esi, %eax
|
||||
; X86-NEXT: adcl %ebp, %ebx
|
||||
; X86-NEXT: setb %al
|
||||
; X86-NEXT: movzbl %al, %ecx
|
||||
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
|
||||
; X86-NEXT: mull %edi
|
||||
; X86-NEXT: movl %edx, %esi
|
||||
; X86-NEXT: movl %eax, %ebp
|
||||
; X86-NEXT: addl %ebx, %ebp
|
||||
; X86-NEXT: adcl %ecx, %esi
|
||||
; X86-NEXT: xorl %ecx, %ecx
|
||||
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
|
||||
; X86-NEXT: mull %ecx
|
||||
; X86-NEXT: mull %ebx
|
||||
; X86-NEXT: movl %edx, %edi
|
||||
; X86-NEXT: movl %eax, %ebx
|
||||
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
|
||||
; X86-NEXT: mull %ecx
|
||||
; X86-NEXT: addl %ebx, %eax
|
||||
; X86-NEXT: adcl %edi, %edx
|
||||
; X86-NEXT: movl %ebp, %eax
|
||||
; X86-NEXT: mull %ebx
|
||||
; X86-NEXT: movl %edx, %ebx
|
||||
; X86-NEXT: movl %eax, %ebp
|
||||
; X86-NEXT: addl %edi, %ebp
|
||||
; X86-NEXT: adcl $0, %ebx
|
||||
; X86-NEXT: movl %ecx, %eax
|
||||
; X86-NEXT: mull %esi
|
||||
; X86-NEXT: movl %edx, %ecx
|
||||
; X86-NEXT: addl %ebp, %eax
|
||||
; X86-NEXT: adcl %esi, %edx
|
||||
; X86-NEXT: adcl %ebx, %ecx
|
||||
; X86-NEXT: setb %al
|
||||
; X86-NEXT: movzbl %al, %edi
|
||||
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
|
||||
; X86-NEXT: mull %esi
|
||||
; X86-NEXT: addl %ecx, %eax
|
||||
; X86-NEXT: adcl %edi, %edx
|
||||
; X86-NEXT: popl %esi
|
||||
; X86-NEXT: popl %edi
|
||||
; X86-NEXT: popl %ebx
|
||||
@@ -81,7 +68,7 @@ define i64 @mul1(i64 %n, i64* nocapture %z, i64* nocapture %x, i64 %y) nounwind
|
||||
; X86-NEXT: pushl %ebx
|
||||
; X86-NEXT: pushl %edi
|
||||
; X86-NEXT: pushl %esi
|
||||
; X86-NEXT: subl $28, %esp
|
||||
; X86-NEXT: subl $24, %esp
|
||||
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
|
||||
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
|
||||
; X86-NEXT: orl %ecx, %eax
|
||||
@@ -89,81 +76,64 @@ define i64 @mul1(i64 %n, i64* nocapture %z, i64* nocapture %x, i64 %y) nounwind
|
||||
; X86-NEXT: # %bb.1: # %for.body.preheader
|
||||
; X86-NEXT: xorl %eax, %eax
|
||||
; X86-NEXT: xorl %edx, %edx
|
||||
; X86-NEXT: xorl %ebx, %ebx
|
||||
; X86-NEXT: movl $0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
|
||||
; X86-NEXT: xorl %ebp, %ebp
|
||||
; X86-NEXT: movl $0, (%esp) # 4-byte Folded Spill
|
||||
; X86-NEXT: .p2align 4, 0x90
|
||||
; X86-NEXT: .LBB1_2: # %for.body
|
||||
; X86-NEXT: # =>This Inner Loop Header: Depth=1
|
||||
; X86-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
|
||||
; X86-NEXT: movl %eax, %ecx
|
||||
; X86-NEXT: movl (%eax,%ebx,8), %ebp
|
||||
; X86-NEXT: movl 4(%eax,%ebx,8), %esi
|
||||
; X86-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X86-NEXT: movl %ebp, %eax
|
||||
; X86-NEXT: movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
|
||||
; X86-NEXT: mull %ecx
|
||||
; X86-NEXT: movl %edx, %edi
|
||||
; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X86-NEXT: movl (%eax,%ebp,8), %esi
|
||||
; X86-NEXT: movl 4(%eax,%ebp,8), %ecx
|
||||
; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X86-NEXT: movl %esi, %eax
|
||||
; X86-NEXT: mull %ecx
|
||||
; X86-NEXT: movl %edx, %ecx
|
||||
; X86-NEXT: movl %eax, %esi
|
||||
; X86-NEXT: addl %edi, %esi
|
||||
; X86-NEXT: adcl $0, %ecx
|
||||
; X86-NEXT: movl %ebp, %eax
|
||||
; X86-NEXT: movl {{[0-9]+}}(%esp), %edx
|
||||
; X86-NEXT: mull %edx
|
||||
; X86-NEXT: movl %edx, %ebp
|
||||
; X86-NEXT: movl %eax, %edi
|
||||
; X86-NEXT: addl %esi, %edi
|
||||
; X86-NEXT: adcl %ecx, %ebp
|
||||
; X86-NEXT: setb {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Folded Spill
|
||||
; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
|
||||
; X86-NEXT: mull {{[0-9]+}}(%esp)
|
||||
; X86-NEXT: movl %edx, %ecx
|
||||
; X86-NEXT: movl %eax, %esi
|
||||
; X86-NEXT: addl %ebp, %esi
|
||||
; X86-NEXT: movzbl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 1-byte Folded Reload
|
||||
; X86-NEXT: adcl %eax, %ecx
|
||||
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
|
||||
; X86-NEXT: xorl %edx, %edx
|
||||
; X86-NEXT: movl %edx, %edi
|
||||
; X86-NEXT: mull %edx
|
||||
; X86-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X86-NEXT: movl %eax, %ebp
|
||||
; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
|
||||
; X86-NEXT: xorl %edx, %edx
|
||||
; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X86-NEXT: movl %ecx, %eax
|
||||
; X86-NEXT: mull %edi
|
||||
; X86-NEXT: movl %edx, %ecx
|
||||
; X86-NEXT: movl %eax, %ebx
|
||||
; X86-NEXT: addl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Folded Reload
|
||||
; X86-NEXT: adcl $0, %ecx
|
||||
; X86-NEXT: movl %esi, %eax
|
||||
; X86-NEXT: movl {{[0-9]+}}(%esp), %edx
|
||||
; X86-NEXT: mull %edx
|
||||
; X86-NEXT: addl %ebp, %eax
|
||||
; X86-NEXT: movl {{[0-9]+}}(%esp), %ebp
|
||||
; X86-NEXT: adcl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Folded Reload
|
||||
; X86-NEXT: movl %edx, %esi
|
||||
; X86-NEXT: movl %eax, %edi
|
||||
; X86-NEXT: addl %ebx, %edi
|
||||
; X86-NEXT: adcl %ecx, %esi
|
||||
; X86-NEXT: setb %bl
|
||||
; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
|
||||
; X86-NEXT: mull {{[0-9]+}}(%esp)
|
||||
; X86-NEXT: addl %esi, %eax
|
||||
; X86-NEXT: adcl %ecx, %edx
|
||||
; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload
|
||||
; X86-NEXT: addl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Folded Reload
|
||||
; X86-NEXT: movzbl %bl, %esi
|
||||
; X86-NEXT: movl {{[0-9]+}}(%esp), %ebx
|
||||
; X86-NEXT: adcl %esi, %edx
|
||||
; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
|
||||
; X86-NEXT: addl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Folded Reload
|
||||
; X86-NEXT: adcl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Folded Reload
|
||||
; X86-NEXT: adcl $0, %eax
|
||||
; X86-NEXT: adcl $0, %edx
|
||||
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
|
||||
; X86-NEXT: movl %esi, (%ecx,%ebx,8)
|
||||
; X86-NEXT: movl %edi, 4(%ecx,%ebx,8)
|
||||
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
|
||||
; X86-NEXT: movl %ecx, %edi
|
||||
; X86-NEXT: addl $1, %ebx
|
||||
; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload
|
||||
; X86-NEXT: adcl $0, %esi
|
||||
; X86-NEXT: movl %ebx, %ecx
|
||||
; X86-NEXT: xorl %ebp, %ecx
|
||||
; X86-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X86-NEXT: xorl %edi, %esi
|
||||
; X86-NEXT: orl %ecx, %esi
|
||||
; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
|
||||
; X86-NEXT: movl %ecx, (%esi,%ebp,8)
|
||||
; X86-NEXT: movl %edi, 4(%esi,%ebp,8)
|
||||
; X86-NEXT: addl $1, %ebp
|
||||
; X86-NEXT: movl (%esp), %edi # 4-byte Reload
|
||||
; X86-NEXT: adcl $0, %edi
|
||||
; X86-NEXT: movl %ebp, %esi
|
||||
; X86-NEXT: xorl %ebx, %esi
|
||||
; X86-NEXT: movl %edi, (%esp) # 4-byte Spill
|
||||
; X86-NEXT: xorl {{[0-9]+}}(%esp), %edi
|
||||
; X86-NEXT: orl %esi, %edi
|
||||
; X86-NEXT: jne .LBB1_2
|
||||
; X86-NEXT: .LBB1_3: # %for.end
|
||||
; X86-NEXT: xorl %eax, %eax
|
||||
; X86-NEXT: xorl %edx, %edx
|
||||
; X86-NEXT: addl $28, %esp
|
||||
; X86-NEXT: addl $24, %esp
|
||||
; X86-NEXT: popl %esi
|
||||
; X86-NEXT: popl %edi
|
||||
; X86-NEXT: popl %ebx
|
||||
|
||||
@@ -539,12 +539,9 @@ define i64 @testNegOverflow(i64 %a) {
|
||||
;
|
||||
; X86-LABEL: testNegOverflow:
|
||||
; X86: # %bb.0: # %entry
|
||||
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
|
||||
; X86-NEXT: movl $1, %edx
|
||||
; X86-NEXT: movl %ecx, %eax
|
||||
; X86-NEXT: mull %edx
|
||||
; X86-NEXT: shll $31, %ecx
|
||||
; X86-NEXT: addl %ecx, %edx
|
||||
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
|
||||
; X86-NEXT: movl %eax, %edx
|
||||
; X86-NEXT: shll $31, %edx
|
||||
; X86-NEXT: addl {{[0-9]+}}(%esp), %edx
|
||||
; X86-NEXT: retl
|
||||
entry:
|
||||
|
||||
+4918
-7138
File diff suppressed because it is too large
Load Diff
+167
-224
@@ -15,264 +15,207 @@ define void @test(i256* %a, i256* %b, i256* %out) #0 {
|
||||
; X32-NEXT: .cfi_def_cfa_offset 16
|
||||
; X32-NEXT: pushl %esi
|
||||
; X32-NEXT: .cfi_def_cfa_offset 20
|
||||
; X32-NEXT: subl $88, %esp
|
||||
; X32-NEXT: .cfi_def_cfa_offset 108
|
||||
; X32-NEXT: subl $72, %esp
|
||||
; X32-NEXT: .cfi_def_cfa_offset 92
|
||||
; X32-NEXT: .cfi_offset %esi, -20
|
||||
; X32-NEXT: .cfi_offset %edi, -16
|
||||
; X32-NEXT: .cfi_offset %ebx, -12
|
||||
; X32-NEXT: .cfi_offset %ebp, -8
|
||||
; X32-NEXT: movl {{[0-9]+}}(%esp), %eax
|
||||
; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx
|
||||
; X32-NEXT: movl 12(%ecx), %ebp
|
||||
; X32-NEXT: movl 8(%ecx), %edi
|
||||
; X32-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: movl (%eax), %ebx
|
||||
; X32-NEXT: movl 12(%ecx), %esi
|
||||
; X32-NEXT: movl 8(%ecx), %ebx
|
||||
; X32-NEXT: movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: movl %edi, %eax
|
||||
; X32-NEXT: mull %ebx
|
||||
; X32-NEXT: movl %edx, %ecx
|
||||
; X32-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: movl %ebp, %eax
|
||||
; X32-NEXT: movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: mull %ebx
|
||||
; X32-NEXT: movl %edx, %esi
|
||||
; X32-NEXT: movl %eax, %ebx
|
||||
; X32-NEXT: addl %ecx, %ebx
|
||||
; X32-NEXT: adcl $0, %esi
|
||||
; X32-NEXT: movl {{[0-9]+}}(%esp), %eax
|
||||
; X32-NEXT: movl 4(%eax), %ecx
|
||||
; X32-NEXT: movl %edi, %eax
|
||||
; X32-NEXT: mull %ecx
|
||||
; X32-NEXT: movl %ecx, %edi
|
||||
; X32-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: movl %edx, %ecx
|
||||
; X32-NEXT: addl %ebx, %eax
|
||||
; X32-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: adcl %esi, %ecx
|
||||
; X32-NEXT: setb {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Folded Spill
|
||||
; X32-NEXT: movl %ebp, %eax
|
||||
; X32-NEXT: movl (%eax), %edi
|
||||
; X32-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: movl %ebx, %eax
|
||||
; X32-NEXT: mull %edi
|
||||
; X32-NEXT: movl %edx, %ebx
|
||||
; X32-NEXT: movl %eax, %edi
|
||||
; X32-NEXT: addl %ecx, %edi
|
||||
; X32-NEXT: movzbl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 1-byte Folded Reload
|
||||
; X32-NEXT: adcl %eax, %ebx
|
||||
; X32-NEXT: xorl %edx, %edx
|
||||
; X32-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
|
||||
; X32-NEXT: movl %ecx, %eax
|
||||
; X32-NEXT: mull %edx
|
||||
; X32-NEXT: movl %edx, %ebp
|
||||
; X32-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: movl %eax, %esi
|
||||
; X32-NEXT: movl %eax, (%esp) # 4-byte Spill
|
||||
; X32-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
|
||||
; X32-NEXT: xorl %edx, %edx
|
||||
; X32-NEXT: mull %edx
|
||||
; X32-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: addl %esi, %eax
|
||||
; X32-NEXT: adcl %ebp, %edx
|
||||
; X32-NEXT: addl %edi, %eax
|
||||
; X32-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: adcl %ebx, %edx
|
||||
; X32-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: movl {{[0-9]+}}(%esp), %esi
|
||||
; X32-NEXT: movl (%esi), %ebp
|
||||
; X32-NEXT: movl %ebp, %eax
|
||||
; X32-NEXT: movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: mull %ecx
|
||||
; X32-NEXT: movl %ecx, %edi
|
||||
; X32-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: movl %edx, %ecx
|
||||
; X32-NEXT: movl 4(%esi), %esi
|
||||
; X32-NEXT: movl %esi, %eax
|
||||
; X32-NEXT: movl %esi, %ecx
|
||||
; X32-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: mull %edi
|
||||
; X32-NEXT: movl %edx, %edi
|
||||
; X32-NEXT: movl %eax, %ebx
|
||||
; X32-NEXT: addl %ecx, %ebx
|
||||
; X32-NEXT: adcl $0, %edi
|
||||
; X32-NEXT: movl %ebp, %eax
|
||||
; X32-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload
|
||||
; X32-NEXT: movl %edx, %esi
|
||||
; X32-NEXT: movl %eax, %edi
|
||||
; X32-NEXT: addl %ebp, %edi
|
||||
; X32-NEXT: adcl $0, %esi
|
||||
; X32-NEXT: movl {{[0-9]+}}(%esp), %eax
|
||||
; X32-NEXT: movl 4(%eax), %ebp
|
||||
; X32-NEXT: movl %ebx, %eax
|
||||
; X32-NEXT: mull %ebp
|
||||
; X32-NEXT: movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: movl %edx, %ebx
|
||||
; X32-NEXT: addl %edi, %eax
|
||||
; X32-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: adcl %esi, %ebx
|
||||
; X32-NEXT: setb {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Folded Spill
|
||||
; X32-NEXT: movl %ecx, %eax
|
||||
; X32-NEXT: mull %ebp
|
||||
; X32-NEXT: movl %edx, %ecx
|
||||
; X32-NEXT: addl %ebx, %eax
|
||||
; X32-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: adcl %edi, %ecx
|
||||
; X32-NEXT: movzbl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 1-byte Folded Reload
|
||||
; X32-NEXT: adcl %eax, %edx
|
||||
; X32-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: movl {{[0-9]+}}(%esp), %edi
|
||||
; X32-NEXT: movl (%edi), %eax
|
||||
; X32-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
|
||||
; X32-NEXT: mull %ecx
|
||||
; X32-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: movl %edx, %esi
|
||||
; X32-NEXT: movl 4(%edi), %eax
|
||||
; X32-NEXT: movl %eax, %edi
|
||||
; X32-NEXT: mull %ecx
|
||||
; X32-NEXT: movl %edx, %ebx
|
||||
; X32-NEXT: movl %eax, %ebp
|
||||
; X32-NEXT: addl %esi, %ebp
|
||||
; X32-NEXT: adcl $0, %ebx
|
||||
; X32-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
|
||||
; X32-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload
|
||||
; X32-NEXT: mull %esi
|
||||
; X32-NEXT: movl %edx, %ecx
|
||||
; X32-NEXT: addl %ebp, %eax
|
||||
; X32-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: adcl %ebx, %ecx
|
||||
; X32-NEXT: setb %bl
|
||||
; X32-NEXT: movl %esi, %eax
|
||||
; X32-NEXT: mull %ebp
|
||||
; X32-NEXT: movl %edx, %edi
|
||||
; X32-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: movl %edi, %eax
|
||||
; X32-NEXT: mull %esi
|
||||
; X32-NEXT: movl %eax, %ebp
|
||||
; X32-NEXT: addl %ecx, %ebp
|
||||
; X32-NEXT: movzbl %bl, %eax
|
||||
; X32-NEXT: adcl %eax, %edi
|
||||
; X32-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload
|
||||
; X32-NEXT: movl %esi, %eax
|
||||
; X32-NEXT: xorl %edx, %edx
|
||||
; X32-NEXT: mull %edx
|
||||
; X32-NEXT: adcl %eax, %edx
|
||||
; X32-NEXT: addl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Folded Reload
|
||||
; X32-NEXT: adcl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Folded Reload
|
||||
; X32-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: movl (%esp), %ecx # 4-byte Reload
|
||||
; X32-NEXT: addl %eax, %ecx
|
||||
; X32-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
|
||||
; X32-NEXT: adcl %edx, %eax
|
||||
; X32-NEXT: addl %ebp, %ecx
|
||||
; X32-NEXT: adcl %edi, %eax
|
||||
; X32-NEXT: addl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Folded Reload
|
||||
; X32-NEXT: movl %ecx, (%esp) # 4-byte Spill
|
||||
; X32-NEXT: adcl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Folded Reload
|
||||
; X32-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: adcl $0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
|
||||
; X32-NEXT: adcl $0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
|
||||
; X32-NEXT: movl {{[0-9]+}}(%esp), %edi
|
||||
; X32-NEXT: movl 8(%edi), %ebx
|
||||
; X32-NEXT: movl %esi, %eax
|
||||
; X32-NEXT: movl %esi, %ecx
|
||||
; X32-NEXT: mull %ebx
|
||||
; X32-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
|
||||
; X32-NEXT: mull %ebx
|
||||
; X32-NEXT: movl %edx, %ebp
|
||||
; X32-NEXT: movl %eax, %esi
|
||||
; X32-NEXT: addl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Folded Reload
|
||||
; X32-NEXT: adcl $0, %ebp
|
||||
; X32-NEXT: movl 12(%edi), %edi
|
||||
; X32-NEXT: movl %ecx, %eax
|
||||
; X32-NEXT: mull %edi
|
||||
; X32-NEXT: movl %edi, %ecx
|
||||
; X32-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: movl %edx, %edi
|
||||
; X32-NEXT: addl %esi, %eax
|
||||
; X32-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: adcl %ebp, %edi
|
||||
; X32-NEXT: setb {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Folded Spill
|
||||
; X32-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
|
||||
; X32-NEXT: mull %ecx
|
||||
; X32-NEXT: movl %edx, %esi
|
||||
; X32-NEXT: movl %eax, %ebp
|
||||
; X32-NEXT: addl %edi, %ebp
|
||||
; X32-NEXT: movzbl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 1-byte Folded Reload
|
||||
; X32-NEXT: adcl %eax, %esi
|
||||
; X32-NEXT: movl %ebx, %edi
|
||||
; X32-NEXT: movl %ebx, %eax
|
||||
; X32-NEXT: xorl %ecx, %ecx
|
||||
; X32-NEXT: mull %ecx
|
||||
; X32-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload
|
||||
; X32-NEXT: addl %eax, %ebx
|
||||
; X32-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
|
||||
; X32-NEXT: adcl %edx, %eax
|
||||
; X32-NEXT: addl %ebp, %ebx
|
||||
; X32-NEXT: adcl %esi, %eax
|
||||
; X32-NEXT: movl (%esp), %ecx # 4-byte Reload
|
||||
; X32-NEXT: addl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
|
||||
; X32-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
|
||||
; X32-NEXT: adcl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
|
||||
; X32-NEXT: adcl $0, %ebx
|
||||
; X32-NEXT: adcl $0, %eax
|
||||
; X32-NEXT: addl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Folded Reload
|
||||
; X32-NEXT: movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: adcl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Folded Reload
|
||||
; X32-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: setb (%esp) # 1-byte Folded Spill
|
||||
; X32-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload
|
||||
; X32-NEXT: movl %esi, %eax
|
||||
; X32-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: mull %edi
|
||||
; X32-NEXT: movl %edx, %ebx
|
||||
; X32-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
|
||||
; X32-NEXT: movl %ecx, %eax
|
||||
; X32-NEXT: mull %edi
|
||||
; X32-NEXT: movl %edx, %edi
|
||||
; X32-NEXT: movl %eax, %ebp
|
||||
; X32-NEXT: addl %ebx, %ebp
|
||||
; X32-NEXT: adcl $0, %edi
|
||||
; X32-NEXT: movl %esi, %eax
|
||||
; X32-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload
|
||||
; X32-NEXT: mull %ebx
|
||||
; X32-NEXT: movl %edx, %esi
|
||||
; X32-NEXT: addl %ebp, %eax
|
||||
; X32-NEXT: movl %eax, %ebp
|
||||
; X32-NEXT: adcl %edi, %esi
|
||||
; X32-NEXT: setb {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Folded Spill
|
||||
; X32-NEXT: movl %ecx, %eax
|
||||
; X32-NEXT: mull %ebx
|
||||
; X32-NEXT: addl %esi, %eax
|
||||
; X32-NEXT: movzbl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 1-byte Folded Reload
|
||||
; X32-NEXT: adcl %esi, %edx
|
||||
; X32-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload
|
||||
; X32-NEXT: addl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Folded Reload
|
||||
; X32-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
|
||||
; X32-NEXT: adcl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Folded Reload
|
||||
; X32-NEXT: addl %eax, %esi
|
||||
; X32-NEXT: adcl %edx, %ecx
|
||||
; X32-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
|
||||
; X32-NEXT: addl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
|
||||
; X32-NEXT: adcl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Folded Reload
|
||||
; X32-NEXT: movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: movzbl (%esp), %eax # 1-byte Folded Reload
|
||||
; X32-NEXT: adcl %eax, %esi
|
||||
; X32-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: adcl $0, %ecx
|
||||
; X32-NEXT: movl {{[0-9]+}}(%esp), %eax
|
||||
; X32-NEXT: movl 8(%eax), %ecx
|
||||
; X32-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx
|
||||
; X32-NEXT: movl 16(%ecx), %esi
|
||||
; X32-NEXT: imull %esi, %ebx
|
||||
; X32-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload
|
||||
; X32-NEXT: movl %esi, %eax
|
||||
; X32-NEXT: mull %ecx
|
||||
; X32-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: movl %edi, %eax
|
||||
; X32-NEXT: mull %ecx
|
||||
; X32-NEXT: movl %edx, %ebx
|
||||
; X32-NEXT: movl %eax, %edi
|
||||
; X32-NEXT: addl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Folded Reload
|
||||
; X32-NEXT: adcl $0, %ebx
|
||||
; X32-NEXT: movl {{[0-9]+}}(%esp), %eax
|
||||
; X32-NEXT: movl 12(%eax), %ecx
|
||||
; X32-NEXT: movl %esi, %eax
|
||||
; X32-NEXT: mull %ecx
|
||||
; X32-NEXT: movl %ecx, (%esp) # 4-byte Spill
|
||||
; X32-NEXT: movl %edx, %esi
|
||||
; X32-NEXT: addl %edi, %eax
|
||||
; X32-NEXT: movl %eax, %edi
|
||||
; X32-NEXT: adcl %ebx, %esi
|
||||
; X32-NEXT: setb %bl
|
||||
; X32-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
|
||||
; X32-NEXT: mull %ecx
|
||||
; X32-NEXT: movl %eax, %ecx
|
||||
; X32-NEXT: addl %esi, %ecx
|
||||
; X32-NEXT: movzbl %bl, %eax
|
||||
; X32-NEXT: adcl %eax, %edx
|
||||
; X32-NEXT: addl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
|
||||
; X32-NEXT: adcl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Folded Reload
|
||||
; X32-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: adcl $0, %ecx
|
||||
; X32-NEXT: adcl $0, %edx
|
||||
; X32-NEXT: addl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Folded Reload
|
||||
; X32-NEXT: adcl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Folded Reload
|
||||
; X32-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: setb {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Folded Spill
|
||||
; X32-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload
|
||||
; X32-NEXT: movl %esi, %eax
|
||||
; X32-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Reload
|
||||
; X32-NEXT: mull %edi
|
||||
; X32-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
|
||||
; X32-NEXT: mull %edi
|
||||
; X32-NEXT: movl %edx, %ebx
|
||||
; X32-NEXT: movl %eax, %ebp
|
||||
; X32-NEXT: addl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Folded Reload
|
||||
; X32-NEXT: adcl $0, %ebx
|
||||
; X32-NEXT: movl %esi, %eax
|
||||
; X32-NEXT: movl (%esp), %edi # 4-byte Reload
|
||||
; X32-NEXT: mull %edi
|
||||
; X32-NEXT: movl %edx, %esi
|
||||
; X32-NEXT: addl %ebp, %eax
|
||||
; X32-NEXT: movl %eax, %ebp
|
||||
; X32-NEXT: adcl %ebx, %esi
|
||||
; X32-NEXT: setb {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Folded Spill
|
||||
; X32-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
|
||||
; X32-NEXT: mull %edi
|
||||
; X32-NEXT: movl %edi, %ebx
|
||||
; X32-NEXT: addl %esi, %eax
|
||||
; X32-NEXT: movzbl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 1-byte Folded Reload
|
||||
; X32-NEXT: adcl %esi, %edx
|
||||
; X32-NEXT: addl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
|
||||
; X32-NEXT: adcl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Folded Reload
|
||||
; X32-NEXT: movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: movzbl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 1-byte Folded Reload
|
||||
; X32-NEXT: adcl %ecx, %eax
|
||||
; X32-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: adcl $0, %edx
|
||||
; X32-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx
|
||||
; X32-NEXT: movl 16(%ecx), %edi
|
||||
; X32-NEXT: imull %edi, %ebx
|
||||
; X32-NEXT: movl %edi, %eax
|
||||
; X32-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload
|
||||
; X32-NEXT: mull %ebp
|
||||
; X32-NEXT: movl %eax, (%esp) # 4-byte Spill
|
||||
; X32-NEXT: addl %ebx, %edx
|
||||
; X32-NEXT: movl 20(%ecx), %eax
|
||||
; X32-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: imull %eax, %edi
|
||||
; X32-NEXT: addl %edx, %edi
|
||||
; X32-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: movl 24(%ecx), %eax
|
||||
; X32-NEXT: movl %ecx, %ebp
|
||||
; X32-NEXT: movl %eax, %edi
|
||||
; X32-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
|
||||
; X32-NEXT: imull %ecx, %edi
|
||||
; X32-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload
|
||||
; X32-NEXT: mull %ebx
|
||||
; X32-NEXT: movl %eax, (%esp) # 4-byte Spill
|
||||
; X32-NEXT: addl %edi, %edx
|
||||
; X32-NEXT: movl 28(%ebp), %ebp
|
||||
; X32-NEXT: imull %ebx, %ebp
|
||||
; X32-NEXT: imull %eax, %ebp
|
||||
; X32-NEXT: addl %edx, %ebp
|
||||
; X32-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload
|
||||
; X32-NEXT: addl %edx, (%esp) # 4-byte Folded Spill
|
||||
; X32-NEXT: adcl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Folded Reload
|
||||
; X32-NEXT: movl %ebx, %eax
|
||||
; X32-NEXT: mull %esi
|
||||
; X32-NEXT: movl %edx, %ebx
|
||||
; X32-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: movl %ecx, %eax
|
||||
; X32-NEXT: mull %esi
|
||||
; X32-NEXT: movl %edx, %ecx
|
||||
; X32-NEXT: movl %eax, %edi
|
||||
; X32-NEXT: addl %ebx, %edi
|
||||
; X32-NEXT: adcl $0, %ecx
|
||||
; X32-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
|
||||
; X32-NEXT: movl 24(%ecx), %eax
|
||||
; X32-NEXT: movl %eax, %ecx
|
||||
; X32-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload
|
||||
; X32-NEXT: mull %ebx
|
||||
; X32-NEXT: movl %edx, %esi
|
||||
; X32-NEXT: addl %edi, %eax
|
||||
; X32-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: adcl %ecx, %esi
|
||||
; X32-NEXT: setb %cl
|
||||
; X32-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
|
||||
; X32-NEXT: mull %ebx
|
||||
; X32-NEXT: addl %esi, %eax
|
||||
; X32-NEXT: movzbl %cl, %ecx
|
||||
; X32-NEXT: adcl %ecx, %edx
|
||||
; X32-NEXT: imull %ebx, %ecx
|
||||
; X32-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload
|
||||
; X32-NEXT: mull %esi
|
||||
; X32-NEXT: addl %ecx, %edx
|
||||
; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx
|
||||
; X32-NEXT: movl 28(%ecx), %ecx
|
||||
; X32-NEXT: imull %esi, %ecx
|
||||
; X32-NEXT: addl %edx, %ecx
|
||||
; X32-NEXT: addl (%esp), %eax # 4-byte Folded Reload
|
||||
; X32-NEXT: movl %eax, (%esp) # 4-byte Spill
|
||||
; X32-NEXT: adcl %ebp, %edx
|
||||
; X32-NEXT: adcl %ebp, %ecx
|
||||
; X32-NEXT: movl %esi, %eax
|
||||
; X32-NEXT: mull %edi
|
||||
; X32-NEXT: movl %edx, %ebp
|
||||
; X32-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: movl %ebx, %eax
|
||||
; X32-NEXT: mull %edi
|
||||
; X32-NEXT: movl %edx, %esi
|
||||
; X32-NEXT: movl %eax, %ebx
|
||||
; X32-NEXT: addl %ebp, %ebx
|
||||
; X32-NEXT: adcl $0, %esi
|
||||
; X32-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
|
||||
; X32-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload
|
||||
; X32-NEXT: mull %ebp
|
||||
; X32-NEXT: movl %edx, %edi
|
||||
; X32-NEXT: addl %ebx, %eax
|
||||
; X32-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: adcl %esi, %edi
|
||||
; X32-NEXT: setb %bl
|
||||
; X32-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
|
||||
; X32-NEXT: mull %ebp
|
||||
; X32-NEXT: addl %edi, %eax
|
||||
; X32-NEXT: movzbl %bl, %esi
|
||||
; X32-NEXT: adcl %esi, %edx
|
||||
; X32-NEXT: addl (%esp), %eax # 4-byte Folded Reload
|
||||
; X32-NEXT: movl %eax, (%esp) # 4-byte Spill
|
||||
; X32-NEXT: adcl %ecx, %edx
|
||||
; X32-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X32-NEXT: movl {{[0-9]+}}(%esp), %ebx
|
||||
; X32-NEXT: movl 28(%ebx), %ecx
|
||||
@@ -348,7 +291,7 @@ define void @test(i256* %a, i256* %b, i256* %out) #0 {
|
||||
; X32-NEXT: movl %esi, 20(%ecx)
|
||||
; X32-NEXT: movl %eax, 24(%ecx)
|
||||
; X32-NEXT: movl %edx, 28(%ecx)
|
||||
; X32-NEXT: addl $88, %esp
|
||||
; X32-NEXT: addl $72, %esp
|
||||
; X32-NEXT: .cfi_def_cfa_offset 20
|
||||
; X32-NEXT: popl %esi
|
||||
; X32-NEXT: .cfi_def_cfa_offset 16
|
||||
|
||||
+1116
-1508
File diff suppressed because it is too large
Load Diff
@@ -119,41 +119,11 @@ define void @PR13897() nounwind {
|
||||
;
|
||||
; X86-LABEL: PR13897:
|
||||
; X86: # %bb.0: # %"0x0"
|
||||
; X86-NEXT: pushl %ebp
|
||||
; X86-NEXT: pushl %ebx
|
||||
; X86-NEXT: pushl %edi
|
||||
; X86-NEXT: pushl %esi
|
||||
; X86-NEXT: pushl %eax
|
||||
; X86-NEXT: movl bbb, %eax
|
||||
; X86-NEXT: movl %eax, (%esp) # 4-byte Spill
|
||||
; X86-NEXT: movl $1, %ebx
|
||||
; X86-NEXT: mull %ebx
|
||||
; X86-NEXT: movl %edx, %esi
|
||||
; X86-NEXT: movl %eax, %edi
|
||||
; X86-NEXT: xorl %eax, %eax
|
||||
; X86-NEXT: mull %ebx
|
||||
; X86-NEXT: movl %eax, %ebx
|
||||
; X86-NEXT: addl %esi, %ebx
|
||||
; X86-NEXT: movl %edx, %ebp
|
||||
; X86-NEXT: adcl $0, %ebp
|
||||
; X86-NEXT: addl %edi, %ebx
|
||||
; X86-NEXT: adcl %esi, %ebp
|
||||
; X86-NEXT: setb %cl
|
||||
; X86-NEXT: addl %eax, %ebp
|
||||
; X86-NEXT: movzbl %cl, %eax
|
||||
; X86-NEXT: adcl %edx, %eax
|
||||
; X86-NEXT: addl %edi, %ebp
|
||||
; X86-NEXT: adcl %esi, %eax
|
||||
; X86-NEXT: addl (%esp), %eax # 4-byte Folded Reload
|
||||
; X86-NEXT: movl %edi, aaa
|
||||
; X86-NEXT: movl %ebx, aaa+4
|
||||
; X86-NEXT: movl %ebp, aaa+8
|
||||
; X86-NEXT: movl %eax, aaa+12
|
||||
; X86-NEXT: addl $4, %esp
|
||||
; X86-NEXT: popl %esi
|
||||
; X86-NEXT: popl %edi
|
||||
; X86-NEXT: popl %ebx
|
||||
; X86-NEXT: popl %ebp
|
||||
; X86-NEXT: movl %eax, aaa+8
|
||||
; X86-NEXT: movl %eax, aaa+4
|
||||
; X86-NEXT: movl %eax, aaa
|
||||
; X86-NEXT: retl
|
||||
"0x0":
|
||||
%0 = load i128, i128* @bbb
|
||||
|
||||
@@ -10,42 +10,29 @@ define i128 @mulhioverflow(i64 %a, i64 %b, i64 %c) nounwind {
|
||||
; X32-NEXT: pushl %edi
|
||||
; X32-NEXT: pushl %esi
|
||||
; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx
|
||||
; X32-NEXT: movl {{[0-9]+}}(%esp), %esi
|
||||
; X32-NEXT: movl {{[0-9]+}}(%esp), %ebp
|
||||
; X32-NEXT: movl {{[0-9]+}}(%esp), %edi
|
||||
; X32-NEXT: movl {{[0-9]+}}(%esp), %ebx
|
||||
; X32-NEXT: movl {{[0-9]+}}(%esp), %esi
|
||||
; X32-NEXT: movl %ecx, %eax
|
||||
; X32-NEXT: mull %ebp
|
||||
; X32-NEXT: movl %edx, %ebx
|
||||
; X32-NEXT: movl %esi, %eax
|
||||
; X32-NEXT: mull %ebp
|
||||
; X32-NEXT: movl %edx, %ebp
|
||||
; X32-NEXT: movl %eax, %esi
|
||||
; X32-NEXT: addl %ebx, %esi
|
||||
; X32-NEXT: adcl $0, %ebp
|
||||
; X32-NEXT: movl %ecx, %eax
|
||||
; X32-NEXT: mull %edi
|
||||
; X32-NEXT: movl %edx, %ebx
|
||||
; X32-NEXT: addl %esi, %eax
|
||||
; X32-NEXT: adcl %ebp, %ebx
|
||||
; X32-NEXT: setb %al
|
||||
; X32-NEXT: movzbl %al, %ecx
|
||||
; X32-NEXT: movl {{[0-9]+}}(%esp), %eax
|
||||
; X32-NEXT: mull %edi
|
||||
; X32-NEXT: movl %edx, %esi
|
||||
; X32-NEXT: movl %eax, %ebp
|
||||
; X32-NEXT: addl %ebx, %ebp
|
||||
; X32-NEXT: adcl %ecx, %esi
|
||||
; X32-NEXT: xorl %ecx, %ecx
|
||||
; X32-NEXT: movl {{[0-9]+}}(%esp), %eax
|
||||
; X32-NEXT: mull %ecx
|
||||
; X32-NEXT: mull %ebx
|
||||
; X32-NEXT: movl %edx, %edi
|
||||
; X32-NEXT: movl %eax, %ebx
|
||||
; X32-NEXT: movl {{[0-9]+}}(%esp), %eax
|
||||
; X32-NEXT: mull %ecx
|
||||
; X32-NEXT: addl %ebx, %eax
|
||||
; X32-NEXT: adcl %edi, %edx
|
||||
; X32-NEXT: movl %ebp, %eax
|
||||
; X32-NEXT: mull %ebx
|
||||
; X32-NEXT: movl %edx, %ebx
|
||||
; X32-NEXT: movl %eax, %ebp
|
||||
; X32-NEXT: addl %edi, %ebp
|
||||
; X32-NEXT: adcl $0, %ebx
|
||||
; X32-NEXT: movl %ecx, %eax
|
||||
; X32-NEXT: mull %esi
|
||||
; X32-NEXT: movl %edx, %ecx
|
||||
; X32-NEXT: addl %ebp, %eax
|
||||
; X32-NEXT: adcl %esi, %edx
|
||||
; X32-NEXT: adcl %ebx, %ecx
|
||||
; X32-NEXT: setb %bl
|
||||
; X32-NEXT: movl {{[0-9]+}}(%esp), %eax
|
||||
; X32-NEXT: mull %esi
|
||||
; X32-NEXT: addl %ecx, %eax
|
||||
; X32-NEXT: movzbl %bl, %ecx
|
||||
; X32-NEXT: adcl %ecx, %edx
|
||||
; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx
|
||||
; X32-NEXT: andl $1, %ecx
|
||||
; X32-NEXT: addl %eax, %ecx
|
||||
|
||||
@@ -39,8 +39,8 @@ define { i128, i8 } @muloti_test(i128 %l, i128 %r) unnamed_addr #0 {
|
||||
; X86-NEXT: .cfi_def_cfa_offset 16
|
||||
; X86-NEXT: pushl %esi
|
||||
; X86-NEXT: .cfi_def_cfa_offset 20
|
||||
; X86-NEXT: subl $28, %esp
|
||||
; X86-NEXT: .cfi_def_cfa_offset 48
|
||||
; X86-NEXT: subl $24, %esp
|
||||
; X86-NEXT: .cfi_def_cfa_offset 44
|
||||
; X86-NEXT: .cfi_offset %esi, -20
|
||||
; X86-NEXT: .cfi_offset %edi, -16
|
||||
; X86-NEXT: .cfi_offset %ebx, -12
|
||||
@@ -64,70 +64,57 @@ define { i128, i8 } @muloti_test(i128 %l, i128 %r) unnamed_addr #0 {
|
||||
; X86-NEXT: movl %edx, %ecx
|
||||
; X86-NEXT: addl %esi, %ecx
|
||||
; X86-NEXT: setb {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Folded Spill
|
||||
; X86-NEXT: movl {{[0-9]+}}(%esp), %ebp
|
||||
; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
|
||||
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
|
||||
; X86-NEXT: mull %ebp
|
||||
; X86-NEXT: movl %eax, %edi
|
||||
; X86-NEXT: seto {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Folded Spill
|
||||
; X86-NEXT: movl {{[0-9]+}}(%esp), %ebx
|
||||
; X86-NEXT: movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
|
||||
; X86-NEXT: mull %ebx
|
||||
; X86-NEXT: mull %esi
|
||||
; X86-NEXT: movl %esi, %ebx
|
||||
; X86-NEXT: movl %eax, %esi
|
||||
; X86-NEXT: seto {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Folded Spill
|
||||
; X86-NEXT: addl %edi, %esi
|
||||
; X86-NEXT: movl %ebx, %eax
|
||||
; X86-NEXT: mull %ebp
|
||||
; X86-NEXT: movl %ebp, %ebx
|
||||
; X86-NEXT: movl %edx, %edi
|
||||
; X86-NEXT: addl %esi, %edi
|
||||
; X86-NEXT: setb {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Folded Spill
|
||||
; X86-NEXT: addl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Folded Reload
|
||||
; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X86-NEXT: adcl %ecx, %edi
|
||||
; X86-NEXT: movl {{[0-9]+}}(%esp), %ebp
|
||||
; X86-NEXT: movl %ebp, %eax
|
||||
; X86-NEXT: movl %ebx, %ecx
|
||||
; X86-NEXT: movl {{[0-9]+}}(%esp), %edi
|
||||
; X86-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
|
||||
; X86-NEXT: mull %edi
|
||||
; X86-NEXT: movl %eax, %ebp
|
||||
; X86-NEXT: seto {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Folded Spill
|
||||
; X86-NEXT: addl %esi, %ebp
|
||||
; X86-NEXT: movl %edi, %eax
|
||||
; X86-NEXT: mull %ebx
|
||||
; X86-NEXT: movl %edx, %ebx
|
||||
; X86-NEXT: movl %ebx, %esi
|
||||
; X86-NEXT: movl %eax, %ebx
|
||||
; X86-NEXT: movl %edx, %edi
|
||||
; X86-NEXT: addl %ebp, %edi
|
||||
; X86-NEXT: setb {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Folded Spill
|
||||
; X86-NEXT: addl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Folded Reload
|
||||
; X86-NEXT: adcl %ecx, %edi
|
||||
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
|
||||
; X86-NEXT: movl %esi, %ecx
|
||||
; X86-NEXT: mull %esi
|
||||
; X86-NEXT: movl %edx, %esi
|
||||
; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
|
||||
; X86-NEXT: mull %ecx
|
||||
; X86-NEXT: movl %edx, %esi
|
||||
; X86-NEXT: movl %edx, %ebp
|
||||
; X86-NEXT: movl %eax, %ecx
|
||||
; X86-NEXT: addl %ebx, %ecx
|
||||
; X86-NEXT: adcl $0, %esi
|
||||
; X86-NEXT: movl %ebp, %eax
|
||||
; X86-NEXT: movl {{[0-9]+}}(%esp), %ebp
|
||||
; X86-NEXT: mull %ebp
|
||||
; X86-NEXT: movl %edx, %ebx
|
||||
; X86-NEXT: addl %esi, %ecx
|
||||
; X86-NEXT: adcl $0, %ebp
|
||||
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
|
||||
; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
|
||||
; X86-NEXT: mull %esi
|
||||
; X86-NEXT: movl %edx, %esi
|
||||
; X86-NEXT: addl %ecx, %eax
|
||||
; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
|
||||
; X86-NEXT: adcl %esi, %ebx
|
||||
; X86-NEXT: setb {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Folded Spill
|
||||
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
|
||||
; X86-NEXT: mull %ebp
|
||||
; X86-NEXT: movl %edx, %ecx
|
||||
; X86-NEXT: movl %eax, %esi
|
||||
; X86-NEXT: addl %ebx, %esi
|
||||
; X86-NEXT: movzbl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 1-byte Folded Reload
|
||||
; X86-NEXT: adcl %eax, %ecx
|
||||
; X86-NEXT: xorl %edx, %edx
|
||||
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
|
||||
; X86-NEXT: mull %edx
|
||||
; X86-NEXT: movl %edx, %ebp
|
||||
; X86-NEXT: movl %eax, %ebx
|
||||
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
|
||||
; X86-NEXT: xorl %edx, %edx
|
||||
; X86-NEXT: mull %edx
|
||||
; X86-NEXT: addl %ebx, %eax
|
||||
; X86-NEXT: adcl %ebp, %edx
|
||||
; X86-NEXT: adcl %ebp, %esi
|
||||
; X86-NEXT: setb %cl
|
||||
; X86-NEXT: movl {{[0-9]+}}(%esp), %ebp
|
||||
; X86-NEXT: movl %ebp, %eax
|
||||
; X86-NEXT: mull {{[0-9]+}}(%esp)
|
||||
; X86-NEXT: addl %esi, %eax
|
||||
; X86-NEXT: movzbl %cl, %ecx
|
||||
; X86-NEXT: adcl %ecx, %edx
|
||||
; X86-NEXT: addl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Folded Reload
|
||||
; X86-NEXT: addl %ebx, %eax
|
||||
; X86-NEXT: adcl %edi, %edx
|
||||
; X86-NEXT: setb {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Folded Spill
|
||||
; X86-NEXT: cmpl $0, {{[0-9]+}}(%esp)
|
||||
; X86-NEXT: testl %ebp, %ebp
|
||||
; X86-NEXT: setne %cl
|
||||
; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
|
||||
; X86-NEXT: testl %esi, %esi
|
||||
@@ -167,7 +154,7 @@ define { i128, i8 } @muloti_test(i128 %l, i128 %r) unnamed_addr #0 {
|
||||
; X86-NEXT: andb $1, %al
|
||||
; X86-NEXT: movb %al, 16(%ecx)
|
||||
; X86-NEXT: movl %ecx, %eax
|
||||
; X86-NEXT: addl $28, %esp
|
||||
; X86-NEXT: addl $24, %esp
|
||||
; X86-NEXT: .cfi_def_cfa_offset 20
|
||||
; X86-NEXT: popl %esi
|
||||
; X86-NEXT: .cfi_def_cfa_offset 16
|
||||
|
||||
Reference in New Issue
Block a user