142 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=thumbv7-unknown-none-gnueabi | FileCheck %s --check-prefixes=THUMBV73 4define { i128, i8 } @muloti_test(i128 %l, i128 %r) unnamed_addr #0 {5; THUMBV7-LABEL: muloti_test:6; THUMBV7: @ %bb.0: @ %start7; THUMBV7-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}8; THUMBV7-NEXT: push.w {r4, r5, r6, r7, r8, r9, r10, r11, lr}9; THUMBV7-NEXT: .pad #4410; THUMBV7-NEXT: sub sp, #4411; THUMBV7-NEXT: ldr.w r8, [sp, #88]12; THUMBV7-NEXT: mov r9, r013; THUMBV7-NEXT: ldr r7, [sp, #96]14; THUMBV7-NEXT: ldr.w lr, [sp, #100]15; THUMBV7-NEXT: umull r0, r5, r2, r816; THUMBV7-NEXT: ldr r4, [sp, #80]17; THUMBV7-NEXT: str r0, [sp, #32] @ 4-byte Spill18; THUMBV7-NEXT: umull r1, r0, r3, r719; THUMBV7-NEXT: str r0, [sp, #4] @ 4-byte Spill20; THUMBV7-NEXT: umull r0, r11, lr, r221; THUMBV7-NEXT: str r1, [sp, #20] @ 4-byte Spill22; THUMBV7-NEXT: ldr r1, [sp, #92]23; THUMBV7-NEXT: str r0, [sp] @ 4-byte Spill24; THUMBV7-NEXT: umull r0, r10, r7, r225; THUMBV7-NEXT: mov r7, r126; THUMBV7-NEXT: umull r6, r12, r1, r427; THUMBV7-NEXT: str r0, [sp, #40] @ 4-byte Spill28; THUMBV7-NEXT: ldr r0, [sp, #84]29; THUMBV7-NEXT: str r6, [sp, #24] @ 4-byte Spill30; THUMBV7-NEXT: umull r6, r1, r0, r831; THUMBV7-NEXT: str r6, [sp, #16] @ 4-byte Spill32; THUMBV7-NEXT: umull r6, r2, r2, r733; THUMBV7-NEXT: mov r7, r434; THUMBV7-NEXT: strd r6, r2, [sp, #8] @ 8-byte Folded Spill35; THUMBV7-NEXT: umull r2, r6, r4, r836; THUMBV7-NEXT: str r2, [sp, #36] @ 4-byte Spill37; THUMBV7-NEXT: ldr r2, [sp, #32] @ 4-byte Reload38; THUMBV7-NEXT: str r6, [sp, #28] @ 4-byte Spill39; THUMBV7-NEXT: movs r6, #040; THUMBV7-NEXT: str.w r2, [r9]41; THUMBV7-NEXT: umlal r5, r6, r3, r842; THUMBV7-NEXT: ldr r2, [sp, #20] @ 4-byte Reload43; THUMBV7-NEXT: ldr r4, [sp] @ 4-byte Reload44; THUMBV7-NEXT: add r4, r245; THUMBV7-NEXT: adds.w r2, r10, r446; THUMBV7-NEXT: str r2, [sp, #20] @ 4-byte Spill47; THUMBV7-NEXT: mov.w r2, #048; THUMBV7-NEXT: adc r2, r2, #049; THUMBV7-NEXT: cmp.w r12, #050; THUMBV7-NEXT: str r2, [sp, #32] @ 4-byte Spill51; THUMBV7-NEXT: it ne52; THUMBV7-NEXT: movne.w r12, #153; THUMBV7-NEXT: cmp r1, #054; THUMBV7-NEXT: ldr r2, [sp, #96]55; THUMBV7-NEXT: it ne56; THUMBV7-NEXT: movne r1, #157; THUMBV7-NEXT: orrs.w r10, r7, r058; THUMBV7-NEXT: it ne59; THUMBV7-NEXT: movne.w r10, #160; THUMBV7-NEXT: orrs.w r7, r2, lr61; THUMBV7-NEXT: ldr r2, [sp, #92]62; THUMBV7-NEXT: it ne63; THUMBV7-NEXT: movne r7, #164; THUMBV7-NEXT: cmp r0, #065; THUMBV7-NEXT: it ne66; THUMBV7-NEXT: movne r0, #167; THUMBV7-NEXT: cmp r2, #068; THUMBV7-NEXT: mov r4, r269; THUMBV7-NEXT: mov r8, r270; THUMBV7-NEXT: it ne71; THUMBV7-NEXT: movne r4, #172; THUMBV7-NEXT: ldr r2, [sp, #8] @ 4-byte Reload73; THUMBV7-NEXT: ands r0, r474; THUMBV7-NEXT: movs r4, #075; THUMBV7-NEXT: adds r5, r5, r276; THUMBV7-NEXT: str.w r5, [r9, #4]77; THUMBV7-NEXT: orr.w r0, r0, r178; THUMBV7-NEXT: ldr r1, [sp, #24] @ 4-byte Reload79; THUMBV7-NEXT: ldr r2, [sp, #16] @ 4-byte Reload80; THUMBV7-NEXT: and.w r5, r10, r781; THUMBV7-NEXT: orr.w r0, r0, r1282; THUMBV7-NEXT: mov.w r12, #083; THUMBV7-NEXT: add r1, r284; THUMBV7-NEXT: ldr r2, [sp, #12] @ 4-byte Reload85; THUMBV7-NEXT: adcs r2, r686; THUMBV7-NEXT: ldr r6, [sp, #28] @ 4-byte Reload87; THUMBV7-NEXT: adc r7, r4, #088; THUMBV7-NEXT: adds r1, r1, r689; THUMBV7-NEXT: umlal r2, r7, r3, r890; THUMBV7-NEXT: adc r4, r4, #091; THUMBV7-NEXT: orrs r0, r492; THUMBV7-NEXT: orrs r0, r593; THUMBV7-NEXT: ldrd r5, r4, [sp, #36] @ 8-byte Folded Reload94; THUMBV7-NEXT: adds r5, r5, r495; THUMBV7-NEXT: ldr r4, [sp, #20] @ 4-byte Reload96; THUMBV7-NEXT: adcs r1, r497; THUMBV7-NEXT: ldr r4, [sp, #4] @ 4-byte Reload98; THUMBV7-NEXT: cmp r4, #099; THUMBV7-NEXT: it ne100; THUMBV7-NEXT: movne r4, #1101; THUMBV7-NEXT: cmp r3, #0102; THUMBV7-NEXT: it ne103; THUMBV7-NEXT: movne r3, #1104; THUMBV7-NEXT: cmp.w lr, #0105; THUMBV7-NEXT: it ne106; THUMBV7-NEXT: movne.w lr, #1107; THUMBV7-NEXT: cmp.w r11, #0108; THUMBV7-NEXT: it ne109; THUMBV7-NEXT: movne.w r11, #1110; THUMBV7-NEXT: adds r2, r2, r5111; THUMBV7-NEXT: and.w r3, r3, lr112; THUMBV7-NEXT: str.w r2, [r9, #8]113; THUMBV7-NEXT: adcs r1, r7114; THUMBV7-NEXT: str.w r1, [r9, #12]115; THUMBV7-NEXT: orr.w r1, r3, r11116; THUMBV7-NEXT: ldr r2, [sp, #32] @ 4-byte Reload117; THUMBV7-NEXT: orr.w r1, r1, r4118; THUMBV7-NEXT: orr.w r1, r1, r2119; THUMBV7-NEXT: orr.w r0, r0, r1120; THUMBV7-NEXT: adc r1, r12, #0121; THUMBV7-NEXT: orrs r0, r1122; THUMBV7-NEXT: and r0, r0, #1123; THUMBV7-NEXT: strb.w r0, [r9, #16]124; THUMBV7-NEXT: add sp, #44125; THUMBV7-NEXT: pop.w {r4, r5, r6, r7, r8, r9, r10, r11, pc}126start:127 %0 = tail call { i128, i1 } @llvm.umul.with.overflow.i128(i128 %l, i128 %r) #2128 %1 = extractvalue { i128, i1 } %0, 0129 %2 = extractvalue { i128, i1 } %0, 1130 %3 = zext i1 %2 to i8131 %4 = insertvalue { i128, i8 } undef, i128 %1, 0132 %5 = insertvalue { i128, i8 } %4, i8 %3, 1133 ret { i128, i8 } %5134}135 136; Function Attrs: nounwind readnone speculatable137declare { i128, i1 } @llvm.umul.with.overflow.i128(i128, i128) #1138 139attributes #0 = { nounwind readnone uwtable }140attributes #1 = { nounwind readnone speculatable }141attributes #2 = { nounwind }142