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