1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -enable-machine-outliner -mtriple=sparc-unknown-linux < %s | FileCheck %s 3 4; NOTE: Machine outliner doesn't run. 5@x = global i32 0, align 4 6 7define dso_local i32 @check_boundaries() #0 { 8; CHECK-LABEL: check_boundaries: 9; CHECK: .cfi_startproc 10; CHECK-NEXT: ! %bb.0: 11; CHECK-NEXT: save %sp, -112, %sp 12; CHECK-NEXT: .cfi_def_cfa_register %fp 13; CHECK-NEXT: .cfi_window_save 14; CHECK-NEXT: .cfi_register %o7, %i7 15; CHECK-NEXT: st %g0, [%fp+-4] 16; CHECK-NEXT: mov %g0, %i0 17; CHECK-NEXT: cmp %i0, 0 18; CHECK-NEXT: st %g0, [%fp+-8] 19; CHECK-NEXT: be .LBB0_1 20; CHECK-NEXT: mov 1, %i0 21; CHECK-NEXT: ! %bb.2: 22; CHECK-NEXT: ba .LBB0_3 23; CHECK-NEXT: st %i0, [%fp+-16] 24; CHECK-NEXT: .LBB0_1: 25; CHECK-NEXT: st %i0, [%fp+-8] 26; CHECK-NEXT: mov 2, %i0 27; CHECK-NEXT: st %i0, [%fp+-12] 28; CHECK-NEXT: mov 3, %i0 29; CHECK-NEXT: st %i0, [%fp+-16] 30; CHECK-NEXT: mov 4, %i0 31; CHECK-NEXT: st %i0, [%fp+-20] 32; CHECK-NEXT: .LBB0_3: 33; CHECK-NEXT: ld [%fp+-8], %i0 34; CHECK-NEXT: cmp %i0, 0 35; CHECK-NEXT: be .LBB0_4 36; CHECK-NEXT: nop 37; CHECK-NEXT: ! %bb.5: 38; CHECK-NEXT: mov 1, %i0 39; CHECK-NEXT: ba .LBB0_6 40; CHECK-NEXT: st %i0, [%fp+-16] 41; CHECK-NEXT: .LBB0_4: 42; CHECK-NEXT: mov 1, %i0 43; CHECK-NEXT: st %i0, [%fp+-8] 44; CHECK-NEXT: mov 2, %i0 45; CHECK-NEXT: st %i0, [%fp+-12] 46; CHECK-NEXT: mov 3, %i0 47; CHECK-NEXT: st %i0, [%fp+-16] 48; CHECK-NEXT: mov 4, %i0 49; CHECK-NEXT: st %i0, [%fp+-20] 50; CHECK-NEXT: .LBB0_6: 51; CHECK-NEXT: ret 52; CHECK-NEXT: restore %g0, %g0, %o0 53 %1 = alloca i32, align 4 54 %2 = alloca i32, align 4 55 %3 = alloca i32, align 4 56 %4 = alloca i32, align 4 57 %5 = alloca i32, align 4 58 store i32 0, i32* %1, align 4 59 store i32 0, i32* %2, align 4 60 %6 = load i32, i32* %2, align 4 61 %7 = icmp ne i32 %6, 0 62 br i1 %7, label %9, label %8 63 64 store i32 1, i32* %2, align 4 65 store i32 2, i32* %3, align 4 66 store i32 3, i32* %4, align 4 67 store i32 4, i32* %5, align 4 68 br label %10 69 70 store i32 1, i32* %4, align 4 71 br label %10 72 73 %11 = load i32, i32* %2, align 4 74 %12 = icmp ne i32 %11, 0 75 br i1 %12, label %14, label %13 76 77 store i32 1, i32* %2, align 4 78 store i32 2, i32* %3, align 4 79 store i32 3, i32* %4, align 4 80 store i32 4, i32* %5, align 4 81 br label %15 82 83 store i32 1, i32* %4, align 4 84 br label %15 85 86 ret i32 0 87} 88 89define dso_local i32 @main() #0 { 90; CHECK-LABEL: main: 91; CHECK: .cfi_startproc 92; CHECK-NEXT: ! %bb.0: 93; CHECK-NEXT: save %sp, -112, %sp 94; CHECK-NEXT: .cfi_def_cfa_register %fp 95; CHECK-NEXT: .cfi_window_save 96; CHECK-NEXT: .cfi_register %o7, %i7 97; CHECK-NEXT: st %g0, [%fp+-4] 98; CHECK-NEXT: sethi %hi(x), %i0 99; CHECK-NEXT: mov 1, %i1 100; CHECK-NEXT: st %i1, [%fp+-8] 101; CHECK-NEXT: mov 2, %i2 102; CHECK-NEXT: st %i2, [%fp+-12] 103; CHECK-NEXT: mov 3, %i3 104; CHECK-NEXT: st %i3, [%fp+-16] 105; CHECK-NEXT: mov 4, %i4 106; CHECK-NEXT: st %i4, [%fp+-20] 107; CHECK-NEXT: st %i1, [%i0+%lo(x)] 108; CHECK-NEXT: !APP 109; CHECK-NEXT: !NO_APP 110; CHECK-NEXT: st %i1, [%fp+-8] 111; CHECK-NEXT: st %i2, [%fp+-12] 112; CHECK-NEXT: st %i3, [%fp+-16] 113; CHECK-NEXT: mov %g0, %i0 114; CHECK-NEXT: st %i4, [%fp+-20] 115; CHECK-NEXT: ret 116; CHECK-NEXT: restore 117 %1 = alloca i32, align 4 118 %2 = alloca i32, align 4 119 %3 = alloca i32, align 4 120 %4 = alloca i32, align 4 121 %5 = alloca i32, align 4 122 123 store i32 0, i32* %1, align 4 124 store i32 0, i32* @x, align 4 125 store i32 1, i32* %2, align 4 126 store i32 2, i32* %3, align 4 127 store i32 3, i32* %4, align 4 128 store i32 4, i32* %5, align 4 129 store i32 1, i32* @x, align 4 130 call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() 131 store i32 1, i32* %2, align 4 132 store i32 2, i32* %3, align 4 133 store i32 3, i32* %4, align 4 134 store i32 4, i32* %5, align 4 135 ret i32 0 136} 137 138attributes #0 = { noredzone nounwind ssp uwtable "frame-pointer"="all" } 139