1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -enable-machine-outliner -mtriple=sparc-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:    save %sp, -112, %sp
12; CHECK-NEXT:    .cfi_def_cfa_register %fp
13; CHECK-NEXT:    .cfi_window_save
14; CHECK-NEXT:    .cfi_register %o7, %i7
15; CHECK-NEXT:    st %g0, [%fp+-4]
16; CHECK-NEXT:    mov %g0, %i0
17; CHECK-NEXT:    cmp %i0, 0
18; CHECK-NEXT:    st %g0, [%fp+-8]
19; CHECK-NEXT:    be .LBB0_1
20; CHECK-NEXT:    mov 1, %i0
21; CHECK-NEXT:  ! %bb.2:
22; CHECK-NEXT:    ba .LBB0_3
23; CHECK-NEXT:    st %i0, [%fp+-16]
24; CHECK-NEXT:  .LBB0_1:
25; CHECK-NEXT:    st %i0, [%fp+-8]
26; CHECK-NEXT:    mov 2, %i0
27; CHECK-NEXT:    st %i0, [%fp+-12]
28; CHECK-NEXT:    mov 3, %i0
29; CHECK-NEXT:    st %i0, [%fp+-16]
30; CHECK-NEXT:    mov 4, %i0
31; CHECK-NEXT:    st %i0, [%fp+-20]
32; CHECK-NEXT:  .LBB0_3:
33; CHECK-NEXT:    ld [%fp+-8], %i0
34; CHECK-NEXT:    cmp %i0, 0
35; CHECK-NEXT:    be .LBB0_4
36; CHECK-NEXT:    nop
37; CHECK-NEXT:  ! %bb.5:
38; CHECK-NEXT:    mov 1, %i0
39; CHECK-NEXT:    ba .LBB0_6
40; CHECK-NEXT:    st %i0, [%fp+-16]
41; CHECK-NEXT:  .LBB0_4:
42; CHECK-NEXT:    mov 1, %i0
43; CHECK-NEXT:    st %i0, [%fp+-8]
44; CHECK-NEXT:    mov 2, %i0
45; CHECK-NEXT:    st %i0, [%fp+-12]
46; CHECK-NEXT:    mov 3, %i0
47; CHECK-NEXT:    st %i0, [%fp+-16]
48; CHECK-NEXT:    mov 4, %i0
49; CHECK-NEXT:    st %i0, [%fp+-20]
50; CHECK-NEXT:  .LBB0_6:
51; CHECK-NEXT:    ret
52; CHECK-NEXT:    restore %g0, %g0, %o0
53  %1 = alloca i32, align 4
54  %2 = alloca i32, align 4
55  %3 = alloca i32, align 4
56  %4 = alloca i32, align 4
57  %5 = alloca i32, align 4
58  store i32 0, i32* %1, align 4
59  store i32 0, i32* %2, align 4
60  %6 = load i32, i32* %2, align 4
61  %7 = icmp ne i32 %6, 0
62  br i1 %7, label %9, label %8
63
64  store i32 1, i32* %2, align 4
65  store i32 2, i32* %3, align 4
66  store i32 3, i32* %4, align 4
67  store i32 4, i32* %5, align 4
68  br label %10
69
70  store i32 1, i32* %4, align 4
71  br label %10
72
73  %11 = load i32, i32* %2, align 4
74  %12 = icmp ne i32 %11, 0
75  br i1 %12, label %14, label %13
76
77  store i32 1, i32* %2, align 4
78  store i32 2, i32* %3, align 4
79  store i32 3, i32* %4, align 4
80  store i32 4, i32* %5, align 4
81  br label %15
82
83  store i32 1, i32* %4, align 4
84  br label %15
85
86  ret i32 0
87}
88
89define dso_local i32 @main() #0 {
90; CHECK-LABEL: main:
91; CHECK:         .cfi_startproc
92; CHECK-NEXT:  ! %bb.0:
93; CHECK-NEXT:    save %sp, -112, %sp
94; CHECK-NEXT:    .cfi_def_cfa_register %fp
95; CHECK-NEXT:    .cfi_window_save
96; CHECK-NEXT:    .cfi_register %o7, %i7
97; CHECK-NEXT:    st %g0, [%fp+-4]
98; CHECK-NEXT:    sethi %hi(x), %i0
99; CHECK-NEXT:    mov 1, %i1
100; CHECK-NEXT:    st %i1, [%fp+-8]
101; CHECK-NEXT:    mov 2, %i2
102; CHECK-NEXT:    st %i2, [%fp+-12]
103; CHECK-NEXT:    mov 3, %i3
104; CHECK-NEXT:    st %i3, [%fp+-16]
105; CHECK-NEXT:    mov 4, %i4
106; CHECK-NEXT:    st %i4, [%fp+-20]
107; CHECK-NEXT:    st %i1, [%i0+%lo(x)]
108; CHECK-NEXT:    !APP
109; CHECK-NEXT:    !NO_APP
110; CHECK-NEXT:    st %i1, [%fp+-8]
111; CHECK-NEXT:    st %i2, [%fp+-12]
112; CHECK-NEXT:    st %i3, [%fp+-16]
113; CHECK-NEXT:    mov %g0, %i0
114; CHECK-NEXT:    st %i4, [%fp+-20]
115; CHECK-NEXT:    ret
116; CHECK-NEXT:    restore
117  %1 = alloca i32, align 4
118  %2 = alloca i32, align 4
119  %3 = alloca i32, align 4
120  %4 = alloca i32, align 4
121  %5 = alloca i32, align 4
122
123  store i32 0, i32* %1, align 4
124  store i32 0, i32* @x, align 4
125  store i32 1, i32* %2, align 4
126  store i32 2, i32* %3, align 4
127  store i32 3, i32* %4, align 4
128  store i32 4, i32* %5, align 4
129  store i32 1, i32* @x, align 4
130  call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"()
131  store i32 1, i32* %2, align 4
132  store i32 2, i32* %3, align 4
133  store i32 3, i32* %4, align 4
134  store i32 4, i32* %5, align 4
135  ret i32 0
136}
137
138attributes #0 = { noredzone nounwind ssp uwtable "frame-pointer"="all" }
139