1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -enable-machine-outliner -mtriple=aarch64-unknown-linux < %s | FileCheck %s 3@x = dso_local global i32 0, align 4 4 5define dso_local i32 @check_boundaries() #0 { 6; CHECK-LABEL: check_boundaries: 7; CHECK: // %bb.0: 8; CHECK-NEXT: sub sp, sp, #48 9; CHECK-NEXT: .cfi_def_cfa_offset 48 10; CHECK-NEXT: stp x29, x30, [sp, #32] // 16-byte Folded Spill 11; CHECK-NEXT: add x29, sp, #32 12; CHECK-NEXT: .cfi_def_cfa w29, 16 13; CHECK-NEXT: .cfi_offset w30, -8 14; CHECK-NEXT: .cfi_offset w29, -16 15; CHECK-NEXT: mov w8, #1 16; CHECK-NEXT: stur xzr, [x29, #-8] 17; CHECK-NEXT: cbz wzr, .LBB0_3 18; CHECK-NEXT: // %bb.1: 19; CHECK-NEXT: str w8, [sp, #16] 20; CHECK-NEXT: ldur w8, [x29, #-8] 21; CHECK-NEXT: cbz w8, .LBB0_4 22; CHECK-NEXT: .LBB0_2: 23; CHECK-NEXT: mov w8, #1 24; CHECK-NEXT: str w8, [sp, #16] 25; CHECK-NEXT: b .LBB0_5 26; CHECK-NEXT: .LBB0_3: 27; CHECK-NEXT: bl OUTLINED_FUNCTION_0 28; CHECK-NEXT: ldur w8, [x29, #-8] 29; CHECK-NEXT: cbnz w8, .LBB0_2 30; CHECK-NEXT: .LBB0_4: 31; CHECK-NEXT: mov w8, #1 32; CHECK-NEXT: bl OUTLINED_FUNCTION_0 33; CHECK-NEXT: .LBB0_5: 34; CHECK-NEXT: mov w0, wzr 35; CHECK-NEXT: .cfi_def_cfa wsp, 48 36; CHECK-NEXT: ldp x29, x30, [sp, #32] // 16-byte Folded Reload 37; CHECK-NEXT: add sp, sp, #48 38; CHECK-NEXT: .cfi_def_cfa_offset 0 39; CHECK-NEXT: .cfi_restore w30 40; CHECK-NEXT: .cfi_restore w29 41; CHECK-NEXT: ret 42 %1 = alloca i32, align 4 43 %2 = alloca i32, align 4 44 %3 = alloca i32, align 4 45 %4 = alloca i32, align 4 46 %5 = alloca i32, align 4 47 store i32 0, i32* %1, align 4 48 store i32 0, i32* %2, align 4 49 %6 = load i32, i32* %2, align 4 50 %7 = icmp ne i32 %6, 0 51 br i1 %7, label %9, label %8 52 53 store i32 1, i32* %2, align 4 54 store i32 2, i32* %3, align 4 55 store i32 3, i32* %4, align 4 56 store i32 4, i32* %5, align 4 57 br label %10 58 59 store i32 1, i32* %4, align 4 60 br label %10 61 62 %11 = load i32, i32* %2, align 4 63 %12 = icmp ne i32 %11, 0 64 br i1 %12, label %14, label %13 65 66 store i32 1, i32* %2, align 4 67 store i32 2, i32* %3, align 4 68 store i32 3, i32* %4, align 4 69 store i32 4, i32* %5, align 4 70 br label %15 71 72 store i32 1, i32* %4, align 4 73 br label %15 74 75 ret i32 0 76} 77 78define dso_local i32 @main() #0 { 79; CHECK-LABEL: main: 80; CHECK: // %bb.0: 81; CHECK-NEXT: sub sp, sp, #48 82; CHECK-NEXT: .cfi_def_cfa_offset 48 83; CHECK-NEXT: stp x29, x30, [sp, #32] // 16-byte Folded Spill 84; CHECK-NEXT: add x29, sp, #32 85; CHECK-NEXT: .cfi_def_cfa w29, 16 86; CHECK-NEXT: .cfi_offset w30, -8 87; CHECK-NEXT: .cfi_offset w29, -16 88; CHECK-NEXT: mov w8, #1 89; CHECK-NEXT: adrp x9, x 90; CHECK-NEXT: mov w10, #2 91; CHECK-NEXT: mov w11, #3 92; CHECK-NEXT: mov w0, wzr 93; CHECK-NEXT: str w8, [x9, :lo12:x] 94; CHECK-NEXT: mov w9, #4 95; CHECK-NEXT: stp w8, wzr, [x29, #-8] 96; CHECK-NEXT: stur w10, [x29, #-12] 97; CHECK-NEXT: stp w9, w11, [sp, #12] 98; CHECK-NEXT: //APP 99; CHECK-NEXT: //NO_APP 100; CHECK-NEXT: stp w10, w8, [x29, #-12] 101; CHECK-NEXT: stp w9, w11, [sp, #12] 102; CHECK-NEXT: .cfi_def_cfa wsp, 48 103; CHECK-NEXT: ldp x29, x30, [sp, #32] // 16-byte Folded Reload 104; CHECK-NEXT: add sp, sp, #48 105; CHECK-NEXT: .cfi_def_cfa_offset 0 106; CHECK-NEXT: .cfi_restore w30 107; CHECK-NEXT: .cfi_restore w29 108; CHECK-NEXT: ret 109 %1 = alloca i32, align 4 110 %2 = alloca i32, align 4 111 %3 = alloca i32, align 4 112 %4 = alloca i32, align 4 113 %5 = alloca i32, align 4 114 115 store i32 0, i32* %1, align 4 116 store i32 0, i32* @x, align 4 117 store i32 1, i32* %2, align 4 118 store i32 2, i32* %3, align 4 119 store i32 3, i32* %4, align 4 120 store i32 4, i32* %5, align 4 121 store i32 1, i32* @x, align 4 122 call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() 123 store i32 1, i32* %2, align 4 124 store i32 2, i32* %3, align 4 125 store i32 3, i32* %4, align 4 126 store i32 4, i32* %5, align 4 127 ret i32 0 128} 129 130attributes #0 = { noredzone nounwind ssp uwtable "frame-pointer"="all" } 131