diff --git a/llvm/test/CodeGen/X86/divide-by-constant.ll b/llvm/test/CodeGen/X86/divide-by-constant.ll index ba150e7ea405e..ac78136b9d8ea 100644 --- a/llvm/test/CodeGen/X86/divide-by-constant.ll +++ b/llvm/test/CodeGen/X86/divide-by-constant.ll @@ -1,16 +1,16 @@ ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py -; RUN: llc < %s -mtriple=i686-pc-linux-gnu | FileCheck %s --check-prefix=X32 -; RUN: llc < %s -mtriple=x86_64-pc-linux-gnu | FileCheck %s --check-prefix=X64 --check-prefix=X64-FAST -; RUN: llc < %s -mtriple=x86_64-pc-linux-gnu -mattr=idivq-to-divl | FileCheck %s --check-prefix=X64 --check-prefix=X64-SLOW +; RUN: llc < %s -mtriple=i686-pc-linux-gnu | FileCheck %s --check-prefix=X86 +; RUN: llc < %s -mtriple=x86_64-pc-linux-gnu | FileCheck %s --check-prefixes=X64,X64-FAST +; RUN: llc < %s -mtriple=x86_64-pc-linux-gnu -mattr=idivq-to-divl | FileCheck %s --check-prefixes=X64,X64-SLOW define zeroext i16 @test1(i16 zeroext %x) nounwind { -; X32-LABEL: test1: -; X32: # %bb.0: # %entry -; X32-NEXT: movzwl {{[0-9]+}}(%esp), %eax -; X32-NEXT: imull $63551, %eax, %eax # imm = 0xF83F -; X32-NEXT: shrl $21, %eax -; X32-NEXT: # kill: def $ax killed $ax killed $eax -; X32-NEXT: retl +; X86-LABEL: test1: +; X86: # %bb.0: # %entry +; X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax +; X86-NEXT: imull $63551, %eax, %eax # imm = 0xF83F +; X86-NEXT: shrl $21, %eax +; X86-NEXT: # kill: def $ax killed $ax killed $eax +; X86-NEXT: retl ; ; X64-LABEL: test1: ; X64: # %bb.0: # %entry @@ -19,18 +19,18 @@ define zeroext i16 @test1(i16 zeroext %x) nounwind { ; X64-NEXT: # kill: def $ax killed $ax killed $eax ; X64-NEXT: retq entry: - %div = udiv i16 %x, 33 - ret i16 %div + %div = udiv i16 %x, 33 + ret i16 %div } define zeroext i16 @test2(i8 signext %x, i16 zeroext %c) nounwind readnone ssp noredzone { -; X32-LABEL: test2: -; X32: # %bb.0: # %entry -; X32-NEXT: movzwl {{[0-9]+}}(%esp), %eax -; X32-NEXT: imull $43691, %eax, %eax # imm = 0xAAAB -; X32-NEXT: shrl $17, %eax -; X32-NEXT: # kill: def $ax killed $ax killed $eax -; X32-NEXT: retl +; X86-LABEL: test2: +; X86: # %bb.0: # %entry +; X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax +; X86-NEXT: imull $43691, %eax, %eax # imm = 0xAAAB +; X86-NEXT: shrl $17, %eax +; X86-NEXT: # kill: def $ax killed $ax killed $eax +; X86-NEXT: retl ; ; X64-LABEL: test2: ; X64: # %bb.0: # %entry @@ -45,13 +45,13 @@ entry: } define zeroext i8 @test3(i8 zeroext %x, i8 zeroext %c) nounwind readnone ssp noredzone { -; X32-LABEL: test3: -; X32: # %bb.0: # %entry -; X32-NEXT: movzbl {{[0-9]+}}(%esp), %eax -; X32-NEXT: imull $171, %eax, %eax -; X32-NEXT: shrl $9, %eax -; X32-NEXT: # kill: def $al killed $al killed $eax -; X32-NEXT: retl +; X86-LABEL: test3: +; X86: # %bb.0: # %entry +; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax +; X86-NEXT: imull $171, %eax, %eax +; X86-NEXT: shrl $9, %eax +; X86-NEXT: # kill: def $al killed $al killed $eax +; X86-NEXT: retl ; ; X64-LABEL: test3: ; X64: # %bb.0: # %entry @@ -65,16 +65,16 @@ entry: } define signext i16 @test4(i16 signext %x) nounwind { -; X32-LABEL: test4: -; X32: # %bb.0: # %entry -; X32-NEXT: movswl {{[0-9]+}}(%esp), %eax -; X32-NEXT: imull $1986, %eax, %eax # imm = 0x7C2 -; X32-NEXT: movl %eax, %ecx -; X32-NEXT: shrl $31, %ecx -; X32-NEXT: shrl $16, %eax -; X32-NEXT: addl %ecx, %eax -; X32-NEXT: # kill: def $ax killed $ax killed $eax -; X32-NEXT: retl +; X86-LABEL: test4: +; X86: # %bb.0: # %entry +; X86-NEXT: movswl {{[0-9]+}}(%esp), %eax +; X86-NEXT: imull $1986, %eax, %eax # imm = 0x7C2 +; X86-NEXT: movl %eax, %ecx +; X86-NEXT: shrl $31, %ecx +; X86-NEXT: shrl $16, %eax +; X86-NEXT: addl %ecx, %eax +; X86-NEXT: # kill: def $ax killed $ax killed $eax +; X86-NEXT: retl ; ; X64-LABEL: test4: ; X64: # %bb.0: # %entry @@ -86,18 +86,18 @@ define signext i16 @test4(i16 signext %x) nounwind { ; X64-NEXT: # kill: def $ax killed $ax killed $eax ; X64-NEXT: retq entry: - %div = sdiv i16 %x, 33 ; [#uses=1] - ret i16 %div + %div = sdiv i16 %x, 33 ; [#uses=1] + ret i16 %div } define i32 @test5(i32 %A) nounwind { -; X32-LABEL: test5: -; X32: # %bb.0: -; X32-NEXT: movl $365384439, %eax # imm = 0x15C752F7 -; X32-NEXT: mull {{[0-9]+}}(%esp) -; X32-NEXT: movl %edx, %eax -; X32-NEXT: shrl $27, %eax -; X32-NEXT: retl +; X86-LABEL: test5: +; X86: # %bb.0: +; X86-NEXT: movl $365384439, %eax # imm = 0x15C752F7 +; X86-NEXT: mull {{[0-9]+}}(%esp) +; X86-NEXT: movl %edx, %eax +; X86-NEXT: shrl $27, %eax +; X86-NEXT: retl ; ; X64-LABEL: test5: ; X64: # %bb.0: @@ -106,21 +106,21 @@ define i32 @test5(i32 %A) nounwind { ; X64-NEXT: shrq $59, %rax ; X64-NEXT: # kill: def $eax killed $eax killed $rax ; X64-NEXT: retq - %tmp1 = udiv i32 %A, 1577682821 ; [#uses=1] - ret i32 %tmp1 + %tmp1 = udiv i32 %A, 1577682821 ; [#uses=1] + ret i32 %tmp1 } define signext i16 @test6(i16 signext %x) nounwind { -; X32-LABEL: test6: -; X32: # %bb.0: # %entry -; X32-NEXT: movswl {{[0-9]+}}(%esp), %eax -; X32-NEXT: imull $26215, %eax, %eax # imm = 0x6667 -; X32-NEXT: movl %eax, %ecx -; X32-NEXT: shrl $31, %ecx -; X32-NEXT: sarl $18, %eax -; X32-NEXT: addl %ecx, %eax -; X32-NEXT: # kill: def $ax killed $ax killed $eax -; X32-NEXT: retl +; X86-LABEL: test6: +; X86: # %bb.0: # %entry +; X86-NEXT: movswl {{[0-9]+}}(%esp), %eax +; X86-NEXT: imull $26215, %eax, %eax # imm = 0x6667 +; X86-NEXT: movl %eax, %ecx +; X86-NEXT: shrl $31, %ecx +; X86-NEXT: sarl $18, %eax +; X86-NEXT: addl %ecx, %eax +; X86-NEXT: # kill: def $ax killed $ax killed $eax +; X86-NEXT: retl ; ; X64-LABEL: test6: ; X64: # %bb.0: # %entry @@ -137,14 +137,14 @@ entry: } define i32 @test7(i32 %x) nounwind { -; X32-LABEL: test7: -; X32: # %bb.0: -; X32-NEXT: movl {{[0-9]+}}(%esp), %eax -; X32-NEXT: shrl $2, %eax -; X32-NEXT: movl $613566757, %ecx # imm = 0x24924925 -; X32-NEXT: mull %ecx -; X32-NEXT: movl %edx, %eax -; X32-NEXT: retl +; X86-LABEL: test7: +; X86: # %bb.0: +; X86-NEXT: movl {{[0-9]+}}(%esp), %eax +; X86-NEXT: shrl $2, %eax +; X86-NEXT: movl $613566757, %ecx # imm = 0x24924925 +; X86-NEXT: mull %ecx +; X86-NEXT: movl %edx, %eax +; X86-NEXT: retl ; ; X64-LABEL: test7: ; X64: # %bb.0: @@ -160,15 +160,15 @@ define i32 @test7(i32 %x) nounwind { ; PR13326 define i8 @test8(i8 %x) nounwind { -; X32-LABEL: test8: -; X32: # %bb.0: -; X32-NEXT: movzbl {{[0-9]+}}(%esp), %eax -; X32-NEXT: shrb %al -; X32-NEXT: movzbl %al, %eax -; X32-NEXT: imull $211, %eax, %eax -; X32-NEXT: shrl $13, %eax -; X32-NEXT: # kill: def $al killed $al killed $eax -; X32-NEXT: retl +; X86-LABEL: test8: +; X86: # %bb.0: +; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax +; X86-NEXT: shrb %al +; X86-NEXT: movzbl %al, %eax +; X86-NEXT: imull $211, %eax, %eax +; X86-NEXT: shrl $13, %eax +; X86-NEXT: # kill: def $al killed $al killed $eax +; X86-NEXT: retl ; ; X64-LABEL: test8: ; X64: # %bb.0: @@ -183,15 +183,15 @@ define i8 @test8(i8 %x) nounwind { } define i8 @test9(i8 %x) nounwind { -; X32-LABEL: test9: -; X32: # %bb.0: -; X32-NEXT: movzbl {{[0-9]+}}(%esp), %eax -; X32-NEXT: shrb $2, %al -; X32-NEXT: movzbl %al, %eax -; X32-NEXT: imull $71, %eax, %eax -; X32-NEXT: shrl $11, %eax -; X32-NEXT: # kill: def $al killed $al killed $eax -; X32-NEXT: retl +; X86-LABEL: test9: +; X86: # %bb.0: +; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax +; X86-NEXT: shrb $2, %al +; X86-NEXT: movzbl %al, %eax +; X86-NEXT: imull $71, %eax, %eax +; X86-NEXT: shrl $11, %eax +; X86-NEXT: # kill: def $al killed $al killed $eax +; X86-NEXT: retl ; ; X64-LABEL: test9: ; X64: # %bb.0: @@ -206,14 +206,14 @@ define i8 @test9(i8 %x) nounwind { } define i32 @testsize1(i32 %x) minsize nounwind { -; X32-LABEL: testsize1: -; X32: # %bb.0: # %entry -; X32-NEXT: movl {{[0-9]+}}(%esp), %eax -; X32-NEXT: pushl $32 -; X32-NEXT: popl %ecx -; X32-NEXT: cltd -; X32-NEXT: idivl %ecx -; X32-NEXT: retl +; X86-LABEL: testsize1: +; X86: # %bb.0: # %entry +; X86-NEXT: movl {{[0-9]+}}(%esp), %eax +; X86-NEXT: pushl $32 +; X86-NEXT: popl %ecx +; X86-NEXT: cltd +; X86-NEXT: idivl %ecx +; X86-NEXT: retl ; ; X64-LABEL: testsize1: ; X64: # %bb.0: # %entry @@ -224,19 +224,19 @@ define i32 @testsize1(i32 %x) minsize nounwind { ; X64-NEXT: idivl %ecx ; X64-NEXT: retq entry: - %div = sdiv i32 %x, 32 - ret i32 %div + %div = sdiv i32 %x, 32 + ret i32 %div } define i32 @testsize2(i32 %x) minsize nounwind { -; X32-LABEL: testsize2: -; X32: # %bb.0: # %entry -; X32-NEXT: movl {{[0-9]+}}(%esp), %eax -; X32-NEXT: pushl $33 -; X32-NEXT: popl %ecx -; X32-NEXT: cltd -; X32-NEXT: idivl %ecx -; X32-NEXT: retl +; X86-LABEL: testsize2: +; X86: # %bb.0: # %entry +; X86-NEXT: movl {{[0-9]+}}(%esp), %eax +; X86-NEXT: pushl $33 +; X86-NEXT: popl %ecx +; X86-NEXT: cltd +; X86-NEXT: idivl %ecx +; X86-NEXT: retl ; ; X64-LABEL: testsize2: ; X64: # %bb.0: # %entry @@ -247,16 +247,16 @@ define i32 @testsize2(i32 %x) minsize nounwind { ; X64-NEXT: idivl %ecx ; X64-NEXT: retq entry: - %div = sdiv i32 %x, 33 - ret i32 %div + %div = sdiv i32 %x, 33 + ret i32 %div } define i32 @testsize3(i32 %x) minsize nounwind { -; X32-LABEL: testsize3: -; X32: # %bb.0: # %entry -; X32-NEXT: movl {{[0-9]+}}(%esp), %eax -; X32-NEXT: shrl $5, %eax -; X32-NEXT: retl +; X86-LABEL: testsize3: +; X86: # %bb.0: # %entry +; X86-NEXT: movl {{[0-9]+}}(%esp), %eax +; X86-NEXT: shrl $5, %eax +; X86-NEXT: retl ; ; X64-LABEL: testsize3: ; X64: # %bb.0: # %entry @@ -264,19 +264,19 @@ define i32 @testsize3(i32 %x) minsize nounwind { ; X64-NEXT: shrl $5, %eax ; X64-NEXT: retq entry: - %div = udiv i32 %x, 32 - ret i32 %div + %div = udiv i32 %x, 32 + ret i32 %div } define i32 @testsize4(i32 %x) minsize nounwind { -; X32-LABEL: testsize4: -; X32: # %bb.0: # %entry -; X32-NEXT: movl {{[0-9]+}}(%esp), %eax -; X32-NEXT: pushl $33 -; X32-NEXT: popl %ecx -; X32-NEXT: xorl %edx, %edx -; X32-NEXT: divl %ecx -; X32-NEXT: retl +; X86-LABEL: testsize4: +; X86: # %bb.0: # %entry +; X86-NEXT: movl {{[0-9]+}}(%esp), %eax +; X86-NEXT: pushl $33 +; X86-NEXT: popl %ecx +; X86-NEXT: xorl %edx, %edx +; X86-NEXT: divl %ecx +; X86-NEXT: retl ; ; X64-LABEL: testsize4: ; X64: # %bb.0: # %entry @@ -287,27 +287,27 @@ define i32 @testsize4(i32 %x) minsize nounwind { ; X64-NEXT: divl %ecx ; X64-NEXT: retq entry: - %div = udiv i32 %x, 33 - ret i32 %div + %div = udiv i32 %x, 33 + ret i32 %div } define i64 @PR23590(i64 %x) nounwind { -; X32-LABEL: PR23590: -; X32: # %bb.0: # %entry -; X32-NEXT: subl $12, %esp -; X32-NEXT: pushl $0 -; X32-NEXT: pushl $12345 # imm = 0x3039 -; X32-NEXT: pushl {{[0-9]+}}(%esp) -; X32-NEXT: pushl {{[0-9]+}}(%esp) -; X32-NEXT: calll __umoddi3 -; X32-NEXT: addl $16, %esp -; X32-NEXT: pushl $0 -; X32-NEXT: pushl $7 -; X32-NEXT: pushl %edx -; X32-NEXT: pushl %eax -; X32-NEXT: calll __udivdi3 -; X32-NEXT: addl $28, %esp -; X32-NEXT: retl +; X86-LABEL: PR23590: +; X86: # %bb.0: # %entry +; X86-NEXT: subl $12, %esp +; X86-NEXT: pushl $0 +; X86-NEXT: pushl $12345 # imm = 0x3039 +; X86-NEXT: pushl {{[0-9]+}}(%esp) +; X86-NEXT: pushl {{[0-9]+}}(%esp) +; X86-NEXT: calll __umoddi3 +; X86-NEXT: addl $16, %esp +; X86-NEXT: pushl $0 +; X86-NEXT: pushl $7 +; X86-NEXT: pushl %edx +; X86-NEXT: pushl %eax +; X86-NEXT: calll __udivdi3 +; X86-NEXT: addl $28, %esp +; X86-NEXT: retl ; ; X64-FAST-LABEL: PR23590: ; X64-FAST: # %bb.0: # %entry @@ -335,44 +335,44 @@ define i64 @PR23590(i64 %x) nounwind { ; X64-SLOW-NEXT: shrq $32, %rax ; X64-SLOW-NEXT: retq entry: - %rem = urem i64 %x, 12345 - %div = udiv i64 %rem, 7 - ret i64 %div + %rem = urem i64 %x, 12345 + %div = udiv i64 %rem, 7 + ret i64 %div } define { i64, i32 } @PR38622(i64) nounwind { -; X32-LABEL: PR38622: -; X32: # %bb.0: -; X32-NEXT: pushl %ebp -; X32-NEXT: pushl %ebx -; X32-NEXT: pushl %edi -; X32-NEXT: pushl %esi -; X32-NEXT: subl $12, %esp -; X32-NEXT: movl {{[0-9]+}}(%esp), %ebx -; X32-NEXT: movl {{[0-9]+}}(%esp), %ebp -; X32-NEXT: pushl $0 -; X32-NEXT: pushl $-294967296 # imm = 0xEE6B2800 -; X32-NEXT: pushl %ebp -; X32-NEXT: pushl %ebx -; X32-NEXT: calll __udivdi3 -; X32-NEXT: addl $16, %esp -; X32-NEXT: movl %eax, %esi -; X32-NEXT: movl %edx, %edi -; X32-NEXT: pushl $0 -; X32-NEXT: pushl $-294967296 # imm = 0xEE6B2800 -; X32-NEXT: pushl %ebp -; X32-NEXT: pushl %ebx -; X32-NEXT: calll __umoddi3 -; X32-NEXT: addl $16, %esp -; X32-NEXT: movl %eax, %ecx -; X32-NEXT: movl %esi, %eax -; X32-NEXT: movl %edi, %edx -; X32-NEXT: addl $12, %esp -; X32-NEXT: popl %esi -; X32-NEXT: popl %edi -; X32-NEXT: popl %ebx -; X32-NEXT: popl %ebp -; X32-NEXT: retl +; X86-LABEL: PR38622: +; X86: # %bb.0: +; X86-NEXT: pushl %ebp +; X86-NEXT: pushl %ebx +; X86-NEXT: pushl %edi +; X86-NEXT: pushl %esi +; X86-NEXT: subl $12, %esp +; X86-NEXT: movl {{[0-9]+}}(%esp), %ebx +; X86-NEXT: movl {{[0-9]+}}(%esp), %ebp +; X86-NEXT: pushl $0 +; X86-NEXT: pushl $-294967296 # imm = 0xEE6B2800 +; X86-NEXT: pushl %ebp +; X86-NEXT: pushl %ebx +; X86-NEXT: calll __udivdi3 +; X86-NEXT: addl $16, %esp +; X86-NEXT: movl %eax, %esi +; X86-NEXT: movl %edx, %edi +; X86-NEXT: pushl $0 +; X86-NEXT: pushl $-294967296 # imm = 0xEE6B2800 +; X86-NEXT: pushl %ebp +; X86-NEXT: pushl %ebx +; X86-NEXT: calll __umoddi3 +; X86-NEXT: addl $16, %esp +; X86-NEXT: movl %eax, %ecx +; X86-NEXT: movl %esi, %eax +; X86-NEXT: movl %edi, %edx +; X86-NEXT: addl $12, %esp +; X86-NEXT: popl %esi +; X86-NEXT: popl %edi +; X86-NEXT: popl %ebx +; X86-NEXT: popl %ebp +; X86-NEXT: retl ; ; X64-LABEL: PR38622: ; X64: # %bb.0: @@ -395,38 +395,38 @@ define { i64, i32 } @PR38622(i64) nounwind { } define { i64, i32 } @PR38622_signed(i64) nounwind { -; X32-LABEL: PR38622_signed: -; X32: # %bb.0: -; X32-NEXT: pushl %ebp -; X32-NEXT: pushl %ebx -; X32-NEXT: pushl %edi -; X32-NEXT: pushl %esi -; X32-NEXT: subl $12, %esp -; X32-NEXT: movl {{[0-9]+}}(%esp), %ebx -; X32-NEXT: movl {{[0-9]+}}(%esp), %ebp -; X32-NEXT: pushl $0 -; X32-NEXT: pushl $-294967296 # imm = 0xEE6B2800 -; X32-NEXT: pushl %ebp -; X32-NEXT: pushl %ebx -; X32-NEXT: calll __divdi3 -; X32-NEXT: addl $16, %esp -; X32-NEXT: movl %eax, %esi -; X32-NEXT: movl %edx, %edi -; X32-NEXT: pushl $0 -; X32-NEXT: pushl $-294967296 # imm = 0xEE6B2800 -; X32-NEXT: pushl %ebp -; X32-NEXT: pushl %ebx -; X32-NEXT: calll __moddi3 -; X32-NEXT: addl $16, %esp -; X32-NEXT: movl %eax, %ecx -; X32-NEXT: movl %esi, %eax -; X32-NEXT: movl %edi, %edx -; X32-NEXT: addl $12, %esp -; X32-NEXT: popl %esi -; X32-NEXT: popl %edi -; X32-NEXT: popl %ebx -; X32-NEXT: popl %ebp -; X32-NEXT: retl +; X86-LABEL: PR38622_signed: +; X86: # %bb.0: +; X86-NEXT: pushl %ebp +; X86-NEXT: pushl %ebx +; X86-NEXT: pushl %edi +; X86-NEXT: pushl %esi +; X86-NEXT: subl $12, %esp +; X86-NEXT: movl {{[0-9]+}}(%esp), %ebx +; X86-NEXT: movl {{[0-9]+}}(%esp), %ebp +; X86-NEXT: pushl $0 +; X86-NEXT: pushl $-294967296 # imm = 0xEE6B2800 +; X86-NEXT: pushl %ebp +; X86-NEXT: pushl %ebx +; X86-NEXT: calll __divdi3 +; X86-NEXT: addl $16, %esp +; X86-NEXT: movl %eax, %esi +; X86-NEXT: movl %edx, %edi +; X86-NEXT: pushl $0 +; X86-NEXT: pushl $-294967296 # imm = 0xEE6B2800 +; X86-NEXT: pushl %ebp +; X86-NEXT: pushl %ebx +; X86-NEXT: calll __moddi3 +; X86-NEXT: addl $16, %esp +; X86-NEXT: movl %eax, %ecx +; X86-NEXT: movl %esi, %eax +; X86-NEXT: movl %edi, %edx +; X86-NEXT: addl $12, %esp +; X86-NEXT: popl %esi +; X86-NEXT: popl %edi +; X86-NEXT: popl %ebx +; X86-NEXT: popl %ebp +; X86-NEXT: retl ; ; X64-LABEL: PR38622_signed: ; X64: # %bb.0: @@ -450,20 +450,20 @@ define { i64, i32 } @PR38622_signed(i64) nounwind { } define i64 @urem_i64_3(i64 %x) nounwind { -; X32-LABEL: urem_i64_3: -; X32: # %bb.0: # %entry -; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx -; X32-NEXT: addl {{[0-9]+}}(%esp), %ecx -; X32-NEXT: adcl $0, %ecx -; X32-NEXT: movl $-1431655765, %edx # imm = 0xAAAAAAAB -; X32-NEXT: movl %ecx, %eax -; X32-NEXT: mull %edx -; X32-NEXT: shrl %edx -; X32-NEXT: leal (%edx,%edx,2), %eax -; X32-NEXT: subl %eax, %ecx -; X32-NEXT: movl %ecx, %eax -; X32-NEXT: xorl %edx, %edx -; X32-NEXT: retl +; X86-LABEL: urem_i64_3: +; X86: # %bb.0: # %entry +; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx +; X86-NEXT: addl {{[0-9]+}}(%esp), %ecx +; X86-NEXT: adcl $0, %ecx +; X86-NEXT: movl $-1431655765, %edx # imm = 0xAAAAAAAB +; X86-NEXT: movl %ecx, %eax +; X86-NEXT: mull %edx +; X86-NEXT: shrl %edx +; X86-NEXT: leal (%edx,%edx,2), %eax +; X86-NEXT: subl %eax, %ecx +; X86-NEXT: movl %ecx, %eax +; X86-NEXT: xorl %edx, %edx +; X86-NEXT: retl ; ; X64-LABEL: urem_i64_3: ; X64: # %bb.0: # %entry @@ -481,20 +481,20 @@ entry: } define i64 @urem_i64_5(i64 %x) nounwind { -; X32-LABEL: urem_i64_5: -; X32: # %bb.0: # %entry -; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx -; X32-NEXT: addl {{[0-9]+}}(%esp), %ecx -; X32-NEXT: adcl $0, %ecx -; X32-NEXT: movl $-858993459, %edx # imm = 0xCCCCCCCD -; X32-NEXT: movl %ecx, %eax -; X32-NEXT: mull %edx -; X32-NEXT: shrl $2, %edx -; X32-NEXT: leal (%edx,%edx,4), %eax -; X32-NEXT: subl %eax, %ecx -; X32-NEXT: movl %ecx, %eax -; X32-NEXT: xorl %edx, %edx -; X32-NEXT: retl +; X86-LABEL: urem_i64_5: +; X86: # %bb.0: # %entry +; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx +; X86-NEXT: addl {{[0-9]+}}(%esp), %ecx +; X86-NEXT: adcl $0, %ecx +; X86-NEXT: movl $-858993459, %edx # imm = 0xCCCCCCCD +; X86-NEXT: movl %ecx, %eax +; X86-NEXT: mull %edx +; X86-NEXT: shrl $2, %edx +; X86-NEXT: leal (%edx,%edx,4), %eax +; X86-NEXT: subl %eax, %ecx +; X86-NEXT: movl %ecx, %eax +; X86-NEXT: xorl %edx, %edx +; X86-NEXT: retl ; ; X64-LABEL: urem_i64_5: ; X64: # %bb.0: # %entry @@ -512,21 +512,21 @@ entry: } define i64 @urem_i64_15(i64 %x) nounwind { -; X32-LABEL: urem_i64_15: -; X32: # %bb.0: # %entry -; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx -; X32-NEXT: addl {{[0-9]+}}(%esp), %ecx -; X32-NEXT: adcl $0, %ecx -; X32-NEXT: movl $-2004318071, %edx # imm = 0x88888889 -; X32-NEXT: movl %ecx, %eax -; X32-NEXT: mull %edx -; X32-NEXT: shrl $3, %edx -; X32-NEXT: leal (%edx,%edx,4), %eax -; X32-NEXT: leal (%eax,%eax,2), %eax -; X32-NEXT: subl %eax, %ecx -; X32-NEXT: movl %ecx, %eax -; X32-NEXT: xorl %edx, %edx -; X32-NEXT: retl +; X86-LABEL: urem_i64_15: +; X86: # %bb.0: # %entry +; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx +; X86-NEXT: addl {{[0-9]+}}(%esp), %ecx +; X86-NEXT: adcl $0, %ecx +; X86-NEXT: movl $-2004318071, %edx # imm = 0x88888889 +; X86-NEXT: movl %ecx, %eax +; X86-NEXT: mull %edx +; X86-NEXT: shrl $3, %edx +; X86-NEXT: leal (%edx,%edx,4), %eax +; X86-NEXT: leal (%eax,%eax,2), %eax +; X86-NEXT: subl %eax, %ecx +; X86-NEXT: movl %ecx, %eax +; X86-NEXT: xorl %edx, %edx +; X86-NEXT: retl ; ; X64-LABEL: urem_i64_15: ; X64: # %bb.0: # %entry @@ -545,22 +545,22 @@ entry: } define i64 @urem_i64_17(i64 %x) nounwind { -; X32-LABEL: urem_i64_17: -; X32: # %bb.0: # %entry -; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx -; X32-NEXT: addl {{[0-9]+}}(%esp), %ecx -; X32-NEXT: adcl $0, %ecx -; X32-NEXT: movl $-252645135, %edx # imm = 0xF0F0F0F1 -; X32-NEXT: movl %ecx, %eax -; X32-NEXT: mull %edx -; X32-NEXT: movl %edx, %eax -; X32-NEXT: andl $-16, %eax -; X32-NEXT: shrl $4, %edx -; X32-NEXT: addl %eax, %edx -; X32-NEXT: subl %edx, %ecx -; X32-NEXT: movl %ecx, %eax -; X32-NEXT: xorl %edx, %edx -; X32-NEXT: retl +; X86-LABEL: urem_i64_17: +; X86: # %bb.0: # %entry +; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx +; X86-NEXT: addl {{[0-9]+}}(%esp), %ecx +; X86-NEXT: adcl $0, %ecx +; X86-NEXT: movl $-252645135, %edx # imm = 0xF0F0F0F1 +; X86-NEXT: movl %ecx, %eax +; X86-NEXT: mull %edx +; X86-NEXT: movl %edx, %eax +; X86-NEXT: andl $-16, %eax +; X86-NEXT: shrl $4, %edx +; X86-NEXT: addl %eax, %edx +; X86-NEXT: subl %edx, %ecx +; X86-NEXT: movl %ecx, %eax +; X86-NEXT: xorl %edx, %edx +; X86-NEXT: retl ; ; X64-LABEL: urem_i64_17: ; X64: # %bb.0: # %entry @@ -580,26 +580,26 @@ entry: } define i64 @urem_i64_255(i64 %x) nounwind { -; X32-LABEL: urem_i64_255: -; X32: # %bb.0: # %entry -; X32-NEXT: pushl %esi -; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx -; X32-NEXT: movl {{[0-9]+}}(%esp), %esi -; X32-NEXT: movl %ecx, %eax -; X32-NEXT: addl %esi, %eax -; X32-NEXT: adcl $0, %eax -; X32-NEXT: movl $-2139062143, %edx # imm = 0x80808081 -; X32-NEXT: mull %edx -; X32-NEXT: shrl $7, %edx -; X32-NEXT: movl %edx, %eax -; X32-NEXT: shll $8, %eax -; X32-NEXT: subl %eax, %edx -; X32-NEXT: addl %esi, %ecx -; X32-NEXT: adcl %edx, %ecx -; X32-NEXT: movl %ecx, %eax -; X32-NEXT: xorl %edx, %edx -; X32-NEXT: popl %esi -; X32-NEXT: retl +; X86-LABEL: urem_i64_255: +; X86: # %bb.0: # %entry +; X86-NEXT: pushl %esi +; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx +; X86-NEXT: movl {{[0-9]+}}(%esp), %esi +; X86-NEXT: movl %ecx, %eax +; X86-NEXT: addl %esi, %eax +; X86-NEXT: adcl $0, %eax +; X86-NEXT: movl $-2139062143, %edx # imm = 0x80808081 +; X86-NEXT: mull %edx +; X86-NEXT: shrl $7, %edx +; X86-NEXT: movl %edx, %eax +; X86-NEXT: shll $8, %eax +; X86-NEXT: subl %eax, %edx +; X86-NEXT: addl %esi, %ecx +; X86-NEXT: adcl %edx, %ecx +; X86-NEXT: movl %ecx, %eax +; X86-NEXT: xorl %edx, %edx +; X86-NEXT: popl %esi +; X86-NEXT: retl ; ; X64-LABEL: urem_i64_255: ; X64: # %bb.0: # %entry @@ -618,22 +618,22 @@ entry: } define i64 @urem_i64_257(i64 %x) nounwind { -; X32-LABEL: urem_i64_257: -; X32: # %bb.0: # %entry -; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx -; X32-NEXT: addl {{[0-9]+}}(%esp), %ecx -; X32-NEXT: adcl $0, %ecx -; X32-NEXT: movl $-16711935, %edx # imm = 0xFF00FF01 -; X32-NEXT: movl %ecx, %eax -; X32-NEXT: mull %edx -; X32-NEXT: movl %edx, %eax -; X32-NEXT: andl $-256, %eax -; X32-NEXT: shrl $8, %edx -; X32-NEXT: addl %eax, %edx -; X32-NEXT: subl %edx, %ecx -; X32-NEXT: movl %ecx, %eax -; X32-NEXT: xorl %edx, %edx -; X32-NEXT: retl +; X86-LABEL: urem_i64_257: +; X86: # %bb.0: # %entry +; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx +; X86-NEXT: addl {{[0-9]+}}(%esp), %ecx +; X86-NEXT: adcl $0, %ecx +; X86-NEXT: movl $-16711935, %edx # imm = 0xFF00FF01 +; X86-NEXT: movl %ecx, %eax +; X86-NEXT: mull %edx +; X86-NEXT: movl %edx, %eax +; X86-NEXT: andl $-256, %eax +; X86-NEXT: shrl $8, %edx +; X86-NEXT: addl %eax, %edx +; X86-NEXT: subl %edx, %ecx +; X86-NEXT: movl %ecx, %eax +; X86-NEXT: xorl %edx, %edx +; X86-NEXT: retl ; ; X64-LABEL: urem_i64_257: ; X64: # %bb.0: # %entry @@ -653,26 +653,26 @@ entry: } define i64 @urem_i64_65535(i64 %x) nounwind { -; X32-LABEL: urem_i64_65535: -; X32: # %bb.0: # %entry -; X32-NEXT: pushl %esi -; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx -; X32-NEXT: movl {{[0-9]+}}(%esp), %esi -; X32-NEXT: movl %ecx, %eax -; X32-NEXT: addl %esi, %eax -; X32-NEXT: adcl $0, %eax -; X32-NEXT: movl $-2147450879, %edx # imm = 0x80008001 -; X32-NEXT: mull %edx -; X32-NEXT: shrl $15, %edx -; X32-NEXT: movl %edx, %eax -; X32-NEXT: shll $16, %eax -; X32-NEXT: subl %eax, %edx -; X32-NEXT: addl %esi, %ecx -; X32-NEXT: adcl %edx, %ecx -; X32-NEXT: movl %ecx, %eax -; X32-NEXT: xorl %edx, %edx -; X32-NEXT: popl %esi -; X32-NEXT: retl +; X86-LABEL: urem_i64_65535: +; X86: # %bb.0: # %entry +; X86-NEXT: pushl %esi +; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx +; X86-NEXT: movl {{[0-9]+}}(%esp), %esi +; X86-NEXT: movl %ecx, %eax +; X86-NEXT: addl %esi, %eax +; X86-NEXT: adcl $0, %eax +; X86-NEXT: movl $-2147450879, %edx # imm = 0x80008001 +; X86-NEXT: mull %edx +; X86-NEXT: shrl $15, %edx +; X86-NEXT: movl %edx, %eax +; X86-NEXT: shll $16, %eax +; X86-NEXT: subl %eax, %edx +; X86-NEXT: addl %esi, %ecx +; X86-NEXT: adcl %edx, %ecx +; X86-NEXT: movl %ecx, %eax +; X86-NEXT: xorl %edx, %edx +; X86-NEXT: popl %esi +; X86-NEXT: retl ; ; X64-LABEL: urem_i64_65535: ; X64: # %bb.0: # %entry @@ -691,21 +691,21 @@ entry: } define i64 @urem_i64_65537(i64 %x) nounwind { -; X32-LABEL: urem_i64_65537: -; X32: # %bb.0: # %entry -; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx -; X32-NEXT: addl {{[0-9]+}}(%esp), %ecx -; X32-NEXT: adcl $0, %ecx -; X32-NEXT: movl $-65535, %edx # imm = 0xFFFF0001 -; X32-NEXT: movl %ecx, %eax -; X32-NEXT: mull %edx -; X32-NEXT: movl %edx, %eax -; X32-NEXT: shrl $16, %eax -; X32-NEXT: shldl $16, %edx, %eax -; X32-NEXT: subl %eax, %ecx -; X32-NEXT: movl %ecx, %eax -; X32-NEXT: xorl %edx, %edx -; X32-NEXT: retl +; X86-LABEL: urem_i64_65537: +; X86: # %bb.0: # %entry +; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx +; X86-NEXT: addl {{[0-9]+}}(%esp), %ecx +; X86-NEXT: adcl $0, %ecx +; X86-NEXT: movl $-65535, %edx # imm = 0xFFFF0001 +; X86-NEXT: movl %ecx, %eax +; X86-NEXT: mull %edx +; X86-NEXT: movl %edx, %eax +; X86-NEXT: shrl $16, %eax +; X86-NEXT: shldl $16, %edx, %eax +; X86-NEXT: subl %eax, %ecx +; X86-NEXT: movl %ecx, %eax +; X86-NEXT: xorl %edx, %edx +; X86-NEXT: retl ; ; X64-LABEL: urem_i64_65537: ; X64: # %bb.0: # %entry @@ -725,27 +725,27 @@ entry: } define i64 @urem_i64_12(i64 %x) nounwind { -; X32-LABEL: urem_i64_12: -; X32: # %bb.0: # %entry -; X32-NEXT: pushl %esi -; X32-NEXT: movl {{[0-9]+}}(%esp), %esi -; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx -; X32-NEXT: movl %ecx, %eax -; X32-NEXT: shrl $2, %eax -; X32-NEXT: shldl $30, %esi, %ecx -; X32-NEXT: addl %eax, %ecx -; X32-NEXT: adcl $0, %ecx -; X32-NEXT: movl $-1431655765, %edx # imm = 0xAAAAAAAB -; X32-NEXT: movl %ecx, %eax -; X32-NEXT: mull %edx -; X32-NEXT: shrl %edx -; X32-NEXT: leal (%edx,%edx,2), %eax -; X32-NEXT: subl %eax, %ecx -; X32-NEXT: andl $3, %esi -; X32-NEXT: leal (%esi,%ecx,4), %eax -; X32-NEXT: xorl %edx, %edx -; X32-NEXT: popl %esi -; X32-NEXT: retl +; X86-LABEL: urem_i64_12: +; X86: # %bb.0: # %entry +; X86-NEXT: pushl %esi +; X86-NEXT: movl {{[0-9]+}}(%esp), %esi +; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx +; X86-NEXT: movl %ecx, %eax +; X86-NEXT: shrl $2, %eax +; X86-NEXT: shldl $30, %esi, %ecx +; X86-NEXT: addl %eax, %ecx +; X86-NEXT: adcl $0, %ecx +; X86-NEXT: movl $-1431655765, %edx # imm = 0xAAAAAAAB +; X86-NEXT: movl %ecx, %eax +; X86-NEXT: mull %edx +; X86-NEXT: shrl %edx +; X86-NEXT: leal (%edx,%edx,2), %eax +; X86-NEXT: subl %eax, %ecx +; X86-NEXT: andl $3, %esi +; X86-NEXT: leal (%esi,%ecx,4), %eax +; X86-NEXT: xorl %edx, %edx +; X86-NEXT: popl %esi +; X86-NEXT: retl ; ; X64-LABEL: urem_i64_12: ; X64: # %bb.0: # %entry @@ -764,34 +764,34 @@ entry: } define i64 @udiv_i64_3(i64 %x) nounwind { -; X32-LABEL: udiv_i64_3: -; X32: # %bb.0: # %entry -; X32-NEXT: pushl %ebx -; X32-NEXT: pushl %edi -; X32-NEXT: pushl %esi -; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx -; X32-NEXT: movl {{[0-9]+}}(%esp), %edi -; X32-NEXT: movl %ecx, %esi -; X32-NEXT: addl %edi, %esi -; X32-NEXT: adcl $0, %esi -; X32-NEXT: movl $-1431655765, %ebx # imm = 0xAAAAAAAB -; X32-NEXT: movl %esi, %eax -; X32-NEXT: mull %ebx -; X32-NEXT: shrl %edx -; X32-NEXT: leal (%edx,%edx,2), %eax -; X32-NEXT: subl %eax, %esi -; X32-NEXT: subl %esi, %ecx -; X32-NEXT: sbbl $0, %edi -; X32-NEXT: movl %ecx, %eax -; X32-NEXT: mull %ebx -; X32-NEXT: imull $-1431655766, %ecx, %ecx # imm = 0xAAAAAAAA -; X32-NEXT: addl %ecx, %edx -; X32-NEXT: imull $-1431655765, %edi, %ecx # imm = 0xAAAAAAAB -; X32-NEXT: addl %ecx, %edx -; X32-NEXT: popl %esi -; X32-NEXT: popl %edi -; X32-NEXT: popl %ebx -; X32-NEXT: retl +; X86-LABEL: udiv_i64_3: +; X86: # %bb.0: # %entry +; X86-NEXT: pushl %ebx +; X86-NEXT: pushl %edi +; X86-NEXT: pushl %esi +; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx +; X86-NEXT: movl {{[0-9]+}}(%esp), %edi +; X86-NEXT: movl %ecx, %esi +; X86-NEXT: addl %edi, %esi +; X86-NEXT: adcl $0, %esi +; X86-NEXT: movl $-1431655765, %ebx # imm = 0xAAAAAAAB +; X86-NEXT: movl %esi, %eax +; X86-NEXT: mull %ebx +; X86-NEXT: shrl %edx +; X86-NEXT: leal (%edx,%edx,2), %eax +; X86-NEXT: subl %eax, %esi +; X86-NEXT: subl %esi, %ecx +; X86-NEXT: sbbl $0, %edi +; X86-NEXT: movl %ecx, %eax +; X86-NEXT: mull %ebx +; X86-NEXT: imull $-1431655766, %ecx, %ecx # imm = 0xAAAAAAAA +; X86-NEXT: addl %ecx, %edx +; X86-NEXT: imull $-1431655765, %edi, %ecx # imm = 0xAAAAAAAB +; X86-NEXT: addl %ecx, %edx +; X86-NEXT: popl %esi +; X86-NEXT: popl %edi +; X86-NEXT: popl %ebx +; X86-NEXT: retl ; ; X64-LABEL: udiv_i64_3: ; X64: # %bb.0: # %entry @@ -807,34 +807,34 @@ entry: } define i64 @udiv_i64_5(i64 %x) nounwind { -; X32-LABEL: udiv_i64_5: -; X32: # %bb.0: # %entry -; X32-NEXT: pushl %ebx -; X32-NEXT: pushl %edi -; X32-NEXT: pushl %esi -; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx -; X32-NEXT: movl {{[0-9]+}}(%esp), %edi -; X32-NEXT: movl %ecx, %esi -; X32-NEXT: addl %edi, %esi -; X32-NEXT: adcl $0, %esi -; X32-NEXT: movl $-858993459, %ebx # imm = 0xCCCCCCCD -; X32-NEXT: movl %esi, %eax -; X32-NEXT: mull %ebx -; X32-NEXT: shrl $2, %edx -; X32-NEXT: leal (%edx,%edx,4), %eax -; X32-NEXT: subl %eax, %esi -; X32-NEXT: subl %esi, %ecx -; X32-NEXT: sbbl $0, %edi -; X32-NEXT: movl %ecx, %eax -; X32-NEXT: mull %ebx -; X32-NEXT: imull $-858993460, %ecx, %ecx # imm = 0xCCCCCCCC -; X32-NEXT: addl %ecx, %edx -; X32-NEXT: imull $-858993459, %edi, %ecx # imm = 0xCCCCCCCD -; X32-NEXT: addl %ecx, %edx -; X32-NEXT: popl %esi -; X32-NEXT: popl %edi -; X32-NEXT: popl %ebx -; X32-NEXT: retl +; X86-LABEL: udiv_i64_5: +; X86: # %bb.0: # %entry +; X86-NEXT: pushl %ebx +; X86-NEXT: pushl %edi +; X86-NEXT: pushl %esi +; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx +; X86-NEXT: movl {{[0-9]+}}(%esp), %edi +; X86-NEXT: movl %ecx, %esi +; X86-NEXT: addl %edi, %esi +; X86-NEXT: adcl $0, %esi +; X86-NEXT: movl $-858993459, %ebx # imm = 0xCCCCCCCD +; X86-NEXT: movl %esi, %eax +; X86-NEXT: mull %ebx +; X86-NEXT: shrl $2, %edx +; X86-NEXT: leal (%edx,%edx,4), %eax +; X86-NEXT: subl %eax, %esi +; X86-NEXT: subl %esi, %ecx +; X86-NEXT: sbbl $0, %edi +; X86-NEXT: movl %ecx, %eax +; X86-NEXT: mull %ebx +; X86-NEXT: imull $-858993460, %ecx, %ecx # imm = 0xCCCCCCCC +; X86-NEXT: addl %ecx, %edx +; X86-NEXT: imull $-858993459, %edi, %ecx # imm = 0xCCCCCCCD +; X86-NEXT: addl %ecx, %edx +; X86-NEXT: popl %esi +; X86-NEXT: popl %edi +; X86-NEXT: popl %ebx +; X86-NEXT: retl ; ; X64-LABEL: udiv_i64_5: ; X64: # %bb.0: # %entry @@ -850,34 +850,34 @@ entry: } define i64 @udiv_i64_15(i64 %x) nounwind { -; X32-LABEL: udiv_i64_15: -; X32: # %bb.0: # %entry -; X32-NEXT: pushl %edi -; X32-NEXT: pushl %esi -; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx -; X32-NEXT: movl {{[0-9]+}}(%esp), %edi -; X32-NEXT: movl %ecx, %esi -; X32-NEXT: addl %edi, %esi -; X32-NEXT: adcl $0, %esi -; X32-NEXT: movl $-2004318071, %edx # imm = 0x88888889 -; X32-NEXT: movl %esi, %eax -; X32-NEXT: mull %edx -; X32-NEXT: shrl $3, %edx -; X32-NEXT: leal (%edx,%edx,4), %eax -; X32-NEXT: leal (%eax,%eax,2), %eax -; X32-NEXT: subl %eax, %esi -; X32-NEXT: subl %esi, %ecx -; X32-NEXT: sbbl $0, %edi -; X32-NEXT: movl $-286331153, %edx # imm = 0xEEEEEEEF -; X32-NEXT: movl %ecx, %eax -; X32-NEXT: mull %edx -; X32-NEXT: imull $-286331154, %ecx, %ecx # imm = 0xEEEEEEEE -; X32-NEXT: addl %ecx, %edx -; X32-NEXT: imull $-286331153, %edi, %ecx # imm = 0xEEEEEEEF -; X32-NEXT: addl %ecx, %edx -; X32-NEXT: popl %esi -; X32-NEXT: popl %edi -; X32-NEXT: retl +; X86-LABEL: udiv_i64_15: +; X86: # %bb.0: # %entry +; X86-NEXT: pushl %edi +; X86-NEXT: pushl %esi +; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx +; X86-NEXT: movl {{[0-9]+}}(%esp), %edi +; X86-NEXT: movl %ecx, %esi +; X86-NEXT: addl %edi, %esi +; X86-NEXT: adcl $0, %esi +; X86-NEXT: movl $-2004318071, %edx # imm = 0x88888889 +; X86-NEXT: movl %esi, %eax +; X86-NEXT: mull %edx +; X86-NEXT: shrl $3, %edx +; X86-NEXT: leal (%edx,%edx,4), %eax +; X86-NEXT: leal (%eax,%eax,2), %eax +; X86-NEXT: subl %eax, %esi +; X86-NEXT: subl %esi, %ecx +; X86-NEXT: sbbl $0, %edi +; X86-NEXT: movl $-286331153, %edx # imm = 0xEEEEEEEF +; X86-NEXT: movl %ecx, %eax +; X86-NEXT: mull %edx +; X86-NEXT: imull $-286331154, %ecx, %ecx # imm = 0xEEEEEEEE +; X86-NEXT: addl %ecx, %edx +; X86-NEXT: imull $-286331153, %edi, %ecx # imm = 0xEEEEEEEF +; X86-NEXT: addl %ecx, %edx +; X86-NEXT: popl %esi +; X86-NEXT: popl %edi +; X86-NEXT: retl ; ; X64-LABEL: udiv_i64_15: ; X64: # %bb.0: # %entry @@ -893,36 +893,36 @@ entry: } define i64 @udiv_i64_17(i64 %x) nounwind { -; X32-LABEL: udiv_i64_17: -; X32: # %bb.0: # %entry -; X32-NEXT: pushl %ebx -; X32-NEXT: pushl %edi -; X32-NEXT: pushl %esi -; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx -; X32-NEXT: movl {{[0-9]+}}(%esp), %edi -; X32-NEXT: movl %ecx, %esi -; X32-NEXT: addl %edi, %esi -; X32-NEXT: adcl $0, %esi -; X32-NEXT: movl $-252645135, %ebx # imm = 0xF0F0F0F1 -; X32-NEXT: movl %esi, %eax -; X32-NEXT: mull %ebx -; X32-NEXT: movl %edx, %eax -; X32-NEXT: andl $-16, %eax -; X32-NEXT: shrl $4, %edx -; X32-NEXT: addl %eax, %edx -; X32-NEXT: subl %edx, %esi -; X32-NEXT: subl %esi, %ecx -; X32-NEXT: sbbl $0, %edi -; X32-NEXT: movl %ecx, %eax -; X32-NEXT: mull %ebx -; X32-NEXT: imull $-252645136, %ecx, %ecx # imm = 0xF0F0F0F0 -; X32-NEXT: addl %ecx, %edx -; X32-NEXT: imull $-252645135, %edi, %ecx # imm = 0xF0F0F0F1 -; X32-NEXT: addl %ecx, %edx -; X32-NEXT: popl %esi -; X32-NEXT: popl %edi -; X32-NEXT: popl %ebx -; X32-NEXT: retl +; X86-LABEL: udiv_i64_17: +; X86: # %bb.0: # %entry +; X86-NEXT: pushl %ebx +; X86-NEXT: pushl %edi +; X86-NEXT: pushl %esi +; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx +; X86-NEXT: movl {{[0-9]+}}(%esp), %edi +; X86-NEXT: movl %ecx, %esi +; X86-NEXT: addl %edi, %esi +; X86-NEXT: adcl $0, %esi +; X86-NEXT: movl $-252645135, %ebx # imm = 0xF0F0F0F1 +; X86-NEXT: movl %esi, %eax +; X86-NEXT: mull %ebx +; X86-NEXT: movl %edx, %eax +; X86-NEXT: andl $-16, %eax +; X86-NEXT: shrl $4, %edx +; X86-NEXT: addl %eax, %edx +; X86-NEXT: subl %edx, %esi +; X86-NEXT: subl %esi, %ecx +; X86-NEXT: sbbl $0, %edi +; X86-NEXT: movl %ecx, %eax +; X86-NEXT: mull %ebx +; X86-NEXT: imull $-252645136, %ecx, %ecx # imm = 0xF0F0F0F0 +; X86-NEXT: addl %ecx, %edx +; X86-NEXT: imull $-252645135, %edi, %ecx # imm = 0xF0F0F0F1 +; X86-NEXT: addl %ecx, %edx +; X86-NEXT: popl %esi +; X86-NEXT: popl %edi +; X86-NEXT: popl %ebx +; X86-NEXT: retl ; ; X64-LABEL: udiv_i64_17: ; X64: # %bb.0: # %entry @@ -938,34 +938,34 @@ entry: } define i64 @udiv_i64_255(i64 %x) nounwind { -; X32-LABEL: udiv_i64_255: -; X32: # %bb.0: # %entry -; X32-NEXT: pushl %esi -; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx -; X32-NEXT: movl {{[0-9]+}}(%esp), %esi -; X32-NEXT: movl %ecx, %eax -; X32-NEXT: addl %esi, %eax -; X32-NEXT: adcl $0, %eax -; X32-NEXT: movl $-2139062143, %edx # imm = 0x80808081 -; X32-NEXT: mull %edx -; X32-NEXT: shrl $7, %edx -; X32-NEXT: movl %edx, %eax -; X32-NEXT: shll $8, %eax -; X32-NEXT: subl %eax, %edx -; X32-NEXT: movl %ecx, %eax -; X32-NEXT: addl %esi, %eax -; X32-NEXT: adcl %edx, %eax -; X32-NEXT: subl %eax, %ecx -; X32-NEXT: sbbl $0, %esi -; X32-NEXT: movl $-16843009, %edx # imm = 0xFEFEFEFF -; X32-NEXT: movl %ecx, %eax -; X32-NEXT: mull %edx -; X32-NEXT: imull $-16843010, %ecx, %ecx # imm = 0xFEFEFEFE -; X32-NEXT: addl %ecx, %edx -; X32-NEXT: imull $-16843009, %esi, %ecx # imm = 0xFEFEFEFF -; X32-NEXT: addl %ecx, %edx -; X32-NEXT: popl %esi -; X32-NEXT: retl +; X86-LABEL: udiv_i64_255: +; X86: # %bb.0: # %entry +; X86-NEXT: pushl %esi +; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx +; X86-NEXT: movl {{[0-9]+}}(%esp), %esi +; X86-NEXT: movl %ecx, %eax +; X86-NEXT: addl %esi, %eax +; X86-NEXT: adcl $0, %eax +; X86-NEXT: movl $-2139062143, %edx # imm = 0x80808081 +; X86-NEXT: mull %edx +; X86-NEXT: shrl $7, %edx +; X86-NEXT: movl %edx, %eax +; X86-NEXT: shll $8, %eax +; X86-NEXT: subl %eax, %edx +; X86-NEXT: movl %ecx, %eax +; X86-NEXT: addl %esi, %eax +; X86-NEXT: adcl %edx, %eax +; X86-NEXT: subl %eax, %ecx +; X86-NEXT: sbbl $0, %esi +; X86-NEXT: movl $-16843009, %edx # imm = 0xFEFEFEFF +; X86-NEXT: movl %ecx, %eax +; X86-NEXT: mull %edx +; X86-NEXT: imull $-16843010, %ecx, %ecx # imm = 0xFEFEFEFE +; X86-NEXT: addl %ecx, %edx +; X86-NEXT: imull $-16843009, %esi, %ecx # imm = 0xFEFEFEFF +; X86-NEXT: addl %ecx, %edx +; X86-NEXT: popl %esi +; X86-NEXT: retl ; ; X64-LABEL: udiv_i64_255: ; X64: # %bb.0: # %entry @@ -981,36 +981,36 @@ entry: } define i64 @udiv_i64_257(i64 %x) nounwind { -; X32-LABEL: udiv_i64_257: -; X32: # %bb.0: # %entry -; X32-NEXT: pushl %ebx -; X32-NEXT: pushl %edi -; X32-NEXT: pushl %esi -; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx -; X32-NEXT: movl {{[0-9]+}}(%esp), %edi -; X32-NEXT: movl %ecx, %esi -; X32-NEXT: addl %edi, %esi -; X32-NEXT: adcl $0, %esi -; X32-NEXT: movl $-16711935, %ebx # imm = 0xFF00FF01 -; X32-NEXT: movl %esi, %eax -; X32-NEXT: mull %ebx -; X32-NEXT: movl %edx, %eax -; X32-NEXT: andl $-256, %eax -; X32-NEXT: shrl $8, %edx -; X32-NEXT: addl %eax, %edx -; X32-NEXT: subl %edx, %esi -; X32-NEXT: subl %esi, %ecx -; X32-NEXT: sbbl $0, %edi -; X32-NEXT: movl %ecx, %eax -; X32-NEXT: mull %ebx -; X32-NEXT: imull $-16711936, %ecx, %ecx # imm = 0xFF00FF00 -; X32-NEXT: addl %ecx, %edx -; X32-NEXT: imull $-16711935, %edi, %ecx # imm = 0xFF00FF01 -; X32-NEXT: addl %ecx, %edx -; X32-NEXT: popl %esi -; X32-NEXT: popl %edi -; X32-NEXT: popl %ebx -; X32-NEXT: retl +; X86-LABEL: udiv_i64_257: +; X86: # %bb.0: # %entry +; X86-NEXT: pushl %ebx +; X86-NEXT: pushl %edi +; X86-NEXT: pushl %esi +; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx +; X86-NEXT: movl {{[0-9]+}}(%esp), %edi +; X86-NEXT: movl %ecx, %esi +; X86-NEXT: addl %edi, %esi +; X86-NEXT: adcl $0, %esi +; X86-NEXT: movl $-16711935, %ebx # imm = 0xFF00FF01 +; X86-NEXT: movl %esi, %eax +; X86-NEXT: mull %ebx +; X86-NEXT: movl %edx, %eax +; X86-NEXT: andl $-256, %eax +; X86-NEXT: shrl $8, %edx +; X86-NEXT: addl %eax, %edx +; X86-NEXT: subl %edx, %esi +; X86-NEXT: subl %esi, %ecx +; X86-NEXT: sbbl $0, %edi +; X86-NEXT: movl %ecx, %eax +; X86-NEXT: mull %ebx +; X86-NEXT: imull $-16711936, %ecx, %ecx # imm = 0xFF00FF00 +; X86-NEXT: addl %ecx, %edx +; X86-NEXT: imull $-16711935, %edi, %ecx # imm = 0xFF00FF01 +; X86-NEXT: addl %ecx, %edx +; X86-NEXT: popl %esi +; X86-NEXT: popl %edi +; X86-NEXT: popl %ebx +; X86-NEXT: retl ; ; X64-LABEL: udiv_i64_257: ; X64: # %bb.0: # %entry @@ -1026,36 +1026,36 @@ entry: } define i64 @udiv_i64_65535(i64 %x) nounwind { -; X32-LABEL: udiv_i64_65535: -; X32: # %bb.0: # %entry -; X32-NEXT: pushl %esi -; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx -; X32-NEXT: movl {{[0-9]+}}(%esp), %esi -; X32-NEXT: movl %ecx, %eax -; X32-NEXT: addl %esi, %eax -; X32-NEXT: adcl $0, %eax -; X32-NEXT: movl $-2147450879, %edx # imm = 0x80008001 -; X32-NEXT: mull %edx -; X32-NEXT: shrl $15, %edx -; X32-NEXT: movl %edx, %eax -; X32-NEXT: shll $16, %eax -; X32-NEXT: subl %eax, %edx -; X32-NEXT: movl %ecx, %eax -; X32-NEXT: addl %esi, %eax -; X32-NEXT: adcl %edx, %eax -; X32-NEXT: subl %eax, %ecx -; X32-NEXT: sbbl $0, %esi -; X32-NEXT: movl $-65537, %edx # imm = 0xFFFEFFFF -; X32-NEXT: movl %ecx, %eax -; X32-NEXT: mull %edx -; X32-NEXT: imull $-65538, %ecx, %ecx # imm = 0xFFFEFFFE -; X32-NEXT: addl %ecx, %edx -; X32-NEXT: movl %esi, %ecx -; X32-NEXT: shll $16, %ecx -; X32-NEXT: addl %esi, %ecx -; X32-NEXT: subl %ecx, %edx -; X32-NEXT: popl %esi -; X32-NEXT: retl +; X86-LABEL: udiv_i64_65535: +; X86: # %bb.0: # %entry +; X86-NEXT: pushl %esi +; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx +; X86-NEXT: movl {{[0-9]+}}(%esp), %esi +; X86-NEXT: movl %ecx, %eax +; X86-NEXT: addl %esi, %eax +; X86-NEXT: adcl $0, %eax +; X86-NEXT: movl $-2147450879, %edx # imm = 0x80008001 +; X86-NEXT: mull %edx +; X86-NEXT: shrl $15, %edx +; X86-NEXT: movl %edx, %eax +; X86-NEXT: shll $16, %eax +; X86-NEXT: subl %eax, %edx +; X86-NEXT: movl %ecx, %eax +; X86-NEXT: addl %esi, %eax +; X86-NEXT: adcl %edx, %eax +; X86-NEXT: subl %eax, %ecx +; X86-NEXT: sbbl $0, %esi +; X86-NEXT: movl $-65537, %edx # imm = 0xFFFEFFFF +; X86-NEXT: movl %ecx, %eax +; X86-NEXT: mull %edx +; X86-NEXT: imull $-65538, %ecx, %ecx # imm = 0xFFFEFFFE +; X86-NEXT: addl %ecx, %edx +; X86-NEXT: movl %esi, %ecx +; X86-NEXT: shll $16, %ecx +; X86-NEXT: addl %esi, %ecx +; X86-NEXT: subl %ecx, %edx +; X86-NEXT: popl %esi +; X86-NEXT: retl ; ; X64-LABEL: udiv_i64_65535: ; X64: # %bb.0: # %entry @@ -1071,37 +1071,37 @@ entry: } define i64 @udiv_i64_65537(i64 %x) nounwind { -; X32-LABEL: udiv_i64_65537: -; X32: # %bb.0: # %entry -; X32-NEXT: pushl %ebx -; X32-NEXT: pushl %edi -; X32-NEXT: pushl %esi -; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx -; X32-NEXT: movl {{[0-9]+}}(%esp), %edi -; X32-NEXT: movl %ecx, %esi -; X32-NEXT: addl %edi, %esi -; X32-NEXT: adcl $0, %esi -; X32-NEXT: movl $-65535, %ebx # imm = 0xFFFF0001 -; X32-NEXT: movl %esi, %eax -; X32-NEXT: mull %ebx -; X32-NEXT: movl %edx, %eax -; X32-NEXT: shrl $16, %eax -; X32-NEXT: shldl $16, %edx, %eax -; X32-NEXT: subl %eax, %esi -; X32-NEXT: subl %esi, %ecx -; X32-NEXT: sbbl $0, %edi -; X32-NEXT: movl %ecx, %eax -; X32-NEXT: mull %ebx -; X32-NEXT: shll $16, %ecx -; X32-NEXT: subl %ecx, %edx -; X32-NEXT: movl %edi, %ecx -; X32-NEXT: shll $16, %ecx -; X32-NEXT: subl %ecx, %edi -; X32-NEXT: addl %edi, %edx -; X32-NEXT: popl %esi -; X32-NEXT: popl %edi -; X32-NEXT: popl %ebx -; X32-NEXT: retl +; X86-LABEL: udiv_i64_65537: +; X86: # %bb.0: # %entry +; X86-NEXT: pushl %ebx +; X86-NEXT: pushl %edi +; X86-NEXT: pushl %esi +; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx +; X86-NEXT: movl {{[0-9]+}}(%esp), %edi +; X86-NEXT: movl %ecx, %esi +; X86-NEXT: addl %edi, %esi +; X86-NEXT: adcl $0, %esi +; X86-NEXT: movl $-65535, %ebx # imm = 0xFFFF0001 +; X86-NEXT: movl %esi, %eax +; X86-NEXT: mull %ebx +; X86-NEXT: movl %edx, %eax +; X86-NEXT: shrl $16, %eax +; X86-NEXT: shldl $16, %edx, %eax +; X86-NEXT: subl %eax, %esi +; X86-NEXT: subl %esi, %ecx +; X86-NEXT: sbbl $0, %edi +; X86-NEXT: movl %ecx, %eax +; X86-NEXT: mull %ebx +; X86-NEXT: shll $16, %ecx +; X86-NEXT: subl %ecx, %edx +; X86-NEXT: movl %edi, %ecx +; X86-NEXT: shll $16, %ecx +; X86-NEXT: subl %ecx, %edi +; X86-NEXT: addl %edi, %edx +; X86-NEXT: popl %esi +; X86-NEXT: popl %edi +; X86-NEXT: popl %ebx +; X86-NEXT: retl ; ; X64-LABEL: udiv_i64_65537: ; X64: # %bb.0: # %entry @@ -1117,36 +1117,36 @@ entry: } define i64 @udiv_i64_12(i64 %x) nounwind { -; X32-LABEL: udiv_i64_12: -; X32: # %bb.0: # %entry -; X32-NEXT: pushl %ebx -; X32-NEXT: pushl %edi -; X32-NEXT: pushl %esi -; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx -; X32-NEXT: movl {{[0-9]+}}(%esp), %edi -; X32-NEXT: shrdl $2, %edi, %ecx -; X32-NEXT: shrl $2, %edi -; X32-NEXT: movl %ecx, %esi -; X32-NEXT: addl %edi, %esi -; X32-NEXT: adcl $0, %esi -; X32-NEXT: movl $-1431655765, %ebx # imm = 0xAAAAAAAB -; X32-NEXT: movl %esi, %eax -; X32-NEXT: mull %ebx -; X32-NEXT: shrl %edx -; X32-NEXT: leal (%edx,%edx,2), %eax -; X32-NEXT: subl %eax, %esi -; X32-NEXT: subl %esi, %ecx -; X32-NEXT: sbbl $0, %edi -; X32-NEXT: movl %ecx, %eax -; X32-NEXT: mull %ebx -; X32-NEXT: imull $-1431655766, %ecx, %ecx # imm = 0xAAAAAAAA -; X32-NEXT: addl %ecx, %edx -; X32-NEXT: imull $-1431655765, %edi, %ecx # imm = 0xAAAAAAAB -; X32-NEXT: addl %ecx, %edx -; X32-NEXT: popl %esi -; X32-NEXT: popl %edi -; X32-NEXT: popl %ebx -; X32-NEXT: retl +; X86-LABEL: udiv_i64_12: +; X86: # %bb.0: # %entry +; X86-NEXT: pushl %ebx +; X86-NEXT: pushl %edi +; X86-NEXT: pushl %esi +; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx +; X86-NEXT: movl {{[0-9]+}}(%esp), %edi +; X86-NEXT: shrdl $2, %edi, %ecx +; X86-NEXT: shrl $2, %edi +; X86-NEXT: movl %ecx, %esi +; X86-NEXT: addl %edi, %esi +; X86-NEXT: adcl $0, %esi +; X86-NEXT: movl $-1431655765, %ebx # imm = 0xAAAAAAAB +; X86-NEXT: movl %esi, %eax +; X86-NEXT: mull %ebx +; X86-NEXT: shrl %edx +; X86-NEXT: leal (%edx,%edx,2), %eax +; X86-NEXT: subl %eax, %esi +; X86-NEXT: subl %esi, %ecx +; X86-NEXT: sbbl $0, %edi +; X86-NEXT: movl %ecx, %eax +; X86-NEXT: mull %ebx +; X86-NEXT: imull $-1431655766, %ecx, %ecx # imm = 0xAAAAAAAA +; X86-NEXT: addl %ecx, %edx +; X86-NEXT: imull $-1431655765, %edi, %ecx # imm = 0xAAAAAAAB +; X86-NEXT: addl %ecx, %edx +; X86-NEXT: popl %esi +; X86-NEXT: popl %edi +; X86-NEXT: popl %ebx +; X86-NEXT: retl ; ; X64-LABEL: udiv_i64_12: ; X64: # %bb.0: # %entry @@ -1163,16 +1163,16 @@ entry: ; Make sure we don't inline expand for optsize. define i64 @urem_i64_3_optsize(i64 %x) nounwind optsize { -; X32-LABEL: urem_i64_3_optsize: -; X32: # %bb.0: # %entry -; X32-NEXT: subl $12, %esp -; X32-NEXT: pushl $0 -; X32-NEXT: pushl $3 -; X32-NEXT: pushl {{[0-9]+}}(%esp) -; X32-NEXT: pushl {{[0-9]+}}(%esp) -; X32-NEXT: calll __umoddi3 -; X32-NEXT: addl $28, %esp -; X32-NEXT: retl +; X86-LABEL: urem_i64_3_optsize: +; X86: # %bb.0: # %entry +; X86-NEXT: subl $12, %esp +; X86-NEXT: pushl $0 +; X86-NEXT: pushl $3 +; X86-NEXT: pushl {{[0-9]+}}(%esp) +; X86-NEXT: pushl {{[0-9]+}}(%esp) +; X86-NEXT: calll __umoddi3 +; X86-NEXT: addl $28, %esp +; X86-NEXT: retl ; ; X64-LABEL: urem_i64_3_optsize: ; X64: # %bb.0: # %entry