brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.1 KiB · 9b5fa1c Raw
217 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=thumb-eabi -mattr=+v6 | FileCheck %s --check-prefixes=THUMBV63 4define { i128, i8 } @muloti_test(i128 %l, i128 %r) unnamed_addr #0 {5; THUMBV6-LABEL: muloti_test:6; THUMBV6:       @ %bb.0: @ %start7; THUMBV6-NEXT:    .save {r4, r5, r6, r7, lr}8; THUMBV6-NEXT:    push {r4, r5, r6, r7, lr}9; THUMBV6-NEXT:    .pad #6010; THUMBV6-NEXT:    sub sp, #6011; THUMBV6-NEXT:    mov r6, r312; THUMBV6-NEXT:    mov r1, r213; THUMBV6-NEXT:    str r2, [sp, #52] @ 4-byte Spill14; THUMBV6-NEXT:    mov r4, r015; THUMBV6-NEXT:    str r0, [sp, #40] @ 4-byte Spill16; THUMBV6-NEXT:    ldr r2, [sp, #88]17; THUMBV6-NEXT:    str r2, [sp, #48] @ 4-byte Spill18; THUMBV6-NEXT:    movs r5, #019; THUMBV6-NEXT:    mov r0, r120; THUMBV6-NEXT:    mov r1, r521; THUMBV6-NEXT:    mov r3, r522; THUMBV6-NEXT:    bl __aeabi_lmul23; THUMBV6-NEXT:    str r1, [sp, #28] @ 4-byte Spill24; THUMBV6-NEXT:    str r0, [r4]25; THUMBV6-NEXT:    ldr r2, [sp, #96]26; THUMBV6-NEXT:    str r2, [sp, #36] @ 4-byte Spill27; THUMBV6-NEXT:    mov r4, r628; THUMBV6-NEXT:    str r6, [sp, #56] @ 4-byte Spill29; THUMBV6-NEXT:    mov r0, r630; THUMBV6-NEXT:    mov r1, r531; THUMBV6-NEXT:    mov r3, r532; THUMBV6-NEXT:    bl __aeabi_lmul33; THUMBV6-NEXT:    str r0, [sp, #44] @ 4-byte Spill34; THUMBV6-NEXT:    mov r7, r135; THUMBV6-NEXT:    subs r0, r1, #136; THUMBV6-NEXT:    sbcs r7, r037; THUMBV6-NEXT:    ldr r0, [sp, #100]38; THUMBV6-NEXT:    str r0, [sp, #32] @ 4-byte Spill39; THUMBV6-NEXT:    mov r1, r540; THUMBV6-NEXT:    ldr r6, [sp, #52] @ 4-byte Reload41; THUMBV6-NEXT:    mov r2, r642; THUMBV6-NEXT:    mov r3, r543; THUMBV6-NEXT:    bl __aeabi_lmul44; THUMBV6-NEXT:    str r0, [sp, #24] @ 4-byte Spill45; THUMBV6-NEXT:    subs r2, r1, #146; THUMBV6-NEXT:    sbcs r1, r247; THUMBV6-NEXT:    subs r2, r4, #148; THUMBV6-NEXT:    mov r3, r449; THUMBV6-NEXT:    sbcs r3, r250; THUMBV6-NEXT:    ldr r4, [sp, #32] @ 4-byte Reload51; THUMBV6-NEXT:    subs r2, r4, #152; THUMBV6-NEXT:    sbcs r4, r253; THUMBV6-NEXT:    ands r4, r354; THUMBV6-NEXT:    orrs r4, r155; THUMBV6-NEXT:    orrs r4, r756; THUMBV6-NEXT:    ldr r0, [sp, #44] @ 4-byte Reload57; THUMBV6-NEXT:    ldr r1, [sp, #24] @ 4-byte Reload58; THUMBV6-NEXT:    adds r7, r1, r059; THUMBV6-NEXT:    ldr r0, [sp, #36] @ 4-byte Reload60; THUMBV6-NEXT:    mov r1, r561; THUMBV6-NEXT:    mov r2, r662; THUMBV6-NEXT:    mov r3, r563; THUMBV6-NEXT:    bl __aeabi_lmul64; THUMBV6-NEXT:    str r0, [sp, #24] @ 4-byte Spill65; THUMBV6-NEXT:    adds r0, r1, r766; THUMBV6-NEXT:    str r0, [sp, #20] @ 4-byte Spill67; THUMBV6-NEXT:    mov r0, r568; THUMBV6-NEXT:    adcs r0, r569; THUMBV6-NEXT:    orrs r0, r470; THUMBV6-NEXT:    str r0, [sp, #16] @ 4-byte Spill71; THUMBV6-NEXT:    ldr r0, [sp, #92]72; THUMBV6-NEXT:    str r0, [sp, #44] @ 4-byte Spill73; THUMBV6-NEXT:    ldr r7, [sp, #80]74; THUMBV6-NEXT:    mov r1, r575; THUMBV6-NEXT:    mov r2, r776; THUMBV6-NEXT:    mov r3, r577; THUMBV6-NEXT:    bl __aeabi_lmul78; THUMBV6-NEXT:    str r0, [sp, #12] @ 4-byte Spill79; THUMBV6-NEXT:    mov r4, r180; THUMBV6-NEXT:    subs r0, r1, #181; THUMBV6-NEXT:    sbcs r4, r082; THUMBV6-NEXT:    ldr r6, [sp, #84]83; THUMBV6-NEXT:    mov r0, r684; THUMBV6-NEXT:    mov r1, r585; THUMBV6-NEXT:    ldr r2, [sp, #48] @ 4-byte Reload86; THUMBV6-NEXT:    mov r3, r587; THUMBV6-NEXT:    bl __aeabi_lmul88; THUMBV6-NEXT:    str r0, [sp, #4] @ 4-byte Spill89; THUMBV6-NEXT:    subs r2, r1, #190; THUMBV6-NEXT:    sbcs r1, r291; THUMBV6-NEXT:    ldr r3, [sp, #44] @ 4-byte Reload92; THUMBV6-NEXT:    subs r2, r3, #193; THUMBV6-NEXT:    sbcs r3, r294; THUMBV6-NEXT:    str r6, [sp, #8] @ 4-byte Spill95; THUMBV6-NEXT:    subs r2, r6, #196; THUMBV6-NEXT:    sbcs r6, r297; THUMBV6-NEXT:    ands r6, r398; THUMBV6-NEXT:    orrs r6, r199; THUMBV6-NEXT:    orrs r6, r4100; THUMBV6-NEXT:    ldr r0, [sp, #12] @ 4-byte Reload101; THUMBV6-NEXT:    ldr r1, [sp, #4] @ 4-byte Reload102; THUMBV6-NEXT:    adds r0, r1, r0103; THUMBV6-NEXT:    str r0, [sp, #4] @ 4-byte Spill104; THUMBV6-NEXT:    mov r0, r7105; THUMBV6-NEXT:    mov r1, r5106; THUMBV6-NEXT:    ldr r4, [sp, #48] @ 4-byte Reload107; THUMBV6-NEXT:    mov r2, r4108; THUMBV6-NEXT:    mov r3, r5109; THUMBV6-NEXT:    bl __aeabi_lmul110; THUMBV6-NEXT:    str r0, [sp, #12] @ 4-byte Spill111; THUMBV6-NEXT:    ldr r0, [sp, #4] @ 4-byte Reload112; THUMBV6-NEXT:    adds r0, r1, r0113; THUMBV6-NEXT:    mov r1, r5114; THUMBV6-NEXT:    adcs r1, r5115; THUMBV6-NEXT:    orrs r1, r6116; THUMBV6-NEXT:    ldr r3, [sp, #36] @ 4-byte Reload117; THUMBV6-NEXT:    ldr r2, [sp, #32] @ 4-byte Reload118; THUMBV6-NEXT:    orrs r3, r2119; THUMBV6-NEXT:    subs r2, r3, #1120; THUMBV6-NEXT:    sbcs r3, r2121; THUMBV6-NEXT:    ldr r2, [sp, #8] @ 4-byte Reload122; THUMBV6-NEXT:    orrs r7, r2123; THUMBV6-NEXT:    subs r2, r7, #1124; THUMBV6-NEXT:    sbcs r7, r2125; THUMBV6-NEXT:    ands r7, r3126; THUMBV6-NEXT:    orrs r7, r1127; THUMBV6-NEXT:    ldr r1, [sp, #16] @ 4-byte Reload128; THUMBV6-NEXT:    orrs r7, r1129; THUMBV6-NEXT:    ldr r1, [sp, #24] @ 4-byte Reload130; THUMBV6-NEXT:    ldr r2, [sp, #12] @ 4-byte Reload131; THUMBV6-NEXT:    adds r1, r2, r1132; THUMBV6-NEXT:    str r1, [sp, #32] @ 4-byte Spill133; THUMBV6-NEXT:    ldr r1, [sp, #20] @ 4-byte Reload134; THUMBV6-NEXT:    adcs r0, r1135; THUMBV6-NEXT:    str r0, [sp, #36] @ 4-byte Spill136; THUMBV6-NEXT:    ldr r0, [sp, #56] @ 4-byte Reload137; THUMBV6-NEXT:    mov r1, r5138; THUMBV6-NEXT:    mov r2, r4139; THUMBV6-NEXT:    mov r3, r5140; THUMBV6-NEXT:    bl __aeabi_lmul141; THUMBV6-NEXT:    mov r4, r1142; THUMBV6-NEXT:    ldr r1, [sp, #28] @ 4-byte Reload143; THUMBV6-NEXT:    adds r6, r0, r1144; THUMBV6-NEXT:    adcs r4, r5145; THUMBV6-NEXT:    ldr r0, [sp, #52] @ 4-byte Reload146; THUMBV6-NEXT:    mov r1, r5147; THUMBV6-NEXT:    ldr r2, [sp, #44] @ 4-byte Reload148; THUMBV6-NEXT:    mov r3, r5149; THUMBV6-NEXT:    bl __aeabi_lmul150; THUMBV6-NEXT:    adds r0, r0, r6151; THUMBV6-NEXT:    ldr r2, [sp, #40] @ 4-byte Reload152; THUMBV6-NEXT:    str r0, [r2, #4]153; THUMBV6-NEXT:    adcs r1, r5154; THUMBV6-NEXT:    adds r0, r4, r1155; THUMBV6-NEXT:    str r0, [sp, #28] @ 4-byte Spill156; THUMBV6-NEXT:    mov r6, r5157; THUMBV6-NEXT:    adcs r6, r5158; THUMBV6-NEXT:    ldr r0, [sp, #56] @ 4-byte Reload159; THUMBV6-NEXT:    mov r1, r5160; THUMBV6-NEXT:    ldr r4, [sp, #44] @ 4-byte Reload161; THUMBV6-NEXT:    mov r2, r4162; THUMBV6-NEXT:    mov r3, r5163; THUMBV6-NEXT:    bl __aeabi_lmul164; THUMBV6-NEXT:    ldr r2, [sp, #28] @ 4-byte Reload165; THUMBV6-NEXT:    adds r0, r0, r2166; THUMBV6-NEXT:    str r0, [sp, #28] @ 4-byte Spill167; THUMBV6-NEXT:    adcs r1, r6168; THUMBV6-NEXT:    str r1, [sp, #24] @ 4-byte Spill169; THUMBV6-NEXT:    ldr r0, [sp, #48] @ 4-byte Reload170; THUMBV6-NEXT:    mov r1, r4171; THUMBV6-NEXT:    mov r2, r5172; THUMBV6-NEXT:    mov r3, r5173; THUMBV6-NEXT:    bl __aeabi_lmul174; THUMBV6-NEXT:    mov r6, r0175; THUMBV6-NEXT:    mov r4, r1176; THUMBV6-NEXT:    ldr r0, [sp, #52] @ 4-byte Reload177; THUMBV6-NEXT:    ldr r1, [sp, #56] @ 4-byte Reload178; THUMBV6-NEXT:    mov r2, r5179; THUMBV6-NEXT:    mov r3, r5180; THUMBV6-NEXT:    bl __aeabi_lmul181; THUMBV6-NEXT:    adds r0, r0, r6182; THUMBV6-NEXT:    adcs r1, r4183; THUMBV6-NEXT:    ldr r2, [sp, #28] @ 4-byte Reload184; THUMBV6-NEXT:    adds r0, r2, r0185; THUMBV6-NEXT:    ldr r2, [sp, #24] @ 4-byte Reload186; THUMBV6-NEXT:    adcs r1, r2187; THUMBV6-NEXT:    ldr r2, [sp, #32] @ 4-byte Reload188; THUMBV6-NEXT:    adds r0, r0, r2189; THUMBV6-NEXT:    ldr r2, [sp, #40] @ 4-byte Reload190; THUMBV6-NEXT:    str r0, [r2, #8]191; THUMBV6-NEXT:    ldr r0, [sp, #36] @ 4-byte Reload192; THUMBV6-NEXT:    adcs r1, r0193; THUMBV6-NEXT:    str r1, [r2, #12]194; THUMBV6-NEXT:    adcs r5, r5195; THUMBV6-NEXT:    orrs r5, r7196; THUMBV6-NEXT:    movs r0, #1197; THUMBV6-NEXT:    ands r0, r5198; THUMBV6-NEXT:    strb r0, [r2, #16]199; THUMBV6-NEXT:    add sp, #60200; THUMBV6-NEXT:    pop {r4, r5, r6, r7, pc}201start:202  %0 = tail call { i128, i1 } @llvm.umul.with.overflow.i128(i128 %l, i128 %r) #2203  %1 = extractvalue { i128, i1 } %0, 0204  %2 = extractvalue { i128, i1 } %0, 1205  %3 = zext i1 %2 to i8206  %4 = insertvalue { i128, i8 } undef, i128 %1, 0207  %5 = insertvalue { i128, i8 } %4, i8 %3, 1208  ret { i128, i8 } %5209}210 211; Function Attrs: nounwind readnone speculatable212declare { i128, i1 } @llvm.umul.with.overflow.i128(i128, i128) #1213 214attributes #0 = { nounwind readnone uwtable }215attributes #1 = { nounwind readnone speculatable }216attributes #2 = { nounwind }217