1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -enable-machine-outliner -mtriple=wasm32-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: .functype check_boundaries () -> (i32) 10; CHECK-NEXT: .local i32 11; CHECK-NEXT: # %bb.0: 12; CHECK-NEXT: global.get __stack_pointer 13; CHECK-NEXT: i32.const 32 14; CHECK-NEXT: i32.sub 15; CHECK-NEXT: local.tee 0 16; CHECK-NEXT: global.set __stack_pointer 17; CHECK-NEXT: local.get 0 18; CHECK-NEXT: i32.const 0 19; CHECK-NEXT: i32.store 24 20; CHECK-NEXT: local.get 0 21; CHECK-NEXT: i32.const 0 22; CHECK-NEXT: i32.store 28 23; CHECK-NEXT: block 24; CHECK-NEXT: block 25; CHECK-NEXT: i32.const 0 26; CHECK-NEXT: br_if 0 # 0: down to label1 27; CHECK-NEXT: # %bb.1: 28; CHECK-NEXT: local.get 0 29; CHECK-NEXT: i32.const 2 30; CHECK-NEXT: i32.store 20 31; CHECK-NEXT: local.get 0 32; CHECK-NEXT: i32.const 1 33; CHECK-NEXT: i32.store 24 34; CHECK-NEXT: local.get 0 35; CHECK-NEXT: i32.const 3 36; CHECK-NEXT: i32.store 16 37; CHECK-NEXT: local.get 0 38; CHECK-NEXT: i32.const 4 39; CHECK-NEXT: i32.store 12 40; CHECK-NEXT: br 1 # 1: down to label0 41; CHECK-NEXT: .LBB0_2: 42; CHECK-NEXT: end_block # label1: 43; CHECK-NEXT: local.get 0 44; CHECK-NEXT: i32.const 1 45; CHECK-NEXT: i32.store 16 46; CHECK-NEXT: .LBB0_3: 47; CHECK-NEXT: end_block # label0: 48; CHECK-NEXT: block 49; CHECK-NEXT: block 50; CHECK-NEXT: local.get 0 51; CHECK-NEXT: i32.load 24 52; CHECK-NEXT: br_if 0 # 0: down to label3 53; CHECK-NEXT: # %bb.4: 54; CHECK-NEXT: local.get 0 55; CHECK-NEXT: i32.const 2 56; CHECK-NEXT: i32.store 20 57; CHECK-NEXT: local.get 0 58; CHECK-NEXT: i32.const 1 59; CHECK-NEXT: i32.store 24 60; CHECK-NEXT: local.get 0 61; CHECK-NEXT: i32.const 3 62; CHECK-NEXT: i32.store 16 63; CHECK-NEXT: local.get 0 64; CHECK-NEXT: i32.const 4 65; CHECK-NEXT: i32.store 12 66; CHECK-NEXT: br 1 # 1: down to label2 67; CHECK-NEXT: .LBB0_5: 68; CHECK-NEXT: end_block # label3: 69; CHECK-NEXT: local.get 0 70; CHECK-NEXT: i32.const 1 71; CHECK-NEXT: i32.store 16 72; CHECK-NEXT: .LBB0_6: 73; CHECK-NEXT: end_block # label2: 74; CHECK-NEXT: local.get 0 75; CHECK-NEXT: i32.const 32 76; CHECK-NEXT: i32.add 77; CHECK-NEXT: global.set __stack_pointer 78; CHECK-NEXT: i32.const 0 79; CHECK-NEXT: # fallthrough-return 80 %1 = alloca i32, align 4 81 %2 = alloca i32, align 4 82 %3 = alloca i32, align 4 83 %4 = alloca i32, align 4 84 %5 = alloca i32, align 4 85 store i32 0, i32* %1, align 4 86 store i32 0, i32* %2, align 4 87 %6 = load i32, i32* %2, align 4 88 %7 = icmp ne i32 %6, 0 89 br i1 %7, label %9, label %8 90 91 store i32 1, i32* %2, align 4 92 store i32 2, i32* %3, align 4 93 store i32 3, i32* %4, align 4 94 store i32 4, i32* %5, align 4 95 br label %10 96 97 store i32 1, i32* %4, align 4 98 br label %10 99 100 %11 = load i32, i32* %2, align 4 101 %12 = icmp ne i32 %11, 0 102 br i1 %12, label %14, label %13 103 104 store i32 1, i32* %2, align 4 105 store i32 2, i32* %3, align 4 106 store i32 3, i32* %4, align 4 107 store i32 4, i32* %5, align 4 108 br label %15 109 110 store i32 1, i32* %4, align 4 111 br label %15 112 113 ret i32 0 114} 115 116define dso_local i32 @main() #0 { 117; CHECK-LABEL: main: 118; CHECK: .functype main (i32, i32) -> (i32) 119; CHECK-NEXT: # %bb.0: # %body 120; CHECK-NEXT: call __original_main 121; CHECK-NEXT: # fallthrough-return 122 %1 = alloca i32, align 4 123 %2 = alloca i32, align 4 124 %3 = alloca i32, align 4 125 %4 = alloca i32, align 4 126 %5 = alloca i32, align 4 127 128 store i32 0, i32* %1, align 4 129 store i32 0, i32* @x, align 4 130 store i32 1, i32* %2, align 4 131 store i32 2, i32* %3, align 4 132 store i32 3, i32* %4, align 4 133 store i32 4, i32* %5, align 4 134 store i32 1, i32* @x, align 4 135 call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() 136 store i32 1, i32* %2, align 4 137 store i32 2, i32* %3, align 4 138 store i32 3, i32* %4, align 4 139 store i32 4, i32* %5, align 4 140 ret i32 0 141} 142 143attributes #0 = { noredzone nounwind ssp uwtable "frame-pointer"="all" } 144