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