brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.4 KiB · a09ec50 Raw
297 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=arm-eabi %s -o - | FileCheck %s --check-prefixes=CHECK-V43; RUN: llc -mtriple=armv6-eabi %s -o - | FileCheck %s --check-prefixes=CHECK-V6V7,CHECK-ARM-V6V7,CHECK-V64; RUN: llc -mtriple=armv7-eabi %s -o - | FileCheck %s --check-prefixes=CHECK-V6V7,CHECK-ARM-V6V7,CHECK-V75; RUN: llc -mtriple=thumb-eabi %s -o - | FileCheck %s --check-prefixes=CHECK-THUMB6; RUN: llc -mtriple=thumbv6-eabi %s -o - | FileCheck %s --check-prefixes=CHECK-THUMBV67; RUN: llc -mtriple=thumbv6t2-eabi %s -o - | FileCheck %s --check-prefixes=CHECK-V6V7,CHECK-THUMB-V6V7,CHECK-THUMBV6T28; RUN: llc -mtriple=thumbv7-eabi %s -o - | FileCheck %s --check-prefixes=CHECK-V6V7,CHECK-THUMB-V6V7,CHECK-THUMBV79; RUN: llc -mtriple=thumbv7m-eabi %s -o - | FileCheck %s --check-prefixes=CHECK-THUMBV7M10; RUN: llc -mtriple=thumbv7em-eabi %s -o - | FileCheck %s --check-prefixes=CHECK-V6V7,CHECK-THUMB-V6V7,CHECK-THUMBV7EM11 12; Next test would previously trigger an assertion responsible for verification of13; call site info state.14; RUN: llc -stop-after=if-converter -debug-entry-values -mtriple=thumbv6t2-eabi %s -o -| FileCheck %s -check-prefix=CHECK-CALLSITE15; CHECK-CALLSITE: name:  test_used_flags16; CHECK-CALLSITE: callSites:17 18define i32 @Test0(i32 %a, i32 %b, i32 %c) nounwind readnone ssp {19; CHECK-V4-LABEL: Test0:20; CHECK-V4:       @ %bb.0: @ %entry21; CHECK-V4-NEXT:    smull r3, r12, r2, r122; CHECK-V4-NEXT:    sub r0, r0, r1223; CHECK-V4-NEXT:    mov pc, lr24;25; CHECK-ARM-V6V7-LABEL: Test0:26; CHECK-ARM-V6V7:       @ %bb.0: @ %entry27; CHECK-ARM-V6V7-NEXT:    smmul r1, r2, r128; CHECK-ARM-V6V7-NEXT:    sub r0, r0, r129; CHECK-ARM-V6V7-NEXT:    bx lr30;31; CHECK-THUMB-LABEL: Test0:32; CHECK-THUMB:       @ %bb.0: @ %entry33; CHECK-THUMB-NEXT:    .save {r4, r5, r7, lr}34; CHECK-THUMB-NEXT:    push {r4, r5, r7, lr}35; CHECK-THUMB-NEXT:    movs r5, r136; CHECK-THUMB-NEXT:    movs r4, r037; CHECK-THUMB-NEXT:    asrs r1, r2, #3138; CHECK-THUMB-NEXT:    asrs r3, r5, #3139; CHECK-THUMB-NEXT:    movs r0, r240; CHECK-THUMB-NEXT:    movs r2, r541; CHECK-THUMB-NEXT:    bl __aeabi_lmul42; CHECK-THUMB-NEXT:    subs r0, r4, r143; CHECK-THUMB-NEXT:    pop {r4, r5, r7}44; CHECK-THUMB-NEXT:    pop {r1}45; CHECK-THUMB-NEXT:    bx r146;47; CHECK-THUMBV6-LABEL: Test0:48; CHECK-THUMBV6:       @ %bb.0: @ %entry49; CHECK-THUMBV6-NEXT:    .save {r4, r5, r7, lr}50; CHECK-THUMBV6-NEXT:    push {r4, r5, r7, lr}51; CHECK-THUMBV6-NEXT:    mov r5, r152; CHECK-THUMBV6-NEXT:    mov r4, r053; CHECK-THUMBV6-NEXT:    asrs r1, r2, #3154; CHECK-THUMBV6-NEXT:    asrs r3, r5, #3155; CHECK-THUMBV6-NEXT:    mov r0, r256; CHECK-THUMBV6-NEXT:    mov r2, r557; CHECK-THUMBV6-NEXT:    bl __aeabi_lmul58; CHECK-THUMBV6-NEXT:    subs r0, r4, r159; CHECK-THUMBV6-NEXT:    pop {r4, r5, r7, pc}60;61; CHECK-THUMB-V6V7-LABEL: Test0:62; CHECK-THUMB-V6V7:       @ %bb.0: @ %entry63; CHECK-THUMB-V6V7-NEXT:    smmul r1, r2, r164; CHECK-THUMB-V6V7-NEXT:    subs r0, r0, r165; CHECK-THUMB-V6V7-NEXT:    bx lr66;67; CHECK-THUMBV7M-LABEL: Test0:68; CHECK-THUMBV7M:       @ %bb.0: @ %entry69; CHECK-THUMBV7M-NEXT:    smull r1, r2, r2, r170; CHECK-THUMBV7M-NEXT:    subs r0, r0, r271; CHECK-THUMBV7M-NEXT:    bx lr72entry:73  %conv4 = zext i32 %a to i6474  %conv1 = sext i32 %b to i6475  %conv2 = sext i32 %c to i6476  %mul = mul nsw i64 %conv2, %conv177  %shr5 = lshr i64 %mul, 3278  %sub = sub nsw i64 %conv4, %shr579  %conv3 = trunc i64 %sub to i3280  ret i32 %conv381}82 83define i32 @Test1(i32 %a, i32 %b, i32 %c) {84; CHECK-V4-LABEL: Test1:85; CHECK-V4:       @ %bb.0: @ %entry86; CHECK-V4-NEXT:    smull r3, r12, r2, r187; CHECK-V4-NEXT:    rsbs r1, r3, #088; CHECK-V4-NEXT:    sbc r0, r0, r1289; CHECK-V4-NEXT:    mov pc, lr90;91; CHECK-V6V7-LABEL: Test1:92; CHECK-V6V7:       @ %bb.0: @ %entry93; CHECK-V6V7-NEXT:    smmls r0, r2, r1, r094; CHECK-V6V7-NEXT:    bx lr95;96; CHECK-THUMB-LABEL: Test1:97; CHECK-THUMB:       @ %bb.0: @ %entry98; CHECK-THUMB-NEXT:    .save {r4, r5, r7, lr}99; CHECK-THUMB-NEXT:    push {r4, r5, r7, lr}100; CHECK-THUMB-NEXT:    movs r5, r1101; CHECK-THUMB-NEXT:    movs r4, r0102; CHECK-THUMB-NEXT:    asrs r1, r2, #31103; CHECK-THUMB-NEXT:    asrs r3, r5, #31104; CHECK-THUMB-NEXT:    movs r0, r2105; CHECK-THUMB-NEXT:    movs r2, r5106; CHECK-THUMB-NEXT:    bl __aeabi_lmul107; CHECK-THUMB-NEXT:    rsbs r0, r0, #0108; CHECK-THUMB-NEXT:    sbcs r4, r1109; CHECK-THUMB-NEXT:    movs r0, r4110; CHECK-THUMB-NEXT:    pop {r4, r5, r7}111; CHECK-THUMB-NEXT:    pop {r1}112; CHECK-THUMB-NEXT:    bx r1113;114; CHECK-THUMBV6-LABEL: Test1:115; CHECK-THUMBV6:       @ %bb.0: @ %entry116; CHECK-THUMBV6-NEXT:    .save {r4, r5, r7, lr}117; CHECK-THUMBV6-NEXT:    push {r4, r5, r7, lr}118; CHECK-THUMBV6-NEXT:    mov r5, r1119; CHECK-THUMBV6-NEXT:    mov r4, r0120; CHECK-THUMBV6-NEXT:    asrs r1, r2, #31121; CHECK-THUMBV6-NEXT:    asrs r3, r5, #31122; CHECK-THUMBV6-NEXT:    mov r0, r2123; CHECK-THUMBV6-NEXT:    mov r2, r5124; CHECK-THUMBV6-NEXT:    bl __aeabi_lmul125; CHECK-THUMBV6-NEXT:    rsbs r0, r0, #0126; CHECK-THUMBV6-NEXT:    sbcs r4, r1127; CHECK-THUMBV6-NEXT:    mov r0, r4128; CHECK-THUMBV6-NEXT:    pop {r4, r5, r7, pc}129;130; CHECK-THUMBV7M-LABEL: Test1:131; CHECK-THUMBV7M:       @ %bb.0: @ %entry132; CHECK-THUMBV7M-NEXT:    smull r1, r2, r2, r1133; CHECK-THUMBV7M-NEXT:    rsbs r1, r1, #0134; CHECK-THUMBV7M-NEXT:    sbcs r0, r2135; CHECK-THUMBV7M-NEXT:    bx lr136entry:137  %conv = sext i32 %b to i64138  %conv1 = sext i32 %c to i64139  %mul = mul nsw i64 %conv1, %conv140  %conv26 = zext i32 %a to i64141  %shl = shl nuw i64 %conv26, 32142  %sub = sub nsw i64 %shl, %mul143  %shr7 = lshr i64 %sub, 32144  %conv3 = trunc i64 %shr7 to i32145  ret i32 %conv3146}147 148declare void @opaque(i32)149define void @test_used_flags(i32 %in1, i32 %in2) {150; CHECK-V4-LABEL: test_used_flags:151; CHECK-V4:       @ %bb.0:152; CHECK-V4-NEXT:    .save {r11, lr}153; CHECK-V4-NEXT:    push {r11, lr}154; CHECK-V4-NEXT:    smull r2, r3, r0, r1155; CHECK-V4-NEXT:    rsbs r0, r2, #0156; CHECK-V4-NEXT:    rscs r0, r3, #0157; CHECK-V4-NEXT:    movge r0, #42158; CHECK-V4-NEXT:    movlt r0, #56159; CHECK-V4-NEXT:    bl opaque160; CHECK-V4-NEXT:    pop {r11, lr}161; CHECK-V4-NEXT:    mov pc, lr162;163; CHECK-V6-LABEL: test_used_flags:164; CHECK-V6:       @ %bb.0: @ %common.ret165; CHECK-V6-NEXT:    .save {r11, lr}166; CHECK-V6-NEXT:    push {r11, lr}167; CHECK-V6-NEXT:    smull r1, r2, r0, r1168; CHECK-V6-NEXT:    mov r0, #56169; CHECK-V6-NEXT:    subs r1, r1, #1170; CHECK-V6-NEXT:    sbcs r1, r2, #0171; CHECK-V6-NEXT:    movlt r0, #42172; CHECK-V6-NEXT:    bl opaque173; CHECK-V6-NEXT:    pop {r11, pc}174;175; CHECK-V7-LABEL: test_used_flags:176; CHECK-V7:       @ %bb.0: @ %common.ret177; CHECK-V7-NEXT:    .save {r11, lr}178; CHECK-V7-NEXT:    push {r11, lr}179; CHECK-V7-NEXT:    smull r1, r2, r0, r1180; CHECK-V7-NEXT:    mov r0, #56181; CHECK-V7-NEXT:    subs r1, r1, #1182; CHECK-V7-NEXT:    sbcs r1, r2, #0183; CHECK-V7-NEXT:    movwlt r0, #42184; CHECK-V7-NEXT:    bl opaque185; CHECK-V7-NEXT:    pop {r11, pc}186;187; CHECK-THUMB-LABEL: test_used_flags:188; CHECK-THUMB:       @ %bb.0:189; CHECK-THUMB-NEXT:    .save {r7, lr}190; CHECK-THUMB-NEXT:    push {r7, lr}191; CHECK-THUMB-NEXT:    movs r2, r1192; CHECK-THUMB-NEXT:    asrs r1, r0, #31193; CHECK-THUMB-NEXT:    asrs r3, r2, #31194; CHECK-THUMB-NEXT:    bl __aeabi_lmul195; CHECK-THUMB-NEXT:    movs r2, #0196; CHECK-THUMB-NEXT:    rsbs r0, r0, #0197; CHECK-THUMB-NEXT:    sbcs r2, r1198; CHECK-THUMB-NEXT:    bge .LBB2_2199; CHECK-THUMB-NEXT:  @ %bb.1: @ %false200; CHECK-THUMB-NEXT:    movs r0, #56201; CHECK-THUMB-NEXT:    b .LBB2_3202; CHECK-THUMB-NEXT:  .LBB2_2: @ %true203; CHECK-THUMB-NEXT:    movs r0, #42204; CHECK-THUMB-NEXT:  .LBB2_3: @ %true205; CHECK-THUMB-NEXT:    bl opaque206; CHECK-THUMB-NEXT:    pop {r7}207; CHECK-THUMB-NEXT:    pop {r0}208; CHECK-THUMB-NEXT:    bx r0209;210; CHECK-THUMBV6-LABEL: test_used_flags:211; CHECK-THUMBV6:       @ %bb.0:212; CHECK-THUMBV6-NEXT:    .save {r7, lr}213; CHECK-THUMBV6-NEXT:    push {r7, lr}214; CHECK-THUMBV6-NEXT:    mov r2, r1215; CHECK-THUMBV6-NEXT:    asrs r1, r0, #31216; CHECK-THUMBV6-NEXT:    asrs r3, r2, #31217; CHECK-THUMBV6-NEXT:    bl __aeabi_lmul218; CHECK-THUMBV6-NEXT:    movs r2, #0219; CHECK-THUMBV6-NEXT:    rsbs r0, r0, #0220; CHECK-THUMBV6-NEXT:    sbcs r2, r1221; CHECK-THUMBV6-NEXT:    bge .LBB2_2222; CHECK-THUMBV6-NEXT:  @ %bb.1: @ %false223; CHECK-THUMBV6-NEXT:    movs r0, #56224; CHECK-THUMBV6-NEXT:    bl opaque225; CHECK-THUMBV6-NEXT:    pop {r7, pc}226; CHECK-THUMBV6-NEXT:  .LBB2_2: @ %true227; CHECK-THUMBV6-NEXT:    movs r0, #42228; CHECK-THUMBV6-NEXT:    bl opaque229; CHECK-THUMBV6-NEXT:    pop {r7, pc}230;231; CHECK-THUMBV6T2-LABEL: test_used_flags:232; CHECK-THUMBV6T2:       @ %bb.0:233; CHECK-THUMBV6T2-NEXT:    .save {r7, lr}234; CHECK-THUMBV6T2-NEXT:    push {r7, lr}235; CHECK-THUMBV6T2-NEXT:    smull r0, r1, r0, r1236; CHECK-THUMBV6T2-NEXT:    movs r2, #0237; CHECK-THUMBV6T2-NEXT:    rsbs r0, r0, #0238; CHECK-THUMBV6T2-NEXT:    sbcs.w r0, r2, r1239; CHECK-THUMBV6T2-NEXT:    ite lt240; CHECK-THUMBV6T2-NEXT:    movlt r0, #56241; CHECK-THUMBV6T2-NEXT:    movge r0, #42242; CHECK-THUMBV6T2-NEXT:    bl opaque243; CHECK-THUMBV6T2-NEXT:    pop {r7, pc}244;245; CHECK-THUMBV7-LABEL: test_used_flags:246; CHECK-THUMBV7:       @ %bb.0: @ %common.ret247; CHECK-THUMBV7-NEXT:    .save {r7, lr}248; CHECK-THUMBV7-NEXT:    push {r7, lr}249; CHECK-THUMBV7-NEXT:    smull r1, r2, r0, r1250; CHECK-THUMBV7-NEXT:    movs r0, #56251; CHECK-THUMBV7-NEXT:    subs r1, #1252; CHECK-THUMBV7-NEXT:    sbcs r1, r2, #0253; CHECK-THUMBV7-NEXT:    it lt254; CHECK-THUMBV7-NEXT:    movlt r0, #42255; CHECK-THUMBV7-NEXT:    bl opaque256; CHECK-THUMBV7-NEXT:    pop {r7, pc}257;258; CHECK-THUMBV7M-LABEL: test_used_flags:259; CHECK-THUMBV7M:       @ %bb.0: @ %common.ret260; CHECK-THUMBV7M-NEXT:    .save {r7, lr}261; CHECK-THUMBV7M-NEXT:    push {r7, lr}262; CHECK-THUMBV7M-NEXT:    smull r1, r2, r0, r1263; CHECK-THUMBV7M-NEXT:    movs r0, #56264; CHECK-THUMBV7M-NEXT:    subs r1, #1265; CHECK-THUMBV7M-NEXT:    sbcs r1, r2, #0266; CHECK-THUMBV7M-NEXT:    it lt267; CHECK-THUMBV7M-NEXT:    movlt r0, #42268; CHECK-THUMBV7M-NEXT:    bl opaque269; CHECK-THUMBV7M-NEXT:    pop {r7, pc}270;271; CHECK-THUMBV7EM-LABEL: test_used_flags:272; CHECK-THUMBV7EM:       @ %bb.0: @ %common.ret273; CHECK-THUMBV7EM-NEXT:    .save {r7, lr}274; CHECK-THUMBV7EM-NEXT:    push {r7, lr}275; CHECK-THUMBV7EM-NEXT:    smull r1, r2, r0, r1276; CHECK-THUMBV7EM-NEXT:    movs r0, #56277; CHECK-THUMBV7EM-NEXT:    subs r1, #1278; CHECK-THUMBV7EM-NEXT:    sbcs r1, r2, #0279; CHECK-THUMBV7EM-NEXT:    it lt280; CHECK-THUMBV7EM-NEXT:    movlt r0, #42281; CHECK-THUMBV7EM-NEXT:    bl opaque282; CHECK-THUMBV7EM-NEXT:    pop {r7, pc}283  %in1.64 = sext i32 %in1 to i64284  %in2.64 = sext i32 %in2 to i64285  %mul = mul nsw i64 %in1.64, %in2.64286  %tst = icmp slt i64 %mul, 1287  br i1 %tst, label %true, label %false288 289true:290  call void @opaque(i32 42)291  ret void292 293false:294  call void @opaque(i32 56)295  ret void296}297