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=mips-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  %1 = alloca i32, align 4
9  %2 = alloca i32, align 4
10  %3 = alloca i32, align 4
11  %4 = alloca i32, align 4
12  %5 = alloca i32, align 4
13  store i32 0, i32* %1, align 4
14  store i32 0, i32* %2, align 4
15  %6 = load i32, i32* %2, align 4
16  %7 = icmp ne i32 %6, 0
17  br i1 %7, label %9, label %8
18
19  store i32 1, i32* %2, align 4
20  store i32 2, i32* %3, align 4
21  store i32 3, i32* %4, align 4
22  store i32 4, i32* %5, align 4
23  br label %10
24
25  store i32 1, i32* %4, align 4
26  br label %10
27
28  %11 = load i32, i32* %2, align 4
29  %12 = icmp ne i32 %11, 0
30  br i1 %12, label %14, label %13
31
32  store i32 1, i32* %2, align 4
33  store i32 2, i32* %3, align 4
34  store i32 3, i32* %4, align 4
35  store i32 4, i32* %5, align 4
36  br label %15
37
38  store i32 1, i32* %4, align 4
39  br label %15
40
41  ret i32 0
42}
43
44define dso_local i32 @main() #0 {
45  %1 = alloca i32, align 4
46  %2 = alloca i32, align 4
47  %3 = alloca i32, align 4
48  %4 = alloca i32, align 4
49  %5 = alloca i32, align 4
50
51  store i32 0, i32* %1, align 4
52  store i32 0, i32* @x, align 4
53  store i32 1, i32* %2, align 4
54  store i32 2, i32* %3, align 4
55  store i32 3, i32* %4, align 4
56  store i32 4, i32* %5, align 4
57  store i32 1, i32* @x, align 4
58  call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"()
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  ret i32 0
64}
65
66attributes #0 = { noredzone nounwind ssp uwtable "frame-pointer"="all" }
67; CHECK-LABEL: check_boundaries:
68; CHECK:       # %bb.0:
69; CHECK-NEXT:    addiu $sp, $sp, -32
70; CHECK-NEXT:    .cfi_def_cfa_offset 32
71; CHECK-NEXT:    sw $ra, 28($sp) # 4-byte Folded Spill
72; CHECK-NEXT:    sw $fp, 24($sp) # 4-byte Folded Spill
73; CHECK-NEXT:    .cfi_offset 31, -4
74; CHECK-NEXT:    .cfi_offset 30, -8
75; CHECK-NEXT:    move $fp, $sp
76; CHECK-NEXT:    .cfi_def_cfa_register 30
77; CHECK-NEXT:    sw $zero, 16($fp)
78; CHECK-NEXT:    b $BB0_3
79; CHECK-NEXT:    sw $zero, 20($fp)
80; CHECK-NEXT:  # %bb.1:
81; CHECK-NEXT:    addiu $1, $zero, 1
82; CHECK-NEXT:    sw $1, 8($fp)
83; CHECK-NEXT:    lw $1, 16($fp)
84; CHECK-NEXT:    beqz $1, $BB0_4
85; CHECK-NEXT:    nop
86; CHECK-NEXT:  $BB0_2:
87; CHECK-NEXT:    addiu $1, $zero, 1
88; CHECK-NEXT:    j $BB0_5
89; CHECK-NEXT:    sw $1, 8($fp)
90; CHECK-NEXT:  $BB0_3:
91; CHECK-NEXT:    addiu $1, $zero, 2
92; CHECK-NEXT:    sw $1, 12($fp)
93; CHECK-NEXT:    addiu $1, $zero, 1
94; CHECK-NEXT:    sw $1, 16($fp)
95; CHECK-NEXT:    addiu $1, $zero, 3
96; CHECK-NEXT:    sw $1, 8($fp)
97; CHECK-NEXT:    addiu $1, $zero, 4
98; CHECK-NEXT:    sw $1, 4($fp)
99; CHECK-NEXT:    lw $1, 16($fp)
100; CHECK-NEXT:    bnez $1, $BB0_2
101; CHECK-NEXT:    nop
102; CHECK-NEXT:  $BB0_4:
103; CHECK-NEXT:    addiu $1, $zero, 2
104; CHECK-NEXT:    sw $1, 12($fp)
105; CHECK-NEXT:    addiu $1, $zero, 1
106; CHECK-NEXT:    sw $1, 16($fp)
107; CHECK-NEXT:    addiu $1, $zero, 3
108; CHECK-NEXT:    sw $1, 8($fp)
109; CHECK-NEXT:    addiu $1, $zero, 4
110; CHECK-NEXT:    sw $1, 4($fp)
111; CHECK-NEXT:  $BB0_5:
112; CHECK-NEXT:    addiu $2, $zero, 0
113; CHECK-NEXT:    move $sp, $fp
114; CHECK-NEXT:    lw $fp, 24($sp) # 4-byte Folded Reload
115; CHECK-NEXT:    lw $ra, 28($sp) # 4-byte Folded Reload
116; CHECK-NEXT:    jr $ra
117; CHECK-NEXT:    addiu $sp, $sp, 32
118;
119; CHECK-LABEL: main:
120; CHECK:       # %bb.0:
121; CHECK-NEXT:    addiu $sp, $sp, -32
122; CHECK-NEXT:    .cfi_def_cfa_offset 32
123; CHECK-NEXT:    sw $ra, 28($sp) # 4-byte Folded Spill
124; CHECK-NEXT:    sw $fp, 24($sp) # 4-byte Folded Spill
125; CHECK-NEXT:    .cfi_offset 31, -4
126; CHECK-NEXT:    .cfi_offset 30, -8
127; CHECK-NEXT:    move $fp, $sp
128; CHECK-NEXT:    .cfi_def_cfa_register 30
129; CHECK-NEXT:    lui $1, %hi(x)
130; CHECK-NEXT:    addiu $2, $zero, 1
131; CHECK-NEXT:    sw $2, %lo(x)($1)
132; CHECK-NEXT:    sw $2, 16($fp)
133; CHECK-NEXT:    addiu $1, $zero, 2
134; CHECK-NEXT:    sw $1, 12($fp)
135; CHECK-NEXT:    addiu $3, $zero, 3
136; CHECK-NEXT:    sw $3, 8($fp)
137; CHECK-NEXT:    addiu $4, $zero, 4
138; CHECK-NEXT:    sw $4, 4($fp)
139; CHECK-NEXT:    sw $zero, 20($fp)
140; CHECK-NEXT:    #APP
141; CHECK-NEXT:    #NO_APP
142; CHECK-NEXT:    sw $1, 12($fp)
143; CHECK-NEXT:    sw $2, 16($fp)
144; CHECK-NEXT:    sw $3, 8($fp)
145; CHECK-NEXT:    sw $4, 4($fp)
146; CHECK-NEXT:    addiu $2, $zero, 0
147; CHECK-NEXT:    move $sp, $fp
148; CHECK-NEXT:    lw $fp, 24($sp) # 4-byte Folded Reload
149; CHECK-NEXT:    lw $ra, 28($sp) # 4-byte Folded Reload
150; CHECK-NEXT:    jr $ra
151; CHECK-NEXT:    addiu $sp, $sp, 32
152