brintos

brintos / llvm-project-archived public Read only

0
0
Text · 29.2 KiB · 18732ae Raw
641 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 62; RUN: llc -verify-machineinstrs < %s | FileCheck %s3 4; This test recreates a regalloc crash reported in5; https://github.com/llvm/llvm-project/issues/1641816; When rematting an instruction we need to make sure to constrain the newly7; allocated register to both the rematted def's reg class and the use's reg8; class.9 10target triple = "aarch64-unknown-linux-gnu"11 12@var_32 = external global i1613@var_35 = external global i6414@var_39 = external global i6415@var_46 = external global i6416@var_50 = external global i3217 18define void @f(i1 %var_0, i16 %var_1, i64 %var_2, i8 %var_3, i16 %var_4, i1 %var_5, i32 %var_6, i32 %var_7, i8 %var_10, i64 %var_11, i8 %var_14, i32 %var_15, i64 %var_16, ptr %arr_3, ptr %arr_4, ptr %arr_6, ptr %arr_7, ptr %arr_12, ptr %arr_13, ptr %arr_19, i64 %mul, i64 %conv35, i64 %idxprom138.us16, i8 %0, i8 %1, ptr %invariant.gep875.us) #0 {19; CHECK-LABEL: f:20; CHECK:       // %bb.0: // %entry21; CHECK-NEXT:    sub sp, sp, #24022; CHECK-NEXT:    str x30, [sp, #144] // 8-byte Spill23; CHECK-NEXT:    stp x28, x27, [sp, #160] // 16-byte Folded Spill24; CHECK-NEXT:    stp x26, x25, [sp, #176] // 16-byte Folded Spill25; CHECK-NEXT:    stp x24, x23, [sp, #192] // 16-byte Folded Spill26; CHECK-NEXT:    stp x22, x21, [sp, #208] // 16-byte Folded Spill27; CHECK-NEXT:    stp x20, x19, [sp, #224] // 16-byte Folded Spill28; CHECK-NEXT:    str w6, [sp, #20] // 4-byte Spill29; CHECK-NEXT:    str w4, [sp, #72] // 4-byte Spill30; CHECK-NEXT:    str w3, [sp, #112] // 4-byte Spill31; CHECK-NEXT:    str w5, [sp, #36] // 4-byte Spill32; CHECK-NEXT:    tbz w5, #0, .LBB0_4333; CHECK-NEXT:  // %bb.1: // %for.body41.lr.ph34; CHECK-NEXT:    ldr x4, [sp, #312]35; CHECK-NEXT:    ldr x14, [sp, #280]36; CHECK-NEXT:    tbz w0, #0, .LBB0_4237; CHECK-NEXT:  // %bb.2: // %for.body41.us.preheader38; CHECK-NEXT:    ldrb w8, [sp, #368]39; CHECK-NEXT:    ldrb w12, [sp, #256]40; CHECK-NEXT:    ldr w26, [sp, #264]41; CHECK-NEXT:    adrp x20, :got:var_5042; CHECK-NEXT:    mov x28, #-1 // =0xffffffffffffffff43; CHECK-NEXT:    mov w21, #36006 // =0x8ca644; CHECK-NEXT:    ldr x11, [sp, #376]45; CHECK-NEXT:    ldrb w13, [sp, #360]46; CHECK-NEXT:    ldp x17, x16, [sp, #296]47; CHECK-NEXT:    mov w22, #1 // =0x148; CHECK-NEXT:    add x27, x14, #12049; CHECK-NEXT:    ldr x18, [sp, #288]50; CHECK-NEXT:    ldr x7, [sp, #272]51; CHECK-NEXT:    ldr x5, [sp, #248]52; CHECK-NEXT:    mov x10, xzr53; CHECK-NEXT:    mov w23, wzr54; CHECK-NEXT:    mov w30, wzr55; CHECK-NEXT:    ldrb w19, [sp, #240]56; CHECK-NEXT:    mov w25, wzr57; CHECK-NEXT:    mov x24, xzr58; CHECK-NEXT:    str w8, [sp, #108] // 4-byte Spill59; CHECK-NEXT:    mov x3, x2660; CHECK-NEXT:    ldp x9, x8, [sp, #344]61; CHECK-NEXT:    str w12, [sp, #92] // 4-byte Spill62; CHECK-NEXT:    mov w12, #1 // =0x163; CHECK-NEXT:    bic w12, w12, w064; CHECK-NEXT:    str w12, [sp, #76] // 4-byte Spill65; CHECK-NEXT:    mov w12, #48 // =0x3066; CHECK-NEXT:    str x9, [sp, #136] // 8-byte Spill67; CHECK-NEXT:    ldp x9, x15, [sp, #328]68; CHECK-NEXT:    madd x8, x8, x12, x969; CHECK-NEXT:    str x8, [sp, #64] // 8-byte Spill70; CHECK-NEXT:    add x8, x26, w26, uxtw #171; CHECK-NEXT:    ldr x20, [x20, :got_lo12:var_50]72; CHECK-NEXT:    str x26, [sp, #96] // 8-byte Spill73; CHECK-NEXT:    str x14, [sp, #152] // 8-byte Spill74; CHECK-NEXT:    lsl x6, x8, #375; CHECK-NEXT:    add x8, x14, #12076; CHECK-NEXT:    str x4, [sp, #24] // 8-byte Spill77; CHECK-NEXT:    str w19, [sp, #16] // 4-byte Spill78; CHECK-NEXT:    str x8, [sp, #80] // 8-byte Spill79; CHECK-NEXT:    b .LBB0_480; CHECK-NEXT:    .p2align 5, , 1681; CHECK-NEXT:  .LBB0_3: // in Loop: Header=BB0_4 Depth=182; CHECK-NEXT:    ldr w19, [sp, #16] // 4-byte Reload83; CHECK-NEXT:    ldr x24, [sp, #40] // 8-byte Reload84; CHECK-NEXT:    ldr x14, [sp, #152] // 8-byte Reload85; CHECK-NEXT:    mov w23, #1 // =0x186; CHECK-NEXT:    mov w30, #1 // =0x187; CHECK-NEXT:    mov w25, w1988; CHECK-NEXT:  .LBB0_4: // %for.body41.us89; CHECK-NEXT:    // =>This Loop Header: Depth=190; CHECK-NEXT:    // Child Loop BB0_6 Depth 291; CHECK-NEXT:    // Child Loop BB0_8 Depth 392; CHECK-NEXT:    // Child Loop BB0_10 Depth 493; CHECK-NEXT:    // Child Loop BB0_11 Depth 594; CHECK-NEXT:    // Child Loop BB0_28 Depth 595; CHECK-NEXT:    // Child Loop BB0_39 Depth 596; CHECK-NEXT:    ldr w8, [sp, #20] // 4-byte Reload97; CHECK-NEXT:    mov x12, x2498; CHECK-NEXT:    str x24, [sp, #48] // 8-byte Spill99; CHECK-NEXT:    str w8, [x14]100; CHECK-NEXT:    mov w8, #1 // =0x1101; CHECK-NEXT:    strb w19, [x14]102; CHECK-NEXT:    b .LBB0_6103; CHECK-NEXT:    .p2align 5, , 16104; CHECK-NEXT:  .LBB0_5: // %for.cond.cleanup93.us105; CHECK-NEXT:    // in Loop: Header=BB0_6 Depth=2106; CHECK-NEXT:    ldr w9, [sp, #36] // 4-byte Reload107; CHECK-NEXT:    ldr x4, [sp, #24] // 8-byte Reload108; CHECK-NEXT:    ldp x24, x12, [sp, #48] // 16-byte Folded Reload109; CHECK-NEXT:    mov x22, xzr110; CHECK-NEXT:    mov w25, wzr111; CHECK-NEXT:    mov w8, wzr112; CHECK-NEXT:    tbz w9, #0, .LBB0_3113; CHECK-NEXT:  .LBB0_6: // %for.body67.us114; CHECK-NEXT:    // Parent Loop BB0_4 Depth=1115; CHECK-NEXT:    // => This Loop Header: Depth=2116; CHECK-NEXT:    // Child Loop BB0_8 Depth 3117; CHECK-NEXT:    // Child Loop BB0_10 Depth 4118; CHECK-NEXT:    // Child Loop BB0_11 Depth 5119; CHECK-NEXT:    // Child Loop BB0_28 Depth 5120; CHECK-NEXT:    // Child Loop BB0_39 Depth 5121; CHECK-NEXT:    str x12, [sp, #40] // 8-byte Spill122; CHECK-NEXT:    cmn x24, #30123; CHECK-NEXT:    mov x12, #-30 // =0xffffffffffffffe2124; CHECK-NEXT:    add x19, x4, w8, sxtw #2125; CHECK-NEXT:    mov x9, xzr126; CHECK-NEXT:    csel x12, x24, x12, lo127; CHECK-NEXT:    mov w4, w30128; CHECK-NEXT:    str x12, [sp, #56] // 8-byte Spill129; CHECK-NEXT:    b .LBB0_8130; CHECK-NEXT:    .p2align 5, , 16131; CHECK-NEXT:  .LBB0_7: // %for.cond.cleanup98.us132; CHECK-NEXT:    // in Loop: Header=BB0_8 Depth=3133; CHECK-NEXT:    ldr w4, [sp, #72] // 4-byte Reload134; CHECK-NEXT:    ldr w23, [sp, #128] // 4-byte Reload135; CHECK-NEXT:    mov w9, #1 // =0x1136; CHECK-NEXT:    mov x22, xzr137; CHECK-NEXT:    tbnz w0, #0, .LBB0_5138; CHECK-NEXT:  .LBB0_8: // %for.cond95.preheader.us139; CHECK-NEXT:    // Parent Loop BB0_4 Depth=1140; CHECK-NEXT:    // Parent Loop BB0_6 Depth=2141; CHECK-NEXT:    // => This Loop Header: Depth=3142; CHECK-NEXT:    // Child Loop BB0_10 Depth 4143; CHECK-NEXT:    // Child Loop BB0_11 Depth 5144; CHECK-NEXT:    // Child Loop BB0_28 Depth 5145; CHECK-NEXT:    // Child Loop BB0_39 Depth 5146; CHECK-NEXT:    ldr x8, [sp, #64] // 8-byte Reload147; CHECK-NEXT:    mov w14, #1152 // =0x480148; CHECK-NEXT:    mov w24, #1 // =0x1149; CHECK-NEXT:    mov w12, wzr150; CHECK-NEXT:    str wzr, [sp, #132] // 4-byte Spill151; CHECK-NEXT:    mov w30, w4152; CHECK-NEXT:    madd x8, x9, x14, x8153; CHECK-NEXT:    mov w14, #1 // =0x1154; CHECK-NEXT:    str x8, [sp, #120] // 8-byte Spill155; CHECK-NEXT:    add x8, x9, x9, lsl #1156; CHECK-NEXT:    lsl x26, x8, #4157; CHECK-NEXT:    sxtb w8, w23158; CHECK-NEXT:    mov w23, w25159; CHECK-NEXT:    str w8, [sp, #116] // 4-byte Spill160; CHECK-NEXT:    b .LBB0_10161; CHECK-NEXT:    .p2align 5, , 16162; CHECK-NEXT:  .LBB0_9: // %for.cond510.preheader.us163; CHECK-NEXT:    // in Loop: Header=BB0_10 Depth=4164; CHECK-NEXT:    ldr w23, [sp, #92] // 4-byte Reload165; CHECK-NEXT:    mov x22, x8166; CHECK-NEXT:    ldr x3, [sp, #96] // 8-byte Reload167; CHECK-NEXT:    ldr x27, [sp, #80] // 8-byte Reload168; CHECK-NEXT:    mov x28, #-1 // =0xffffffffffffffff169; CHECK-NEXT:    mov x14, xzr170; CHECK-NEXT:    ldr w8, [sp, #76] // 4-byte Reload171; CHECK-NEXT:    tbz w8, #31, .LBB0_7172; CHECK-NEXT:  .LBB0_10: // %for.body99.us173; CHECK-NEXT:    // Parent Loop BB0_4 Depth=1174; CHECK-NEXT:    // Parent Loop BB0_6 Depth=2175; CHECK-NEXT:    // Parent Loop BB0_8 Depth=3176; CHECK-NEXT:    // => This Loop Header: Depth=4177; CHECK-NEXT:    // Child Loop BB0_11 Depth 5178; CHECK-NEXT:    // Child Loop BB0_28 Depth 5179; CHECK-NEXT:    // Child Loop BB0_39 Depth 5180; CHECK-NEXT:    ldr w8, [sp, #116] // 4-byte Reload181; CHECK-NEXT:    and w8, w8, w8, asr #31182; CHECK-NEXT:    str w8, [sp, #128] // 4-byte Spill183; CHECK-NEXT:    .p2align 5, , 16184; CHECK-NEXT:  .LBB0_11: // %for.body113.us185; CHECK-NEXT:    // Parent Loop BB0_4 Depth=1186; CHECK-NEXT:    // Parent Loop BB0_6 Depth=2187; CHECK-NEXT:    // Parent Loop BB0_8 Depth=3188; CHECK-NEXT:    // Parent Loop BB0_10 Depth=4189; CHECK-NEXT:    // => This Inner Loop Header: Depth=5190; CHECK-NEXT:    tbnz w0, #0, .LBB0_11191; CHECK-NEXT:  // %bb.12: // %for.cond131.preheader.us192; CHECK-NEXT:    // in Loop: Header=BB0_10 Depth=4193; CHECK-NEXT:    ldr w8, [sp, #112] // 4-byte Reload194; CHECK-NEXT:    mov w4, #1 // =0x1195; CHECK-NEXT:    strb w8, [x18]196; CHECK-NEXT:    ldr x8, [sp, #120] // 8-byte Reload197; CHECK-NEXT:    ldrh w8, [x8]198; CHECK-NEXT:    cbnz w4, .LBB0_14199; CHECK-NEXT:  // %bb.13: // %cond.true146.us200; CHECK-NEXT:    // in Loop: Header=BB0_10 Depth=4201; CHECK-NEXT:    ldrsb w4, [x27, x3]202; CHECK-NEXT:    b .LBB0_15203; CHECK-NEXT:    .p2align 5, , 16204; CHECK-NEXT:  .LBB0_14: // in Loop: Header=BB0_10 Depth=4205; CHECK-NEXT:    mov w4, wzr206; CHECK-NEXT:  .LBB0_15: // %cond.end154.us207; CHECK-NEXT:    // in Loop: Header=BB0_10 Depth=4208; CHECK-NEXT:    mov w25, #18984 // =0x4a28209; CHECK-NEXT:    mul w8, w8, w25210; CHECK-NEXT:    and w8, w8, #0xfff8211; CHECK-NEXT:    lsl w8, w8, w4212; CHECK-NEXT:    cbz w8, .LBB0_17213; CHECK-NEXT:  // %bb.16: // %if.then.us214; CHECK-NEXT:    // in Loop: Header=BB0_10 Depth=4215; CHECK-NEXT:    str wzr, [sp, #132] // 4-byte Spill216; CHECK-NEXT:    str wzr, [x18]217; CHECK-NEXT:  .LBB0_17: // %if.end.us218; CHECK-NEXT:    // in Loop: Header=BB0_10 Depth=4219; CHECK-NEXT:    ldr w8, [sp, #108] // 4-byte Reload220; CHECK-NEXT:    mov w4, #18984 // =0x4a28221; CHECK-NEXT:    mov w25, w23222; CHECK-NEXT:    strb w8, [x18]223; CHECK-NEXT:    ldrsb w8, [x27, x3]224; CHECK-NEXT:    lsl w8, w4, w8225; CHECK-NEXT:    mov x4, #-18403 // =0xffffffffffffb81d226; CHECK-NEXT:    movk x4, #58909, lsl #16227; CHECK-NEXT:    cbz w8, .LBB0_19228; CHECK-NEXT:  // %bb.18: // %if.then.us.2229; CHECK-NEXT:    // in Loop: Header=BB0_10 Depth=4230; CHECK-NEXT:    str wzr, [sp, #132] // 4-byte Spill231; CHECK-NEXT:    strb wzr, [x18]232; CHECK-NEXT:  .LBB0_19: // %if.then.us.5233; CHECK-NEXT:    // in Loop: Header=BB0_10 Depth=4234; CHECK-NEXT:    ldr w23, [sp, #132] // 4-byte Reload235; CHECK-NEXT:    mov w8, #29625 // =0x73b9236; CHECK-NEXT:    movk w8, #21515, lsl #16237; CHECK-NEXT:    cmp w23, w8238; CHECK-NEXT:    csel w23, w23, w8, lt239; CHECK-NEXT:    str w23, [sp, #132] // 4-byte Spill240; CHECK-NEXT:    tbz w0, #0, .LBB0_21241; CHECK-NEXT:  // %bb.20: // in Loop: Header=BB0_10 Depth=4242; CHECK-NEXT:    mov w8, wzr243; CHECK-NEXT:    b .LBB0_22244; CHECK-NEXT:    .p2align 5, , 16245; CHECK-NEXT:  .LBB0_21: // %cond.true146.us.7246; CHECK-NEXT:    // in Loop: Header=BB0_10 Depth=4247; CHECK-NEXT:    ldrsb w8, [x27, x3]248; CHECK-NEXT:  .LBB0_22: // %cond.end154.us.7249; CHECK-NEXT:    // in Loop: Header=BB0_10 Depth=4250; CHECK-NEXT:    mov w23, #18984 // =0x4a28251; CHECK-NEXT:    mov w3, #149 // =0x95252; CHECK-NEXT:    lsl w8, w23, w8253; CHECK-NEXT:    cbz w8, .LBB0_24254; CHECK-NEXT:  // %bb.23: // %if.then.us.7255; CHECK-NEXT:    // in Loop: Header=BB0_10 Depth=4256; CHECK-NEXT:    ldr x8, [sp, #152] // 8-byte Reload257; CHECK-NEXT:    str wzr, [sp, #132] // 4-byte Spill258; CHECK-NEXT:    str wzr, [x8]259; CHECK-NEXT:  .LBB0_24: // %if.end.us.7260; CHECK-NEXT:    // in Loop: Header=BB0_10 Depth=4261; CHECK-NEXT:    mov x23, xzr262; CHECK-NEXT:    b .LBB0_28263; CHECK-NEXT:    .p2align 5, , 16264; CHECK-NEXT:  .LBB0_25: // %cond.true331.us265; CHECK-NEXT:    // in Loop: Header=BB0_28 Depth=5266; CHECK-NEXT:    ldrsb w4, [x10]267; CHECK-NEXT:  .LBB0_26: // %cond.end345.us268; CHECK-NEXT:    // in Loop: Header=BB0_28 Depth=5269; CHECK-NEXT:    strh w4, [x18]270; CHECK-NEXT:    mul x4, x22, x28271; CHECK-NEXT:    adrp x22, :got:var_46272; CHECK-NEXT:    mov x8, xzr273; CHECK-NEXT:    ldr x22, [x22, :got_lo12:var_46]274; CHECK-NEXT:    str x4, [x22]275; CHECK-NEXT:    mov x4, #-18403 // =0xffffffffffffb81d276; CHECK-NEXT:    movk x4, #58909, lsl #16277; CHECK-NEXT:  .LBB0_27: // %for.inc371.us278; CHECK-NEXT:    // in Loop: Header=BB0_28 Depth=5279; CHECK-NEXT:    mov w22, #-18978 // =0xffffb5de280; CHECK-NEXT:    orr x23, x23, #0x1281; CHECK-NEXT:    mov x24, xzr282; CHECK-NEXT:    mul w12, w12, w22283; CHECK-NEXT:    mov x22, x5284; CHECK-NEXT:    tbz w0, #0, .LBB0_36285; CHECK-NEXT:  .LBB0_28: // %for.body194.us286; CHECK-NEXT:    // Parent Loop BB0_4 Depth=1287; CHECK-NEXT:    // Parent Loop BB0_6 Depth=2288; CHECK-NEXT:    // Parent Loop BB0_8 Depth=3289; CHECK-NEXT:    // Parent Loop BB0_10 Depth=4290; CHECK-NEXT:    // => This Inner Loop Header: Depth=5291; CHECK-NEXT:    cbnz wzr, .LBB0_30292; CHECK-NEXT:  // %bb.29: // %if.then222.us293; CHECK-NEXT:    // in Loop: Header=BB0_28 Depth=5294; CHECK-NEXT:    adrp x27, :got:var_32295; CHECK-NEXT:    ldur w8, [x19, #-12]296; CHECK-NEXT:    ldr x27, [x27, :got_lo12:var_32]297; CHECK-NEXT:    strh w8, [x27]298; CHECK-NEXT:    sxtb w8, w25299; CHECK-NEXT:    bic w25, w8, w8, asr #31300; CHECK-NEXT:    b .LBB0_31301; CHECK-NEXT:    .p2align 5, , 16302; CHECK-NEXT:  .LBB0_30: // in Loop: Header=BB0_28 Depth=5303; CHECK-NEXT:    mov w25, wzr304; CHECK-NEXT:  .LBB0_31: // %if.end239.us305; CHECK-NEXT:    // in Loop: Header=BB0_28 Depth=5306; CHECK-NEXT:    strb w3, [x16]307; CHECK-NEXT:    tst w13, #0xff308; CHECK-NEXT:    b.eq .LBB0_33309; CHECK-NEXT:  // %bb.32: // %if.then254.us310; CHECK-NEXT:    // in Loop: Header=BB0_28 Depth=5311; CHECK-NEXT:    ldrh w8, [x26, x14, lsl #1]312; CHECK-NEXT:    adrp x27, :got:var_35313; CHECK-NEXT:    ldr x27, [x27, :got_lo12:var_35]314; CHECK-NEXT:    cmp w8, #0315; CHECK-NEXT:    csel x8, xzr, x7, eq316; CHECK-NEXT:    str x8, [x27]317; CHECK-NEXT:    strh w1, [x17]318; CHECK-NEXT:  .LBB0_33: // %if.end282.us319; CHECK-NEXT:    // in Loop: Header=BB0_28 Depth=5320; CHECK-NEXT:    orr x27, x24, x4321; CHECK-NEXT:    adrp x8, :got:var_39322; CHECK-NEXT:    str x27, [x18]323; CHECK-NEXT:    ldr x8, [x8, :got_lo12:var_39]324; CHECK-NEXT:    str x10, [x8]325; CHECK-NEXT:    ldrb w8, [x6, x9]326; CHECK-NEXT:    str x8, [x18]327; CHECK-NEXT:    mov w8, #1 // =0x1328; CHECK-NEXT:    cbnz x2, .LBB0_27329; CHECK-NEXT:  // %bb.34: // %if.then327.us330; CHECK-NEXT:    // in Loop: Header=BB0_28 Depth=5331; CHECK-NEXT:    cbz w8, .LBB0_25332; CHECK-NEXT:  // %bb.35: // in Loop: Header=BB0_28 Depth=5333; CHECK-NEXT:    mov w4, wzr334; CHECK-NEXT:    b .LBB0_26335; CHECK-NEXT:    .p2align 5, , 16336; CHECK-NEXT:  .LBB0_36: // %for.cond376.preheader.us337; CHECK-NEXT:    // in Loop: Header=BB0_10 Depth=4338; CHECK-NEXT:    mov w3, #1152 // =0x480339; CHECK-NEXT:    mov x22, xzr340; CHECK-NEXT:    mov w4, wzr341; CHECK-NEXT:    mov x24, x27342; CHECK-NEXT:    lsl x23, x14, #1343; CHECK-NEXT:    mov x27, #-1 // =0xffffffffffffffff344; CHECK-NEXT:    madd x14, x14, x3, x11345; CHECK-NEXT:    mov w28, w30346; CHECK-NEXT:    mov w3, #-7680 // =0xffffe200347; CHECK-NEXT:    b .LBB0_39348; CHECK-NEXT:    .p2align 5, , 16349; CHECK-NEXT:  .LBB0_37: // %if.then466.us350; CHECK-NEXT:    // in Loop: Header=BB0_39 Depth=5351; CHECK-NEXT:    ldr x28, [sp, #152] // 8-byte Reload352; CHECK-NEXT:    ldr x3, [sp, #136] // 8-byte Reload353; CHECK-NEXT:    sxtb w4, w4354; CHECK-NEXT:    bic w4, w4, w4, asr #31355; CHECK-NEXT:    str x3, [x28]356; CHECK-NEXT:    mov w3, #-7680 // =0xffffe200357; CHECK-NEXT:  .LBB0_38: // %for.inc505.us358; CHECK-NEXT:    // in Loop: Header=BB0_39 Depth=5359; CHECK-NEXT:    add x22, x22, #1360; CHECK-NEXT:    add x27, x27, #1361; CHECK-NEXT:    mov w28, wzr362; CHECK-NEXT:    cmp x27, #0363; CHECK-NEXT:    b.hs .LBB0_9364; CHECK-NEXT:  .LBB0_39: // %for.body380.us365; CHECK-NEXT:    // Parent Loop BB0_4 Depth=1366; CHECK-NEXT:    // Parent Loop BB0_6 Depth=2367; CHECK-NEXT:    // Parent Loop BB0_8 Depth=3368; CHECK-NEXT:    // Parent Loop BB0_10 Depth=4369; CHECK-NEXT:    // => This Inner Loop Header: Depth=5370; CHECK-NEXT:    mov w30, w28371; CHECK-NEXT:    ldrh w28, [x23]372; CHECK-NEXT:    tst w0, #0x1373; CHECK-NEXT:    strh w28, [x11]374; CHECK-NEXT:    csel w28, w21, w3, ne375; CHECK-NEXT:    str w28, [x20]376; CHECK-NEXT:    cbz x15, .LBB0_38377; CHECK-NEXT:  // %bb.40: // %if.then436.us378; CHECK-NEXT:    // in Loop: Header=BB0_39 Depth=5379; CHECK-NEXT:    ldrh w28, [x14]380; CHECK-NEXT:    cbnz w28, .LBB0_37381; CHECK-NEXT:  // %bb.41: // in Loop: Header=BB0_39 Depth=5382; CHECK-NEXT:    mov w4, wzr383; CHECK-NEXT:    b .LBB0_38384; CHECK-NEXT:  .LBB0_42: // %for.body41385; CHECK-NEXT:    strb wzr, [x4]386; CHECK-NEXT:    strb wzr, [x14]387; CHECK-NEXT:  .LBB0_43: // %for.cond563.preheader388; CHECK-NEXT:    ldp x20, x19, [sp, #224] // 16-byte Folded Reload389; CHECK-NEXT:    ldp x22, x21, [sp, #208] // 16-byte Folded Reload390; CHECK-NEXT:    ldp x24, x23, [sp, #192] // 16-byte Folded Reload391; CHECK-NEXT:    ldp x26, x25, [sp, #176] // 16-byte Folded Reload392; CHECK-NEXT:    ldp x28, x27, [sp, #160] // 16-byte Folded Reload393; CHECK-NEXT:    ldr x30, [sp, #144] // 8-byte Reload394; CHECK-NEXT:    add sp, sp, #240395; CHECK-NEXT:    ret396entry:397  br i1 %var_5, label %for.body41.lr.ph, label %for.cond563.preheader398 399for.body41.lr.ph:                                 ; preds = %entry400  %arrayidx147 = getelementptr i8, ptr %arr_3, i64 120401  %tobool326.not = icmp eq i64 %var_2, 0402  %not353 = xor i64 0, -1403  %add538 = select i1 %var_0, i16 0, i16 1404  br i1 %var_0, label %for.body41.us, label %for.body41405 406for.body41.us:                                    ; preds = %for.cond.cleanup93.us, %for.body41.lr.ph407  %var_24.promoted9271009.us = phi i64 [ 0, %for.body41.lr.ph ], [ %6, %for.cond.cleanup93.us ]408  %var_37.promoted9301008.us = phi i64 [ 1, %for.body41.lr.ph ], [ 0, %for.cond.cleanup93.us ]409  %2 = phi i8 [ 0, %for.body41.lr.ph ], [ 1, %for.cond.cleanup93.us ]410  %add4139751001.us = phi i16 [ 0, %for.body41.lr.ph ], [ 1, %for.cond.cleanup93.us ]411  %3 = phi i8 [ 0, %for.body41.lr.ph ], [ %var_10, %for.cond.cleanup93.us ]412  store i32 %var_6, ptr %arr_3, align 4413  store i8 %var_10, ptr %arr_3, align 1414  br label %for.body67.us415 416for.body67.us:                                    ; preds = %for.cond.cleanup93.us, %for.body41.us417  %4 = phi i8 [ %3, %for.body41.us ], [ 0, %for.cond.cleanup93.us ]418  %add413977.us = phi i16 [ %add4139751001.us, %for.body41.us ], [ %add413.us17, %for.cond.cleanup93.us ]419  %5 = phi i8 [ %2, %for.body41.us ], [ %.sroa.speculated829.us, %for.cond.cleanup93.us ]420  %conv64922.us = phi i32 [ 1, %for.body41.us ], [ 0, %for.cond.cleanup93.us ]421  %6 = phi i64 [ %var_24.promoted9271009.us, %for.body41.us ], [ %.sroa.speculated832.us, %for.cond.cleanup93.us ]422  %mul354903918.us = phi i64 [ %var_37.promoted9301008.us, %for.body41.us ], [ 0, %for.cond.cleanup93.us ]423  %i_2.0921.us = zext i32 %var_15 to i64424  %.sroa.speculated832.us = tail call i64 @llvm.umin.i64(i64 %var_24.promoted9271009.us, i64 -30)425  %sext1023 = shl i64 %i_2.0921.us, 1426  %idxprom138.us162 = ashr i64 %sext1023, 1427  %gep889.us = getelementptr [24 x i16], ptr %arr_19, i64 %idxprom138.us16428  %arrayidx149.us = getelementptr i8, ptr %arrayidx147, i64 %idxprom138.us162429  %arrayidx319.us = getelementptr [24 x i8], ptr null, i64 %idxprom138.us162430  %7 = sext i32 %conv64922.us to i64431  %8 = getelementptr i32, ptr %arr_12, i64 %7432  %arrayidx226.us = getelementptr i8, ptr %8, i64 -12433  br label %for.cond95.preheader.us434 435for.cond.cleanup93.us:                            ; preds = %for.cond.cleanup98.us436  br i1 %var_5, label %for.body67.us, label %for.body41.us437 438for.cond.cleanup98.us:                            ; preds = %for.cond510.preheader.us439  br i1 %var_0, label %for.cond.cleanup93.us, label %for.cond95.preheader.us440 441for.body99.us:                                    ; preds = %for.cond95.preheader.us, %for.cond510.preheader.us442  %mul287985.us = phi i16 [ 0, %for.cond95.preheader.us ], [ %mul287.us, %for.cond510.preheader.us ]443  %9 = phi i8 [ %29, %for.cond95.preheader.us ], [ %var_14, %for.cond510.preheader.us ]444  %add413979.us = phi i16 [ %add413978.us, %for.cond95.preheader.us ], [ %add413.us17, %for.cond510.preheader.us ]445  %10 = phi i32 [ 0, %for.cond95.preheader.us ], [ %26, %for.cond510.preheader.us ]446  %mul354905.us = phi i64 [ %mul354904.us, %for.cond95.preheader.us ], [ %mul354907.us, %for.cond510.preheader.us ]447  %sub283896.us = phi i64 [ 1, %for.cond95.preheader.us ], [ %sub283.us, %for.cond510.preheader.us ]448  %conv96880.us = phi i64 [ 1, %for.cond95.preheader.us ], [ 0, %for.cond510.preheader.us ]449  %.sroa.speculated829.us = tail call i8 @llvm.smin.i8(i8 %30, i8 0)450  br label %for.body113.us451 452for.body380.us:                                   ; preds = %for.cond376.preheader.us, %for.inc505.us453  %indvars.iv1018 = phi i64 [ 0, %for.cond376.preheader.us ], [ %indvars.iv.next1019, %for.inc505.us ]454  %11 = phi i8 [ 0, %for.cond376.preheader.us ], [ %13, %for.inc505.us ]455  %add413980.us = phi i16 [ %add413979.us, %for.cond376.preheader.us ], [ 0, %for.inc505.us ]456  %12 = load i16, ptr %arrayidx384.us, align 2457  store i16 %12, ptr %invariant.gep875.us, align 2458  %add413.us17 = or i16 %add413980.us, 0459  %arrayidx416.us = getelementptr i16, ptr %arr_13, i64 %indvars.iv1018460  %conv419.us = select i1 %var_0, i32 36006, i32 -7680461  store i32 %conv419.us, ptr @var_50, align 4462  %tobool435.not.us = icmp eq i64 %mul, 0463  br i1 %tobool435.not.us, label %for.inc505.us, label %if.then436.us464 465if.then436.us:                                    ; preds = %for.body380.us466  %.sroa.speculated817.us = tail call i8 @llvm.smax.i8(i8 %11, i8 0)467  %cond464.in.us = load i16, ptr %gep876.us, align 2468  %tobool465.not.us = icmp eq i16 %cond464.in.us, 0469  br i1 %tobool465.not.us, label %for.inc505.us, label %if.then466.us470 471if.then466.us:                                    ; preds = %if.then436.us472  store i64 %conv35, ptr %arr_3, align 8473  br label %for.inc505.us474 475for.inc505.us:                                    ; preds = %if.then466.us, %if.then436.us, %for.body380.us476  %13 = phi i8 [ %11, %for.body380.us ], [ %.sroa.speculated817.us, %if.then466.us ], [ 0, %if.then436.us ]477  %indvars.iv.next1019 = add i64 %indvars.iv1018, 1478  %cmp378.us = icmp ult i64 %indvars.iv1018, 0479  br i1 %cmp378.us, label %for.body380.us, label %for.cond510.preheader.us480 481for.body194.us:                                   ; preds = %if.end.us.7, %for.inc371.us482  %indvars.iv = phi i64 [ 0, %if.end.us.7 ], [ %indvars.iv.next, %for.inc371.us ]483  %mul287986.us = phi i16 [ %mul287985.us, %if.end.us.7 ], [ %mul287.us, %for.inc371.us ]484  %14 = phi i8 [ %9, %if.end.us.7 ], [ %16, %for.inc371.us ]485  %mul354906.us = phi i64 [ %mul354905.us, %if.end.us.7 ], [ %var_11, %for.inc371.us ]486  %sub283897.us = phi i64 [ %sub283896.us, %if.end.us.7 ], [ 0, %for.inc371.us ]487  %tobool221.not.us = icmp eq i32 1, 0488  br i1 %tobool221.not.us, label %if.end239.us, label %if.then222.us489 490if.then222.us:                                    ; preds = %for.body194.us491  %15 = load i32, ptr %arrayidx226.us, align 4492  %conv227.us = trunc i32 %15 to i16493  store i16 %conv227.us, ptr @var_32, align 2494  %.sroa.speculated820.us = tail call i8 @llvm.smax.i8(i8 %14, i8 0)495  br label %if.end239.us496 497if.end239.us:                                     ; preds = %if.then222.us, %for.body194.us498  %16 = phi i8 [ %.sroa.speculated820.us, %if.then222.us ], [ 0, %for.body194.us ]499  store i8 -107, ptr %arr_7, align 1500  %tobool253.not.us = icmp eq i8 %0, 0501  br i1 %tobool253.not.us, label %if.end282.us, label %if.then254.us502 503if.then254.us:                                    ; preds = %if.end239.us504  %17 = load i16, ptr %arrayidx259.us, align 2505  %tobool261.not.us = icmp eq i16 %17, 0506  %conv268.us = select i1 %tobool261.not.us, i64 0, i64 %var_16507  store i64 %conv268.us, ptr @var_35, align 8508  %gep867.us = getelementptr [24 x [24 x i64]], ptr null, i64 %indvars.iv509  store i16 %var_1, ptr %arr_6, align 2510  br label %if.end282.us511 512if.end282.us:                                     ; preds = %if.then254.us, %if.end239.us513  %sub283.us = or i64 %sub283897.us, -434259939514  store i64 %sub283.us, ptr %arr_4, align 8515  %mul287.us = mul i16 %mul287986.us, -18978516  store i64 0, ptr @var_39, align 8517  %18 = load i8, ptr %arrayidx321.us, align 1518  %conv322.us = zext i8 %18 to i64519  store i64 %conv322.us, ptr %arr_4, align 8520  br i1 %tobool326.not, label %if.then327.us, label %for.inc371.us521 522if.then327.us:                                    ; preds = %if.end282.us523  %tobool330.not.us = icmp eq i32 0, 0524  br i1 %tobool330.not.us, label %cond.end345.us, label %cond.true331.us525 526cond.true331.us:                                  ; preds = %if.then327.us527  %19 = load i8, ptr null, align 1528  %20 = sext i8 %19 to i16529  br label %cond.end345.us530 531cond.end345.us:                                   ; preds = %cond.true331.us, %if.then327.us532  %cond346.us = phi i16 [ %20, %cond.true331.us ], [ 0, %if.then327.us ]533  store i16 %cond346.us, ptr %arr_4, align 2534  %mul354.us = mul i64 %mul354906.us, %not353535  store i64 %mul354.us, ptr @var_46, align 8536  br label %for.inc371.us537 538for.inc371.us:                                    ; preds = %cond.end345.us, %if.end282.us539  %mul354907.us = phi i64 [ 1, %if.end282.us ], [ 0, %cond.end345.us ]540  %indvars.iv.next = or i64 %indvars.iv, 1541  br i1 %var_0, label %for.body194.us, label %for.cond376.preheader.us542 543cond.true146.us:                                  ; preds = %for.cond131.preheader.us544  %21 = load i8, ptr %arrayidx149.us, align 1545  %conv150.us = sext i8 %21 to i32546  br label %cond.end154.us547 548cond.end154.us:                                   ; preds = %for.cond131.preheader.us, %cond.true146.us549  %cond155.us = phi i32 [ %conv150.us, %cond.true146.us ], [ 0, %for.cond131.preheader.us ]550  %shl.us = shl i32 %div.us, %cond155.us551  %tobool157.not.us = icmp eq i32 %shl.us, 0552  br i1 %tobool157.not.us, label %if.end.us, label %if.then.us553 554if.then.us:                                       ; preds = %cond.end154.us555  store i32 0, ptr %arr_4, align 4556  br label %if.end.us557 558if.end.us:                                        ; preds = %if.then.us, %cond.end154.us559  %22 = phi i32 [ 0, %if.then.us ], [ %10, %cond.end154.us ]560  store i8 %1, ptr %arr_4, align 1561  call void @llvm.assume(i1 true)562  %23 = load i8, ptr %arrayidx149.us, align 1563  %conv150.us.2 = sext i8 %23 to i32564  %shl.us.2 = shl i32 18984, %conv150.us.2565  %tobool157.not.us.2 = icmp eq i32 %shl.us.2, 0566  br i1 %tobool157.not.us.2, label %if.then.us.5, label %if.then.us.2567 568if.then.us.2:                                     ; preds = %if.end.us569  %.sroa.speculated826.us.2 = tail call i32 @llvm.smin.i32(i32 %10, i32 0)570  store i8 0, ptr %arr_4, align 1571  br label %if.then.us.5572 573if.then.us.5:                                     ; preds = %if.then.us.2, %if.end.us574  %24 = phi i32 [ 0, %if.then.us.2 ], [ %22, %if.end.us ]575  %.sroa.speculated826.us.5 = tail call i32 @llvm.smin.i32(i32 %24, i32 1410036665)576  br i1 %var_0, label %cond.end154.us.7, label %cond.true146.us.7577 578cond.true146.us.7:                                ; preds = %if.then.us.5579  %25 = load i8, ptr %arrayidx149.us, align 1580  %conv150.us.7 = sext i8 %25 to i32581  br label %cond.end154.us.7582 583cond.end154.us.7:                                 ; preds = %cond.true146.us.7, %if.then.us.5584  %cond155.us.7 = phi i32 [ %conv150.us.7, %cond.true146.us.7 ], [ 0, %if.then.us.5 ]585  %shl.us.7 = shl i32 18984, %cond155.us.7586  %tobool157.not.us.7 = icmp eq i32 %shl.us.7, 0587  br i1 %tobool157.not.us.7, label %if.end.us.7, label %if.then.us.7588 589if.then.us.7:                                     ; preds = %cond.end154.us.7590  store i32 0, ptr %arr_3, align 4591  br label %if.end.us.7592 593if.end.us.7:                                      ; preds = %if.then.us.7, %cond.end154.us.7594  %26 = phi i32 [ 0, %if.then.us.7 ], [ %.sroa.speculated826.us.5, %cond.end154.us.7 ]595  %arrayidx259.us = getelementptr i16, ptr %arrayidx257.us, i64 %conv96880.us596  br label %for.body194.us597 598for.body113.us:                                   ; preds = %for.body113.us, %for.body99.us599  br i1 %var_0, label %for.body113.us, label %for.cond131.preheader.us600 601for.cond510.preheader.us:                         ; preds = %for.inc505.us602  %cmp97.us = icmp slt i16 %add538, 0603  br i1 %cmp97.us, label %for.body99.us, label %for.cond.cleanup98.us604 605for.cond376.preheader.us:                         ; preds = %for.inc371.us606  %arrayidx384.us = getelementptr i16, ptr null, i64 %conv96880.us607  %gep876.us = getelementptr [24 x [24 x i16]], ptr %invariant.gep875.us, i64 %conv96880.us608  br label %for.body380.us609 610for.cond131.preheader.us:                         ; preds = %for.body113.us611  store i8 %var_3, ptr %arr_4, align 1612  %27 = load i16, ptr %gep884.us, align 2613  %28 = mul i16 18984, %27614  %div.us = zext i16 %28 to i32615  %tobool145.not.us = icmp eq i8 0, 0616  br i1 %tobool145.not.us, label %cond.end154.us, label %cond.true146.us617 618for.cond95.preheader.us:                          ; preds = %for.cond.cleanup98.us, %for.body67.us619  %indvars.iv1021 = phi i64 [ 1, %for.cond.cleanup98.us ], [ 0, %for.body67.us ]620  %29 = phi i8 [ %16, %for.cond.cleanup98.us ], [ %4, %for.body67.us ]621  %add413978.us = phi i16 [ %var_4, %for.cond.cleanup98.us ], [ %add413977.us, %for.body67.us ]622  %30 = phi i8 [ %.sroa.speculated829.us, %for.cond.cleanup98.us ], [ %5, %for.body67.us ]623  %mul354904.us = phi i64 [ 0, %for.cond.cleanup98.us ], [ %mul354903918.us, %for.body67.us ]624  %gep884.us = getelementptr [24 x [24 x i16]], ptr %gep889.us, i64 %indvars.iv1021625  %arrayidx321.us = getelementptr i8, ptr %arrayidx319.us, i64 %indvars.iv1021626  %arrayidx257.us = getelementptr [24 x i16], ptr null, i64 %indvars.iv1021627  br label %for.body99.us628 629for.cond563.preheader:                            ; preds = %for.body41, %entry630  ret void631 632for.body41:                                       ; preds = %for.body41.lr.ph633  store i8 0, ptr %arr_12, align 1634  store i8 0, ptr %arr_3, align 1635  br label %for.cond563.preheader636}637 638attributes #0 = { nounwind "frame-pointer"="non-leaf" "target-cpu"="grace" }639attributes #1 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }640attributes #2 = { nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: write) }641