brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.8 KiB · 7d57573 Raw
135 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-- | FileCheck %s --check-prefix=X863; RUN: llc < %s -mtriple=x86_64-- | FileCheck %s --check-prefix=X644 5; Make sure none of these crash, and that the power-of-two transformations6; trigger correctly.7 8define i128 @test1(i128 %x) nounwind {9; X86-LABEL: test1:10; X86:       # %bb.0:11; X86-NEXT:    pushl %ebp12; X86-NEXT:    movl %esp, %ebp13; X86-NEXT:    pushl %edi14; X86-NEXT:    pushl %esi15; X86-NEXT:    andl $-16, %esp16; X86-NEXT:    movl 8(%ebp), %eax17; X86-NEXT:    movl 36(%ebp), %ecx18; X86-NEXT:    movl %ecx, %esi19; X86-NEXT:    sarl $31, %esi20; X86-NEXT:    movl %esi, %edx21; X86-NEXT:    shrl $30, %edx22; X86-NEXT:    movl 24(%ebp), %edi23; X86-NEXT:    addl %esi, %edi24; X86-NEXT:    adcl 28(%ebp), %esi25; X86-NEXT:    adcl 32(%ebp), %edx26; X86-NEXT:    adcl $0, %ecx27; X86-NEXT:    shrdl $2, %ecx, %edx28; X86-NEXT:    movl %ecx, %esi29; X86-NEXT:    sarl $2, %esi30; X86-NEXT:    sarl $31, %ecx31; X86-NEXT:    movl %ecx, 12(%eax)32; X86-NEXT:    movl %ecx, 8(%eax)33; X86-NEXT:    movl %esi, 4(%eax)34; X86-NEXT:    movl %edx, (%eax)35; X86-NEXT:    leal -8(%ebp), %esp36; X86-NEXT:    popl %esi37; X86-NEXT:    popl %edi38; X86-NEXT:    popl %ebp39; X86-NEXT:    retl $440;41; X64-LABEL: test1:42; X64:       # %bb.0:43; X64-NEXT:    movq %rsi, %rax44; X64-NEXT:    sarq $63, %rax45; X64-NEXT:    movq %rax, %rdx46; X64-NEXT:    shrq $62, %rdx47; X64-NEXT:    addq %rdi, %rax48; X64-NEXT:    adcq %rsi, %rdx49; X64-NEXT:    movq %rdx, %rax50; X64-NEXT:    sarq $2, %rax51; X64-NEXT:    sarq $63, %rdx52; X64-NEXT:    retq53  %tmp = sdiv i128 %x, 7378697629483820646454  ret i128 %tmp55}56 57define i128 @test2(i128 %x) nounwind {58; X86-LABEL: test2:59; X86:       # %bb.0:60; X86-NEXT:    pushl %ebp61; X86-NEXT:    movl %esp, %ebp62; X86-NEXT:    pushl %ebx63; X86-NEXT:    pushl %edi64; X86-NEXT:    pushl %esi65; X86-NEXT:    andl $-16, %esp66; X86-NEXT:    subl $16, %esp67; X86-NEXT:    movl 36(%ebp), %eax68; X86-NEXT:    movl %eax, %edx69; X86-NEXT:    sarl $31, %edx70; X86-NEXT:    movl %edx, %ecx71; X86-NEXT:    shrl $30, %ecx72; X86-NEXT:    movl 24(%ebp), %esi73; X86-NEXT:    addl %edx, %esi74; X86-NEXT:    adcl 28(%ebp), %edx75; X86-NEXT:    adcl 32(%ebp), %ecx76; X86-NEXT:    adcl $0, %eax77; X86-NEXT:    shrdl $2, %eax, %ecx78; X86-NEXT:    movl %eax, %esi79; X86-NEXT:    sarl $31, %esi80; X86-NEXT:    sarl $2, %eax81; X86-NEXT:    xorl %edx, %edx82; X86-NEXT:    negl %ecx83; X86-NEXT:    movl $0, %edi84; X86-NEXT:    sbbl %eax, %edi85; X86-NEXT:    movl $0, %ebx86; X86-NEXT:    sbbl %esi, %ebx87; X86-NEXT:    sbbl %esi, %edx88; X86-NEXT:    movl 8(%ebp), %eax89; X86-NEXT:    movl %ecx, (%eax)90; X86-NEXT:    movl %edi, 4(%eax)91; X86-NEXT:    movl %ebx, 8(%eax)92; X86-NEXT:    movl %edx, 12(%eax)93; X86-NEXT:    leal -12(%ebp), %esp94; X86-NEXT:    popl %esi95; X86-NEXT:    popl %edi96; X86-NEXT:    popl %ebx97; X86-NEXT:    popl %ebp98; X86-NEXT:    retl $499;100; X64-LABEL: test2:101; X64:       # %bb.0:102; X64-NEXT:    movq %rsi, %rcx103; X64-NEXT:    sarq $63, %rcx104; X64-NEXT:    movq %rcx, %rax105; X64-NEXT:    shrq $62, %rax106; X64-NEXT:    addq %rdi, %rcx107; X64-NEXT:    adcq %rsi, %rax108; X64-NEXT:    movq %rax, %rcx109; X64-NEXT:    sarq $63, %rcx110; X64-NEXT:    sarq $2, %rax111; X64-NEXT:    xorl %edx, %edx112; X64-NEXT:    negq %rax113; X64-NEXT:    sbbq %rcx, %rdx114; X64-NEXT:    retq115  %tmp = sdiv i128 %x, -73786976294838206464116  ret i128 %tmp117}118 119define i128 @test3(i128 %x) nounwind {120; X86-LABEL: test3:121; X86 doesn't have __divti3, so the urem is expanded into a loop.122; X86: udiv-do-while123;124; X64-LABEL: test3:125; X64:       # %bb.0:126; X64-NEXT:    pushq %rax127; X64-NEXT:    movq $-3, %rdx128; X64-NEXT:    movq $-5, %rcx129; X64-NEXT:    callq __divti3@PLT130; X64-NEXT:    popq %rcx131; X64-NEXT:    retq132  %tmp = sdiv i128 %x, -73786976294838206467133  ret i128 %tmp134}135