1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -enable-machine-outliner -mtriple=hexagon-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: { 12; CHECK-NEXT: r0 = #0 13; CHECK-NEXT: allocframe(#24) 14; CHECK-NEXT: } 15; CHECK-NEXT: .cfi_def_cfa r30, 8 16; CHECK-NEXT: .cfi_offset r31, -4 17; CHECK-NEXT: .cfi_offset r30, -8 18; CHECK-NEXT: { 19; CHECK-NEXT: memw(r29+#20) = #0 20; CHECK-NEXT: } 21; CHECK-NEXT: { 22; CHECK-NEXT: memw(r29+#16) = #0 23; CHECK-NEXT: memw(r29+#16) = #1 24; CHECK-NEXT: } 25; CHECK-NEXT: { 26; CHECK-NEXT: r1 = memw(r29+#16) 27; CHECK-NEXT: memw(r29+#12) = #2 28; CHECK-NEXT: } 29; CHECK-NEXT: { 30; CHECK-NEXT: memw(r29+#8) = #3 31; CHECK-NEXT: memw(r29+#4) = #4 32; CHECK-NEXT: } 33; CHECK-NEXT: { 34; CHECK-NEXT: p0 = cmp.eq(r1,#0) 35; CHECK-NEXT: if (p0.new) memw(r29+#8) = #3 36; CHECK-NEXT: if (p0.new) memw(r29+#12) = #2 37; CHECK-NEXT: } 38; CHECK-NEXT: { 39; CHECK-NEXT: if (p0) memw(r29+#4) = #4 40; CHECK-NEXT: if (p0) memw(r29+#16) = #1 41; CHECK-NEXT: } 42; CHECK-NEXT: { 43; CHECK-NEXT: if (!p0) memw(r29+#8) = #1 44; CHECK-NEXT: } 45; CHECK-NEXT: { 46; CHECK-NEXT: r31:30 = dealloc_return(r30):raw 47; CHECK-NEXT: } 48 %1 = alloca i32, align 4 49 %2 = alloca i32, align 4 50 %3 = alloca i32, align 4 51 %4 = alloca i32, align 4 52 %5 = alloca i32, align 4 53 store i32 0, i32* %1, align 4 54 store i32 0, i32* %2, align 4 55 %6 = load i32, i32* %2, align 4 56 %7 = icmp ne i32 %6, 0 57 br i1 %7, label %9, label %8 58 59 store i32 1, i32* %2, align 4 60 store i32 2, i32* %3, align 4 61 store i32 3, i32* %4, align 4 62 store i32 4, i32* %5, align 4 63 br label %10 64 65 store i32 1, i32* %4, align 4 66 br label %10 67 68 %11 = load i32, i32* %2, align 4 69 %12 = icmp ne i32 %11, 0 70 br i1 %12, label %14, label %13 71 72 store i32 1, i32* %2, align 4 73 store i32 2, i32* %3, align 4 74 store i32 3, i32* %4, align 4 75 store i32 4, i32* %5, align 4 76 br label %15 77 78 store i32 1, i32* %4, align 4 79 br label %15 80 81 ret i32 0 82} 83 84define dso_local i32 @main() #0 { 85; CHECK-LABEL: main: 86; CHECK: .cfi_startproc 87; CHECK-NEXT: // %bb.0: 88; CHECK-NEXT: { 89; CHECK-NEXT: r0 = ##x 90; CHECK-NEXT: allocframe(#24) 91; CHECK-NEXT: } 92; CHECK-NEXT: .cfi_def_cfa r30, 8 93; CHECK-NEXT: .cfi_offset r31, -4 94; CHECK-NEXT: .cfi_offset r30, -8 95; CHECK-NEXT: { 96; CHECK-NEXT: memw(r29+#20) = #0 97; CHECK-NEXT: memw(r0+#0) = #1 98; CHECK-NEXT: } 99; CHECK-NEXT: { 100; CHECK-NEXT: memw(r29+#16) = #1 101; CHECK-NEXT: memw(r29+#12) = #2 102; CHECK-NEXT: } 103; CHECK-NEXT: { 104; CHECK-NEXT: memw(r29+#8) = #3 105; CHECK-NEXT: memw(r29+#4) = #4 106; CHECK-NEXT: } 107; CHECK-NEXT: //# InlineAsm Start 108; CHECK-NEXT: //# InlineAsm End 109; CHECK-NEXT: { 110; CHECK-NEXT: r0 = #0 111; CHECK-NEXT: memw(r29+#16) = #1 112; CHECK-NEXT: memw(r29+#12) = #2 113; CHECK-NEXT: } 114; CHECK-NEXT: { 115; CHECK-NEXT: memw(r29+#8) = #3 116; CHECK-NEXT: memw(r29+#4) = #4 117; CHECK-NEXT: } 118; CHECK-NEXT: { 119; CHECK-NEXT: r31:30 = dealloc_return(r30):raw 120; CHECK-NEXT: } 121 %1 = alloca i32, align 4 122 %2 = alloca i32, align 4 123 %3 = alloca i32, align 4 124 %4 = alloca i32, align 4 125 %5 = alloca i32, align 4 126 127 store i32 0, i32* %1, align 4 128 store i32 0, i32* @x, align 4 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 store i32 1, i32* @x, align 4 134 call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() 135 store i32 1, i32* %2, align 4 136 store i32 2, i32* %3, align 4 137 store i32 3, i32* %4, align 4 138 store i32 4, i32* %5, align 4 139 ret i32 0 140} 141 142attributes #0 = { noredzone nounwind ssp uwtable "frame-pointer"="all" } 143