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