241 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=aarch64 %s -o - | FileCheck %s3 4declare i32 @g0(i32)5declare i32 @g1(ptr)6 7define i32 @foo_nounwind(i1 %cmp) nounwind {8; CHECK-LABEL: foo_nounwind:9; CHECK: // %bb.0:10; CHECK-NEXT: stp x29, x30, [sp, #-16]! // 16-byte Folded Spill11; CHECK-NEXT: sub sp, sp, #97, lsl #12 // =39731212; CHECK-NEXT: sub sp, sp, #268813; CHECK-NEXT: tbz w0, #0, .LBB0_214; CHECK-NEXT: // %bb.1: // %br115; CHECK-NEXT: mov w0, wzr16; CHECK-NEXT: bl g017; CHECK-NEXT: add w0, w0, #118; CHECK-NEXT: add sp, sp, #97, lsl #12 // =39731219; CHECK-NEXT: add sp, sp, #268820; CHECK-NEXT: ldp x29, x30, [sp], #16 // 16-byte Folded Reload21; CHECK-NEXT: ret22; CHECK-NEXT: .LBB0_2: // %br223; CHECK-NEXT: mov w8, #42 // =0x2a24; CHECK-NEXT: mov x0, sp25; CHECK-NEXT: str w8, [sp]26; CHECK-NEXT: bl g127; CHECK-NEXT: add sp, sp, #97, lsl #12 // =39731228; CHECK-NEXT: add sp, sp, #268829; CHECK-NEXT: ldp x29, x30, [sp], #16 // 16-byte Folded Reload30; CHECK-NEXT: b g031 %ptr = alloca i32, i32 100000, align 432 br i1 %cmp, label %br1, label %br233 34br1:35 %call1 = call i32 @g0(i32 0)36 %rv1 = add i32 %call1, 137 ret i32 %rv138 39br2:40 store i32 42, ptr %ptr, align 441 %call2 = call i32 @g1(ptr %ptr)42 %rv2 = tail call i32 @g0(i32 %call2)43 ret i32 %rv244}45 46define i32 @foo_default(i1 %cmp) {47; CHECK-LABEL: foo_default:48; CHECK: // %bb.0:49; CHECK-NEXT: stp x29, x30, [sp, #-16]! // 16-byte Folded Spill50; CHECK-NEXT: sub sp, sp, #97, lsl #12 // =39731251; CHECK-NEXT: sub sp, sp, #268852; CHECK-NEXT: .cfi_def_cfa_offset 40001653; CHECK-NEXT: .cfi_offset w30, -854; CHECK-NEXT: .cfi_offset w29, -1655; CHECK-NEXT: tbz w0, #0, .LBB1_256; CHECK-NEXT: // %bb.1: // %br157; CHECK-NEXT: mov w0, wzr58; CHECK-NEXT: bl g059; CHECK-NEXT: add w0, w0, #160; CHECK-NEXT: add sp, sp, #97, lsl #12 // =39731261; CHECK-NEXT: add sp, sp, #268862; CHECK-NEXT: ldp x29, x30, [sp], #16 // 16-byte Folded Reload63; CHECK-NEXT: ret64; CHECK-NEXT: .LBB1_2: // %br265; CHECK-NEXT: mov w8, #42 // =0x2a66; CHECK-NEXT: mov x0, sp67; CHECK-NEXT: str w8, [sp]68; CHECK-NEXT: bl g169; CHECK-NEXT: add sp, sp, #97, lsl #12 // =39731270; CHECK-NEXT: add sp, sp, #268871; CHECK-NEXT: ldp x29, x30, [sp], #16 // 16-byte Folded Reload72; CHECK-NEXT: b g073 %ptr = alloca i32, i32 100000, align 474 br i1 %cmp, label %br1, label %br275 76br1:77 %call1 = call i32 @g0(i32 0)78 %rv1 = add i32 %call1, 179 ret i32 %rv180 81br2:82 store i32 42, ptr %ptr, align 483 %call2 = call i32 @g1(ptr %ptr)84 %rv2 = tail call i32 @g0(i32 %call2)85 ret i32 %rv286}87 88define i32 @foo_uwtable(i1 %cmp) uwtable {89; CHECK-LABEL: foo_uwtable:90; CHECK: // %bb.0:91; CHECK-NEXT: stp x29, x30, [sp, #-16]! // 16-byte Folded Spill92; CHECK-NEXT: .cfi_def_cfa_offset 1693; CHECK-NEXT: .cfi_offset w30, -894; CHECK-NEXT: .cfi_offset w29, -1695; CHECK-NEXT: sub sp, sp, #97, lsl #12 // =39731296; CHECK-NEXT: .cfi_def_cfa_offset 39732897; CHECK-NEXT: sub sp, sp, #268898; CHECK-NEXT: .cfi_def_cfa_offset 40001699; CHECK-NEXT: .cfi_remember_state100; CHECK-NEXT: tbz w0, #0, .LBB2_2101; CHECK-NEXT: // %bb.1: // %br1102; CHECK-NEXT: mov w0, wzr103; CHECK-NEXT: bl g0104; CHECK-NEXT: add w0, w0, #1105; CHECK-NEXT: add sp, sp, #97, lsl #12 // =397312106; CHECK-NEXT: .cfi_def_cfa_offset 2704107; CHECK-NEXT: add sp, sp, #2688108; CHECK-NEXT: .cfi_def_cfa_offset 16109; CHECK-NEXT: ldp x29, x30, [sp], #16 // 16-byte Folded Reload110; CHECK-NEXT: .cfi_def_cfa_offset 0111; CHECK-NEXT: .cfi_restore w30112; CHECK-NEXT: .cfi_restore w29113; CHECK-NEXT: ret114; CHECK-NEXT: .LBB2_2: // %br2115; CHECK-NEXT: .cfi_restore_state116; CHECK-NEXT: mov w8, #42 // =0x2a117; CHECK-NEXT: mov x0, sp118; CHECK-NEXT: str w8, [sp]119; CHECK-NEXT: bl g1120; CHECK-NEXT: add sp, sp, #97, lsl #12 // =397312121; CHECK-NEXT: .cfi_def_cfa_offset 2704122; CHECK-NEXT: add sp, sp, #2688123; CHECK-NEXT: .cfi_def_cfa_offset 16124; CHECK-NEXT: ldp x29, x30, [sp], #16 // 16-byte Folded Reload125; CHECK-NEXT: .cfi_def_cfa_offset 0126; CHECK-NEXT: .cfi_restore w30127; CHECK-NEXT: .cfi_restore w29128; CHECK-NEXT: b g0129 %ptr = alloca i32, i32 100000, align 4130 br i1 %cmp, label %br1, label %br2131 132br1:133 %call1 = call i32 @g0(i32 0)134 %rv1 = add i32 %call1, 1135 ret i32 %rv1136 137br2:138 store i32 42, ptr %ptr, align 4139 %call2 = call i32 @g1(ptr %ptr)140 %rv2 = tail call i32 @g0(i32 %call2)141 ret i32 %rv2142}143 144define i32 @foo_uwtable_sync(i1 %cmp) uwtable(sync) {145; CHECK-LABEL: foo_uwtable_sync:146; CHECK: // %bb.0:147; CHECK-NEXT: stp x29, x30, [sp, #-16]! // 16-byte Folded Spill148; CHECK-NEXT: sub sp, sp, #97, lsl #12 // =397312149; CHECK-NEXT: sub sp, sp, #2688150; CHECK-NEXT: .cfi_def_cfa_offset 400016151; CHECK-NEXT: .cfi_offset w30, -8152; CHECK-NEXT: .cfi_offset w29, -16153; CHECK-NEXT: tbz w0, #0, .LBB3_2154; CHECK-NEXT: // %bb.1: // %br1155; CHECK-NEXT: mov w0, wzr156; CHECK-NEXT: bl g0157; CHECK-NEXT: add w0, w0, #1158; CHECK-NEXT: add sp, sp, #97, lsl #12 // =397312159; CHECK-NEXT: add sp, sp, #2688160; CHECK-NEXT: ldp x29, x30, [sp], #16 // 16-byte Folded Reload161; CHECK-NEXT: ret162; CHECK-NEXT: .LBB3_2: // %br2163; CHECK-NEXT: mov w8, #42 // =0x2a164; CHECK-NEXT: mov x0, sp165; CHECK-NEXT: str w8, [sp]166; CHECK-NEXT: bl g1167; CHECK-NEXT: add sp, sp, #97, lsl #12 // =397312168; CHECK-NEXT: add sp, sp, #2688169; CHECK-NEXT: ldp x29, x30, [sp], #16 // 16-byte Folded Reload170; CHECK-NEXT: b g0171 %ptr = alloca i32, i32 100000, align 4172 br i1 %cmp, label %br1, label %br2173 174br1:175 %call1 = call i32 @g0(i32 0)176 %rv1 = add i32 %call1, 1177 ret i32 %rv1178 179br2:180 store i32 42, ptr %ptr, align 4181 %call2 = call i32 @g1(ptr %ptr)182 %rv2 = tail call i32 @g0(i32 %call2)183 ret i32 %rv2184}185 186define i32 @foo_uwtable_async(i1 %cmp) uwtable(async) {187; CHECK-LABEL: foo_uwtable_async:188; CHECK: // %bb.0:189; CHECK-NEXT: stp x29, x30, [sp, #-16]! // 16-byte Folded Spill190; CHECK-NEXT: .cfi_def_cfa_offset 16191; CHECK-NEXT: .cfi_offset w30, -8192; CHECK-NEXT: .cfi_offset w29, -16193; CHECK-NEXT: sub sp, sp, #97, lsl #12 // =397312194; CHECK-NEXT: .cfi_def_cfa_offset 397328195; CHECK-NEXT: sub sp, sp, #2688196; CHECK-NEXT: .cfi_def_cfa_offset 400016197; CHECK-NEXT: .cfi_remember_state198; CHECK-NEXT: tbz w0, #0, .LBB4_2199; CHECK-NEXT: // %bb.1: // %br1200; CHECK-NEXT: mov w0, wzr201; CHECK-NEXT: bl g0202; CHECK-NEXT: add w0, w0, #1203; CHECK-NEXT: add sp, sp, #97, lsl #12 // =397312204; CHECK-NEXT: .cfi_def_cfa_offset 2704205; CHECK-NEXT: add sp, sp, #2688206; CHECK-NEXT: .cfi_def_cfa_offset 16207; CHECK-NEXT: ldp x29, x30, [sp], #16 // 16-byte Folded Reload208; CHECK-NEXT: .cfi_def_cfa_offset 0209; CHECK-NEXT: .cfi_restore w30210; CHECK-NEXT: .cfi_restore w29211; CHECK-NEXT: ret212; CHECK-NEXT: .LBB4_2: // %br2213; CHECK-NEXT: .cfi_restore_state214; CHECK-NEXT: mov w8, #42 // =0x2a215; CHECK-NEXT: mov x0, sp216; CHECK-NEXT: str w8, [sp]217; CHECK-NEXT: bl g1218; CHECK-NEXT: add sp, sp, #97, lsl #12 // =397312219; CHECK-NEXT: .cfi_def_cfa_offset 2704220; CHECK-NEXT: add sp, sp, #2688221; CHECK-NEXT: .cfi_def_cfa_offset 16222; CHECK-NEXT: ldp x29, x30, [sp], #16 // 16-byte Folded Reload223; CHECK-NEXT: .cfi_def_cfa_offset 0224; CHECK-NEXT: .cfi_restore w30225; CHECK-NEXT: .cfi_restore w29226; CHECK-NEXT: b g0227 %ptr = alloca i32, i32 100000, align 4228 br i1 %cmp, label %br1, label %br2229 230br1:231 %call1 = call i32 @g0(i32 0)232 %rv1 = add i32 %call1, 1233 ret i32 %rv1234 235br2:236 store i32 42, ptr %ptr, align 4237 %call2 = call i32 @g1(ptr %ptr)238 %rv2 = tail call i32 @g0(i32 %call2)239 ret i32 %rv2240}241