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