131 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown | FileCheck %s --check-prefix=X643; RUN: llc < %s -mtriple=i386-unknown | FileCheck %s --check-prefix=X864 5define i128 @foo(i128 %t, i128 %u) {6; X64-LABEL: foo:7; X64: # %bb.0:8; X64-NEXT: movq %rdx, %r89; X64-NEXT: movq %rdi, %rax10; X64-NEXT: imulq %rdi, %rcx11; X64-NEXT: mulq %rdx12; X64-NEXT: addq %rcx, %rdx13; X64-NEXT: imulq %rsi, %r814; X64-NEXT: addq %r8, %rdx15; X64-NEXT: retq16;17; X86-LABEL: foo:18; X86: # %bb.0:19; X86-NEXT: pushl %ebp20; X86-NEXT: .cfi_def_cfa_offset 821; X86-NEXT: .cfi_offset %ebp, -822; X86-NEXT: movl %esp, %ebp23; X86-NEXT: .cfi_def_cfa_register %ebp24; X86-NEXT: pushl %ebx25; X86-NEXT: pushl %edi26; X86-NEXT: pushl %esi27; X86-NEXT: andl $-16, %esp28; X86-NEXT: subl $16, %esp29; X86-NEXT: .cfi_offset %esi, -2030; X86-NEXT: .cfi_offset %edi, -1631; X86-NEXT: .cfi_offset %ebx, -1232; X86-NEXT: movl 32(%ebp), %ecx33; X86-NEXT: movl 40(%ebp), %edi34; X86-NEXT: movl 44(%ebp), %esi35; X86-NEXT: imull %ecx, %esi36; X86-NEXT: movl %edi, %eax37; X86-NEXT: mull %ecx38; X86-NEXT: movl %eax, (%esp) # 4-byte Spill39; X86-NEXT: movl %edx, %ebx40; X86-NEXT: addl %esi, %ebx41; X86-NEXT: movl 36(%ebp), %eax42; X86-NEXT: imull %edi, %eax43; X86-NEXT: addl %eax, %ebx44; X86-NEXT: movl 48(%ebp), %eax45; X86-NEXT: movl %eax, %ecx46; X86-NEXT: imull 28(%ebp), %ecx47; X86-NEXT: movl 24(%ebp), %edi48; X86-NEXT: mull %edi49; X86-NEXT: addl %ecx, %edx50; X86-NEXT: movl 52(%ebp), %esi51; X86-NEXT: imull %edi, %esi52; X86-NEXT: addl %edx, %esi53; X86-NEXT: addl (%esp), %eax # 4-byte Folded Reload54; X86-NEXT: movl %eax, (%esp) # 4-byte Spill55; X86-NEXT: adcl %ebx, %esi56; X86-NEXT: movl %edi, %eax57; X86-NEXT: movl 40(%ebp), %ecx58; X86-NEXT: mull %ecx59; X86-NEXT: movl %edx, %ebx60; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill61; X86-NEXT: movl 28(%ebp), %eax62; X86-NEXT: mull %ecx63; X86-NEXT: movl %edx, %edi64; X86-NEXT: movl %eax, %ecx65; X86-NEXT: addl %ebx, %ecx66; X86-NEXT: adcl $0, %edi67; X86-NEXT: movl 24(%ebp), %eax68; X86-NEXT: mull 44(%ebp)69; X86-NEXT: movl %edx, %ebx70; X86-NEXT: addl %ecx, %eax71; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill72; X86-NEXT: adcl %edi, %ebx73; X86-NEXT: setb %cl74; X86-NEXT: movl 28(%ebp), %eax75; X86-NEXT: mull 44(%ebp)76; X86-NEXT: addl %ebx, %eax77; X86-NEXT: movzbl %cl, %ecx78; X86-NEXT: adcl %ecx, %edx79; X86-NEXT: addl (%esp), %eax # 4-byte Folded Reload80; X86-NEXT: adcl %esi, %edx81; X86-NEXT: movl 8(%ebp), %ecx82; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload83; X86-NEXT: movl %esi, 4(%ecx)84; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload85; X86-NEXT: movl %esi, (%ecx)86; X86-NEXT: movl %eax, 8(%ecx)87; X86-NEXT: movl %edx, 12(%ecx)88; X86-NEXT: movl %ecx, %eax89; X86-NEXT: leal -12(%ebp), %esp90; X86-NEXT: popl %esi91; X86-NEXT: popl %edi92; X86-NEXT: popl %ebx93; X86-NEXT: popl %ebp94; X86-NEXT: .cfi_def_cfa %esp, 495; X86-NEXT: retl $496 %k = mul i128 %t, %u97 ret i128 %k98}99 100@aaa = external dso_local global i128101@bbb = external dso_local global i128102 103define void @PR13897() nounwind {104; X64-LABEL: PR13897:105; X64: # %bb.0: # %"0x0"106; X64-NEXT: movq bbb(%rip), %rax107; X64-NEXT: movl %eax, %ecx108; X64-NEXT: shlq $32, %rax109; X64-NEXT: orq %rcx, %rax110; X64-NEXT: movq %rax, aaa+8(%rip)111; X64-NEXT: movq %rax, aaa(%rip)112; X64-NEXT: retq113;114; X86-LABEL: PR13897:115; X86: # %bb.0: # %"0x0"116; X86-NEXT: movl bbb, %eax117; X86-NEXT: movl %eax, aaa+12118; X86-NEXT: movl %eax, aaa+8119; X86-NEXT: movl %eax, aaa+4120; X86-NEXT: movl %eax, aaa121; X86-NEXT: retl122"0x0":123 %0 = load i128, ptr @bbb124 %1 = and i128 %0, 4294967295125 %2 = shl i128 %0, 96126 %3 = mul i128 %1, 18446744078004518913127 %4 = add i128 %3, %2128 store i128 %4, ptr @aaa129 ret void130}131