1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -enable-machine-outliner -mtriple=ppc32-unknown-linux < %s | FileCheck %s 3; RUN: llc -enable-machine-outliner -mtriple=powerpc-ibm-aix-xcoff < %s | FileCheck %s -check-prefix=AIX 4 5; NOTE: Machine outliner doesn't run. 6@x = global i32 0, align 4 7 8define dso_local i32 @check_boundaries() #0 { 9; CHECK-LABEL: check_boundaries: 10; CHECK: # %bb.0: 11; CHECK-NEXT: stwu 1, -32(1) 12; CHECK-NEXT: stw 31, 28(1) 13; CHECK-NEXT: .cfi_def_cfa_offset 32 14; CHECK-NEXT: .cfi_offset r31, -4 15; CHECK-NEXT: mr 31, 1 16; CHECK-NEXT: .cfi_def_cfa_register r31 17; CHECK-NEXT: li 4, 0 18; CHECK-NEXT: li 3, 1 19; CHECK-NEXT: stw 4, 24(31) 20; CHECK-NEXT: li 4, 2 21; CHECK-NEXT: li 5, 3 22; CHECK-NEXT: li 6, 4 23; CHECK-NEXT: cmplwi 3, 0 24; CHECK-NEXT: stw 3, 20(31) 25; CHECK-NEXT: stw 4, 16(31) 26; CHECK-NEXT: stw 5, 12(31) 27; CHECK-NEXT: stw 6, 8(31) 28; CHECK-NEXT: beq 0, .LBB0_2 29; CHECK-NEXT: # %bb.1: 30; CHECK-NEXT: stw 3, 12(31) 31; CHECK-NEXT: b .LBB0_3 32; CHECK-NEXT: .LBB0_2: 33; CHECK-NEXT: stw 3, 20(31) 34; CHECK-NEXT: stw 4, 16(31) 35; CHECK-NEXT: stw 5, 12(31) 36; CHECK-NEXT: stw 6, 8(31) 37; CHECK-NEXT: .LBB0_3: 38; CHECK-NEXT: li 3, 0 39; CHECK-NEXT: lwz 31, 28(1) 40; CHECK-NEXT: addi 1, 1, 32 41; CHECK-NEXT: blr 42; 43; AIX-LABEL: check_boundaries: 44; AIX: # %bb.0: 45; AIX-NEXT: stw 31, -4(1) 46; AIX-NEXT: stwu 1, -48(1) 47; AIX-NEXT: mr 31, 1 48; AIX-NEXT: li 4, 0 49; AIX-NEXT: li 3, 1 50; AIX-NEXT: stw 4, 40(31) 51; AIX-NEXT: li 4, 2 52; AIX-NEXT: li 5, 3 53; AIX-NEXT: li 6, 4 54; AIX-NEXT: cmplwi 3, 0 55; AIX-NEXT: stw 3, 36(31) 56; AIX-NEXT: stw 4, 32(31) 57; AIX-NEXT: stw 5, 28(31) 58; AIX-NEXT: stw 6, 24(31) 59; AIX-NEXT: beq 0, L..BB0_2 60; AIX-NEXT: # %bb.1: 61; AIX-NEXT: stw 3, 28(31) 62; AIX-NEXT: b L..BB0_3 63; AIX-NEXT: L..BB0_2: 64; AIX-NEXT: stw 3, 36(31) 65; AIX-NEXT: stw 4, 32(31) 66; AIX-NEXT: stw 5, 28(31) 67; AIX-NEXT: stw 6, 24(31) 68; AIX-NEXT: L..BB0_3: 69; AIX-NEXT: li 3, 0 70; AIX-NEXT: addi 1, 1, 48 71; AIX-NEXT: lwz 31, -4(1) 72; AIX-NEXT: blr 73 %1 = alloca i32, align 4 74 %2 = alloca i32, align 4 75 %3 = alloca i32, align 4 76 %4 = alloca i32, align 4 77 %5 = alloca i32, align 4 78 store i32 0, i32* %1, align 4 79 store i32 0, i32* %2, align 4 80 %6 = load i32, i32* %2, align 4 81 %7 = icmp ne i32 %6, 0 82 br i1 %7, label %9, label %8 83 84 store i32 1, i32* %2, align 4 85 store i32 2, i32* %3, align 4 86 store i32 3, i32* %4, align 4 87 store i32 4, i32* %5, align 4 88 br label %10 89 90 store i32 1, i32* %4, align 4 91 br label %10 92 93 %11 = load i32, i32* %2, align 4 94 %12 = icmp ne i32 %11, 0 95 br i1 %12, label %14, label %13 96 97 store i32 1, i32* %2, align 4 98 store i32 2, i32* %3, align 4 99 store i32 3, i32* %4, align 4 100 store i32 4, i32* %5, align 4 101 br label %15 102 103 store i32 1, i32* %4, align 4 104 br label %15 105 106 ret i32 0 107} 108 109define dso_local i32 @main() #0 { 110; CHECK-LABEL: main: 111; CHECK: # %bb.0: 112; CHECK-NEXT: stwu 1, -32(1) 113; CHECK-NEXT: stw 31, 28(1) 114; CHECK-NEXT: .cfi_def_cfa_offset 32 115; CHECK-NEXT: .cfi_offset r31, -4 116; CHECK-NEXT: mr 31, 1 117; CHECK-NEXT: .cfi_def_cfa_register r31 118; CHECK-NEXT: li 3, 0 119; CHECK-NEXT: stw 3, 24(31) 120; CHECK-NEXT: li 3, 1 121; CHECK-NEXT: li 4, 2 122; CHECK-NEXT: li 5, 3 123; CHECK-NEXT: li 6, 4 124; CHECK-NEXT: lis 7, x@ha 125; CHECK-NEXT: stw 3, 20(31) 126; CHECK-NEXT: stw 4, 16(31) 127; CHECK-NEXT: stw 5, 12(31) 128; CHECK-NEXT: stw 6, 8(31) 129; CHECK-NEXT: stw 3, x@l(7) 130; CHECK-NEXT: #APP 131; CHECK-NEXT: #NO_APP 132; CHECK-NEXT: stw 3, 20(31) 133; CHECK-NEXT: li 3, 0 134; CHECK-NEXT: stw 4, 16(31) 135; CHECK-NEXT: stw 5, 12(31) 136; CHECK-NEXT: stw 6, 8(31) 137; CHECK-NEXT: lwz 31, 28(1) 138; CHECK-NEXT: addi 1, 1, 32 139; CHECK-NEXT: blr 140; 141; AIX-LABEL: main: 142; AIX: # %bb.0: 143; AIX-NEXT: stw 31, -4(1) 144; AIX-NEXT: stwu 1, -48(1) 145; AIX-NEXT: lwz 4, L..C0(2) # @x 146; AIX-NEXT: mr 31, 1 147; AIX-NEXT: li 3, 0 148; AIX-NEXT: stw 3, 40(31) 149; AIX-NEXT: li 3, 1 150; AIX-NEXT: li 5, 2 151; AIX-NEXT: li 6, 3 152; AIX-NEXT: li 7, 4 153; AIX-NEXT: stw 3, 36(31) 154; AIX-NEXT: stw 5, 32(31) 155; AIX-NEXT: stw 6, 28(31) 156; AIX-NEXT: stw 7, 24(31) 157; AIX-NEXT: stw 3, 0(4) 158; AIX-NEXT: #APP 159; AIX-NEXT: #NO_APP 160; AIX-NEXT: stw 3, 36(31) 161; AIX-NEXT: li 3, 0 162; AIX-NEXT: stw 5, 32(31) 163; AIX-NEXT: stw 6, 28(31) 164; AIX-NEXT: stw 7, 24(31) 165; AIX-NEXT: addi 1, 1, 48 166; AIX-NEXT: lwz 31, -4(1) 167; AIX-NEXT: blr 168 %1 = alloca i32, align 4 169 %2 = alloca i32, align 4 170 %3 = alloca i32, align 4 171 %4 = alloca i32, align 4 172 %5 = alloca i32, align 4 173 174 store i32 0, i32* %1, align 4 175 store i32 0, i32* @x, align 4 176 store i32 1, i32* %2, align 4 177 store i32 2, i32* %3, align 4 178 store i32 3, i32* %4, align 4 179 store i32 4, i32* %5, align 4 180 store i32 1, i32* @x, align 4 181 call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() 182 store i32 1, i32* %2, align 4 183 store i32 2, i32* %3, align 4 184 store i32 3, i32* %4, align 4 185 store i32 4, i32* %5, align 4 186 ret i32 0 187} 188 189attributes #0 = { noredzone nounwind ssp uwtable "frame-pointer"="all" } 190