1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -mtriple=arm-- -run-pass=machine-outliner -verify-machineinstrs \
3# RUN: %s -o - | FileCheck %s
4
5--- |
6  define void @outline_default_arm() #0 { ret void }
7  define void @outline_default_thumb() #1 { ret void }
8  define void @outline_default_KO_stack_arm() #0 { ret void }
9  define void @outline_default_KO_stack_thumb() #0 { ret void }
10  declare void @bar()
11
12  attributes #0 = { minsize optsize }
13  attributes #1 = { minsize optsize "target-features"="+armv7-a,+thumb-mode" }
14...
15---
16
17name:           outline_default_arm
18tracksRegLiveness: true
19body:             |
20  ; CHECK-LABEL: name: outline_default_arm
21  ; CHECK: bb.0:
22  ; CHECK:   liveins: $lr
23  ; CHECK:   early-clobber $sp = STR_PRE_IMM killed $lr, $sp, -8, 14 /* CC::al */, $noreg
24  ; CHECK:   BL @OUTLINED_FUNCTION_0
25  ; CHECK:   $lr, $sp = LDR_POST_IMM $sp, $noreg, 8, 14 /* CC::al */, $noreg
26  ; CHECK: bb.1:
27  ; CHECK:   liveins: $lr, $r6, $r7, $r8, $r9, $r10, $r11
28  ; CHECK:   early-clobber $sp = STR_PRE_IMM killed $lr, $sp, -8, 14 /* CC::al */, $noreg
29  ; CHECK:   BL @OUTLINED_FUNCTION_0
30  ; CHECK:   $lr, $sp = LDR_POST_IMM $sp, $noreg, 8, 14 /* CC::al */, $noreg
31  ; CHECK: bb.2:
32  ; CHECK:   liveins: $lr, $r6, $r7, $r8, $r9, $r10, $r11
33  ; CHECK:   early-clobber $sp = STR_PRE_IMM killed $lr, $sp, -8, 14 /* CC::al */, $noreg
34  ; CHECK:   BL @OUTLINED_FUNCTION_0
35  ; CHECK:   $lr, $sp = LDR_POST_IMM $sp, $noreg, 8, 14 /* CC::al */, $noreg
36  ; CHECK: bb.3:
37  ; CHECK:   liveins: $lr, $r6, $r7, $r8, $r9, $r10, $r11
38  ; CHECK:   $r2 = MOVr $lr, 14 /* CC::al */, $noreg, $noreg
39  ; CHECK:   BX_RET 14 /* CC::al */, $noreg
40  bb.0:
41    liveins: $lr
42    $r0 = MOVi 1, 14, $noreg, $noreg
43    $r1 = MOVi 1, 14, $noreg, $noreg
44    $r2 = MOVi 1, 14, $noreg, $noreg
45    $r3 = MOVi 1, 14, $noreg, $noreg
46    $r4 = MOVi 1, 14, $noreg, $noreg
47    $r5 = MOVi 1, 14, $noreg, $noreg
48  bb.1:
49    liveins: $lr, $r6, $r7, $r8, $r9, $r10, $r11
50    $r0 = MOVi 1, 14, $noreg, $noreg
51    $r1 = MOVi 1, 14, $noreg, $noreg
52    $r2 = MOVi 1, 14, $noreg, $noreg
53    $r3 = MOVi 1, 14, $noreg, $noreg
54    $r4 = MOVi 1, 14, $noreg, $noreg
55    $r5 = MOVi 1, 14, $noreg, $noreg
56  bb.2:
57    liveins: $lr, $r6, $r7, $r8, $r9, $r10, $r11
58    $r0 = MOVi 1, 14, $noreg, $noreg
59    $r1 = MOVi 1, 14, $noreg, $noreg
60    $r2 = MOVi 1, 14, $noreg, $noreg
61    $r3 = MOVi 1, 14, $noreg, $noreg
62    $r4 = MOVi 1, 14, $noreg, $noreg
63    $r5 = MOVi 1, 14, $noreg, $noreg
64  bb.3:
65    liveins: $lr, $r6, $r7, $r8, $r9, $r10, $r11
66    $r2 = MOVr $lr, 14, $noreg, $noreg
67    BX_RET 14, $noreg
68...
69---
70
71name:           outline_default_thumb
72tracksRegLiveness: true
73body:             |
74  ; CHECK-LABEL: name: outline_default_thumb
75  ; CHECK: bb.0:
76  ; CHECK:   liveins: $lr
77  ; CHECK:   early-clobber $sp = t2STR_PRE killed $lr, $sp, -8, 14 /* CC::al */, $noreg
78  ; CHECK:   tBL 14 /* CC::al */, $noreg, @OUTLINED_FUNCTION_1
79  ; CHECK:   $lr, $sp = t2LDR_POST $sp, 8, 14 /* CC::al */, $noreg
80  ; CHECK: bb.1:
81  ; CHECK:   liveins: $lr, $r4, $r5, $r6, $r7, $r8, $r9, $r10, $r11
82  ; CHECK:   early-clobber $sp = t2STR_PRE killed $lr, $sp, -8, 14 /* CC::al */, $noreg
83  ; CHECK:   tBL 14 /* CC::al */, $noreg, @OUTLINED_FUNCTION_1
84  ; CHECK:   $lr, $sp = t2LDR_POST $sp, 8, 14 /* CC::al */, $noreg
85  ; CHECK: bb.2:
86  ; CHECK:   liveins: $lr, $r4, $r5, $r6, $r7, $r8, $r9, $r10, $r11
87  ; CHECK:   early-clobber $sp = t2STR_PRE killed $lr, $sp, -8, 14 /* CC::al */, $noreg
88  ; CHECK:   tBL 14 /* CC::al */, $noreg, @OUTLINED_FUNCTION_1
89  ; CHECK:   $lr, $sp = t2LDR_POST $sp, 8, 14 /* CC::al */, $noreg
90  ; CHECK: bb.3:
91  ; CHECK:   liveins: $lr, $r4, $r5, $r6, $r7, $r8, $r9, $r10, $r11
92  ; CHECK:   $r2 = tMOVr $lr, 14 /* CC::al */, $noreg
93  ; CHECK:   tBX_RET 14 /* CC::al */, $noreg
94  bb.0:
95    liveins: $lr
96    $r0 = t2MOVi 1, 14, $noreg, $noreg
97    $r1 = t2MOVi 1, 14, $noreg, $noreg
98    $r2 = t2MOVi 1, 14, $noreg, $noreg
99    $r3 = t2MOVi 1, 14, $noreg, $noreg
100  bb.1:
101    liveins: $lr, $r4, $r5, $r6, $r7, $r8, $r9, $r10, $r11
102    $r0 = t2MOVi 1, 14, $noreg, $noreg
103    $r1 = t2MOVi 1, 14, $noreg, $noreg
104    $r2 = t2MOVi 1, 14, $noreg, $noreg
105    $r3 = t2MOVi 1, 14, $noreg, $noreg
106  bb.2:
107    liveins: $lr, $r4, $r5, $r6, $r7, $r8, $r9, $r10, $r11
108    $r0 = t2MOVi 1, 14, $noreg, $noreg
109    $r1 = t2MOVi 1, 14, $noreg, $noreg
110    $r2 = t2MOVi 1, 14, $noreg, $noreg
111    $r3 = t2MOVi 1, 14, $noreg, $noreg
112  bb.3:
113    liveins: $lr, $r4, $r5, $r6, $r7, $r8, $r9, $r10, $r11
114    $r2 = tMOVr $lr, 14, $noreg
115    tBX_RET 14, $noreg
116...
117---
118
119name:           outline_default_KO_stack_arm
120tracksRegLiveness: true
121body:             |
122  ; CHECK-LABEL: name: outline_default_KO_stack_arm
123  ; CHECK: bb.0:
124  ; CHECK:   liveins: $lr
125  ; CHECK:   $r0 = LDRi12 $sp, 0, 14 /* CC::al */, $noreg
126  ; CHECK:   $r1 = MOVi 3, 14 /* CC::al */, $noreg, $noreg
127  ; CHECK:   $r2 = MOVi 3, 14 /* CC::al */, $noreg, $noreg
128  ; CHECK:   $r3 = MOVi 3, 14 /* CC::al */, $noreg, $noreg
129  ; CHECK:   $r4 = MOVi 3, 14 /* CC::al */, $noreg, $noreg
130  ; CHECK:   $r5 = MOVi 3, 14 /* CC::al */, $noreg, $noreg
131  ; CHECK: bb.1:
132  ; CHECK:   liveins: $lr, $r6, $r7, $r8, $r9, $r10, $r11
133  ; CHECK:   $r0 = LDRi12 $sp, 0, 14 /* CC::al */, $noreg
134  ; CHECK:   $r1 = MOVi 3, 14 /* CC::al */, $noreg, $noreg
135  ; CHECK:   $r2 = MOVi 3, 14 /* CC::al */, $noreg, $noreg
136  ; CHECK:   $r3 = MOVi 3, 14 /* CC::al */, $noreg, $noreg
137  ; CHECK:   $r4 = MOVi 3, 14 /* CC::al */, $noreg, $noreg
138  ; CHECK:   $r5 = MOVi 3, 14 /* CC::al */, $noreg, $noreg
139  ; CHECK: bb.2:
140  ; CHECK:   liveins: $lr, $r5, $r6, $r7, $r8, $r9, $r10, $r11
141  ; CHECK:   $r0 = LDRi12 $sp, 0, 14 /* CC::al */, $noreg
142  ; CHECK:   $r1 = MOVi 3, 14 /* CC::al */, $noreg, $noreg
143  ; CHECK:   $r2 = MOVi 3, 14 /* CC::al */, $noreg, $noreg
144  ; CHECK:   $r3 = MOVi 3, 14 /* CC::al */, $noreg, $noreg
145  ; CHECK:   $r4 = MOVi 3, 14 /* CC::al */, $noreg, $noreg
146  ; CHECK:   $r5 = MOVi 3, 14 /* CC::al */, $noreg, $noreg
147  ; CHECK: bb.3:
148  ; CHECK:   liveins: $lr, $r5, $r6, $r7, $r8, $r9, $r10, $r11
149  ; CHECK:   $r2 = MOVr $lr, 14 /* CC::al */, $noreg, $noreg
150  ; CHECK:   BX_RET 14 /* CC::al */, $noreg
151  bb.0:
152    liveins: $lr
153    $r0 = LDRi12 $sp, 0, 14, $noreg
154    $r1 = MOVi 3, 14, $noreg, $noreg
155    $r2 = MOVi 3, 14, $noreg, $noreg
156    $r3 = MOVi 3, 14, $noreg, $noreg
157    $r4 = MOVi 3, 14, $noreg, $noreg
158    $r5 = MOVi 3, 14, $noreg, $noreg
159  bb.1:
160    liveins: $lr, $r6, $r7, $r8, $r9, $r10, $r11
161    $r0 = LDRi12 $sp, 0, 14, $noreg
162    $r1 = MOVi 3, 14, $noreg, $noreg
163    $r2 = MOVi 3, 14, $noreg, $noreg
164    $r3 = MOVi 3, 14, $noreg, $noreg
165    $r4 = MOVi 3, 14, $noreg, $noreg
166    $r5 = MOVi 3, 14, $noreg, $noreg
167  bb.2:
168    liveins: $lr, $r5, $r6, $r7, $r8, $r9, $r10, $r11
169    $r0 = LDRi12 $sp, 0, 14, $noreg
170    $r1 = MOVi 3, 14, $noreg, $noreg
171    $r2 = MOVi 3, 14, $noreg, $noreg
172    $r3 = MOVi 3, 14, $noreg, $noreg
173    $r4 = MOVi 3, 14, $noreg, $noreg
174    $r5 = MOVi 3, 14, $noreg, $noreg
175  bb.3:
176    liveins: $lr, $r5, $r6, $r7, $r8, $r9, $r10, $r11
177    $r2 = MOVr $lr, 14, $noreg, $noreg
178    BX_RET 14, $noreg
179...
180---
181
182name:           outline_default_KO_stack_thumb
183tracksRegLiveness: true
184body:             |
185  ; CHECK-LABEL: name: outline_default_KO_stack_thumb
186  ; CHECK: bb.0:
187  ; CHECK:   liveins: $lr
188  ; CHECK:   $r0 = t2LDRi12 $sp, 0, 14 /* CC::al */, $noreg
189  ; CHECK:   $r1 = t2MOVi 3, 14 /* CC::al */, $noreg, $noreg
190  ; CHECK:   $r2 = t2MOVi 3, 14 /* CC::al */, $noreg, $noreg
191  ; CHECK:   $r3 = t2MOVi 3, 14 /* CC::al */, $noreg, $noreg
192  ; CHECK: bb.1:
193  ; CHECK:   liveins: $lr, $r4, $r5, $r6, $r7, $r8, $r9, $r10, $r11
194  ; CHECK:   $r0 = t2LDRi12 $sp, 0, 14 /* CC::al */, $noreg
195  ; CHECK:   $r1 = t2MOVi 3, 14 /* CC::al */, $noreg, $noreg
196  ; CHECK:   $r2 = t2MOVi 3, 14 /* CC::al */, $noreg, $noreg
197  ; CHECK:   $r3 = t2MOVi 3, 14 /* CC::al */, $noreg, $noreg
198  ; CHECK: bb.2:
199  ; CHECK:   liveins: $lr, $r4, $r5, $r6, $r7, $r8, $r9, $r10, $r11
200  ; CHECK:   $r0 = t2LDRi12 $sp, 0, 14 /* CC::al */, $noreg
201  ; CHECK:   $r1 = t2MOVi 3, 14 /* CC::al */, $noreg, $noreg
202  ; CHECK:   $r2 = t2MOVi 3, 14 /* CC::al */, $noreg, $noreg
203  ; CHECK:   $r3 = t2MOVi 3, 14 /* CC::al */, $noreg, $noreg
204  ; CHECK: bb.3:
205  ; CHECK:   liveins: $lr, $r4, $r5, $r6, $r7, $r8, $r9, $r10, $r11
206  ; CHECK:   $r2 = tMOVr $lr, 14 /* CC::al */, $noreg
207  ; CHECK:   tBX_RET 14 /* CC::al */, $noreg
208  bb.0:
209    liveins: $lr
210    $r0 = t2LDRi12 $sp, 0, 14, $noreg
211    $r1 = t2MOVi 3, 14, $noreg, $noreg
212    $r2 = t2MOVi 3, 14, $noreg, $noreg
213    $r3 = t2MOVi 3, 14, $noreg, $noreg
214  bb.1:
215    liveins: $lr, $r4, $r5, $r6, $r7, $r8, $r9, $r10, $r11
216    $r0 = t2LDRi12 $sp, 0, 14, $noreg
217    $r1 = t2MOVi 3, 14, $noreg, $noreg
218    $r2 = t2MOVi 3, 14, $noreg, $noreg
219    $r3 = t2MOVi 3, 14, $noreg, $noreg
220  bb.2:
221    liveins: $lr, $r4, $r5, $r6, $r7, $r8, $r9, $r10, $r11
222    $r0 = t2LDRi12 $sp, 0, 14, $noreg
223    $r1 = t2MOVi 3, 14, $noreg, $noreg
224    $r2 = t2MOVi 3, 14, $noreg, $noreg
225    $r3 = t2MOVi 3, 14, $noreg, $noreg
226  bb.3:
227    liveins: $lr, $r4, $r5, $r6, $r7, $r8, $r9, $r10, $r11
228    $r2 = tMOVr $lr, 14, $noreg
229    tBX_RET 14, $noreg
230
231
232  ; CHECK-LABEL: name: OUTLINED_FUNCTION_0
233  ; CHECK: bb.0:
234  ; CHECK:   liveins: $lr, $r6, $r7, $r8, $r9, $r10, $r11
235  ; CHECK:   $r0 = MOVi 1, 14 /* CC::al */, $noreg, $noreg
236  ; CHECK:   $r1 = MOVi 1, 14 /* CC::al */, $noreg, $noreg
237  ; CHECK:   $r2 = MOVi 1, 14 /* CC::al */, $noreg, $noreg
238  ; CHECK:   $r3 = MOVi 1, 14 /* CC::al */, $noreg, $noreg
239  ; CHECK:   $r4 = MOVi 1, 14 /* CC::al */, $noreg, $noreg
240  ; CHECK:   $r5 = MOVi 1, 14 /* CC::al */, $noreg, $noreg
241  ; CHECK:   MOVPCLR 14 /* CC::al */, $noreg
242
243  ; CHECK-LABEL: name: OUTLINED_FUNCTION_1
244  ; CHECK: bb.0:
245  ; CHECK:   liveins: $lr, $r4, $r5, $r6, $r7, $r8, $r9, $r10, $r11
246  ; CHECK:   $r0 = t2MOVi 1, 14 /* CC::al */, $noreg, $noreg
247  ; CHECK:   $r1 = t2MOVi 1, 14 /* CC::al */, $noreg, $noreg
248  ; CHECK:   $r2 = t2MOVi 1, 14 /* CC::al */, $noreg, $noreg
249  ; CHECK:   $r3 = t2MOVi 1, 14 /* CC::al */, $noreg, $noreg
250  ; CHECK:   tBX_RET 14 /* CC::al */, $noreg
251
252
253
254