xref: /llvm-project/llvm/test/CodeGen/PowerPC/ctrloops32.mir (revision d9004dfbabc62887f09775297436792077ce4496)
1# RUN: llc -ppc-asm-full-reg-names -mtriple=powerpc-ibm-aix-xcoff \
2# RUN:   -run-pass=ppc-ctrloops %s -o - -verify-machineinstrs | FileCheck %s
3
4---
5name:            test_success1
6# CHECK: test_success1
7
8tracksRegLiveness: true
9body:             |
10  bb.0.entry:
11
12    %0:gprc = LI 2048
13    ; CHECK: MTCTRloop
14    ; CHECK: BDNZ
15    ; CHECK-NOT: ADDI
16    ; CHECK-NOT: CMPLWI
17    ; CHECK-NOT: BC
18    MTCTRloop killed %0:gprc, implicit-def dead $ctr
19
20  bb.1:
21
22    %1:crbitrc = DecreaseCTRloop 1, implicit-def dead $ctr, implicit $ctr
23    BC killed %1:crbitrc, %bb.1
24    B %bb.2
25
26  bb.2:
27
28    BLR implicit $lr, implicit $rm
29...
30---
31name:            test_fail_clobber
32# CHECK: test_fail_clobber
33tracksRegLiveness: true
34body:             |
35  bb.0.entry:
36
37    %0:gprc = LI 2048
38    ; CHECK-NOT: MTCTRloop
39    ; CHECK-NOT: BDNZ
40    ; CHECK: ADDI
41    ; CHECK: CMPLWI
42    ; CHECK: BC
43    MTCTRloop killed %0:gprc, implicit-def dead $ctr
44
45  bb.1:
46
47    INLINEASM &"", 1 /* sideeffect attdialect */, 12 /* clobber */, implicit-def early-clobber $ctr
48    %1:crbitrc = DecreaseCTRloop 1, implicit-def dead $ctr, implicit $ctr
49    BC killed %1:crbitrc, %bb.1
50    B %bb.2
51
52  bb.2:
53
54    BLR implicit $lr, implicit $rm
55...
56---
57name:            test_fail_use_in_loop
58# CHECK: test_fail_use_in_loop
59tracksRegLiveness: true
60body:             |
61  bb.0.entry:
62
63    %0:gprc = LI 2048
64    ; CHECK-NOT: MTCTRloop
65    ; CHECK-NOT: BDNZ
66    ; CHECK: ADDI
67    ; CHECK: CMPLWI
68    ; CHECK: BC
69    MTCTRloop killed %0:gprc, implicit-def dead $ctr
70
71  bb.1:
72
73    %1:gprc = MFCTR implicit $ctr
74    %2:crbitrc = DecreaseCTRloop 1, implicit-def dead $ctr, implicit $ctr
75    BC killed %2:crbitrc, %bb.1
76    B %bb.2
77
78  bb.2:
79
80    BLR implicit $lr, implicit $rm
81...
82---
83name:            test_fail_call_in_preheader_after_mtctr
84# CHECK: test_fail_call_in_preheader_after_mtctr
85tracksRegLiveness: true
86body:             |
87  bb.0.entry:
88
89    %0:gprc = LI 2048
90    ; CHECK-NOT: MTCTR
91    ; CHECK-NOT: BDNZ
92    ; CHECK: ADDI
93    ; CHECK: CMPLWI
94    ; CHECK: BC
95    MTCTRloop killed %0:gprc, implicit-def dead $ctr
96    BL @test_fail_use_in_loop, csr_aix32, implicit-def dead $lr, implicit $rm
97
98  bb.1:
99
100    %1:crbitrc = DecreaseCTRloop 1, implicit-def dead $ctr, implicit $ctr
101    BC killed %1:crbitrc, %bb.1
102    B %bb.2
103
104  bb.2:
105
106    BLR implicit $lr, implicit $rm
107...
108---
109name:            test_succ_call_in_preheader_before_mtctr
110# CHECK: test_succ_call_in_preheader_before_mtctr
111tracksRegLiveness: true
112body:             |
113  bb.0.entry:
114
115    %0:gprc = LI 2048
116    BL @test_fail_use_in_loop, csr_aix32, implicit-def dead $lr, implicit $rm
117    ; CHECK: MTCTR
118    ; CHECK: BDNZ
119    ; CHECK-NOT: ADDI
120    ; CHECK-NOT: CMPLWI
121    ; CHECK-NOT: BC
122    MTCTRloop killed %0:gprc, implicit-def dead $ctr
123
124  bb.1:
125
126    %1:crbitrc = DecreaseCTRloop 1, implicit-def dead $ctr, implicit $ctr
127    BC killed %1:crbitrc, %bb.1
128    B %bb.2
129
130  bb.2:
131
132    BLR implicit $lr, implicit $rm
133...
134---
135name:            test_fail_call_in_loop
136# CHECK: test_fail_call_in_loop
137tracksRegLiveness: true
138body:             |
139  bb.0.entry:
140
141    %0:gprc = LI 2048
142    ; CHECK-NOT: MTCTR
143    ; CHECK-NOT: BDNZ
144    ; CHECK: ADDI
145    ; CHECK: CMPLWI
146    ; CHECK: BC
147    MTCTRloop killed %0:gprc, implicit-def dead $ctr
148
149  bb.1:
150
151    BL @test_fail_use_in_loop, csr_aix32, implicit-def dead $lr, implicit $rm
152    %1:crbitrc = DecreaseCTRloop 1, implicit-def dead $ctr, implicit $ctr
153    BC killed %1:crbitrc, %bb.1
154    B %bb.2
155
156  bb.2:
157
158    BLR implicit $lr, implicit $rm
159...
160---
161name:            test_fail_indirect_call_in_loop
162# CHECK: test_fail_indirect_call_in_loop
163tracksRegLiveness: true
164body:             |
165  bb.0.entry:
166   liveins: $r3, $r4
167
168    %0:gprc = LI 2048
169    ; CHECK-NOT: MTCTR
170    ; CHECK-NOT: BDNZ
171    ; CHECK: ADDI
172    ; CHECK: CMPLWI
173    ; CHECK: BC
174    renamable %1:crrc = CMPLW killed renamable $r3, killed renamable $r4
175    renamable %2:crbitrc = COPY %1.sub_gt
176    MTLR %0:gprc, implicit-def $lr
177    MTCTRloop %0:gprc, implicit-def dead $ctr
178
179  bb.1:
180
181    BCLRL renamable %2, implicit $lr, implicit $rm
182    %3:crbitrc = DecreaseCTRloop 1, implicit-def dead $ctr, implicit $ctr
183    BC killed %3:crbitrc, %bb.1
184    B %bb.2
185
186  bb.2:
187
188    BLR implicit $lr, implicit $rm
189...
190---
191name:            test_fail_livein_preheader
192# CHECK: test_fail_livein_preheader
193tracksRegLiveness: true
194body:             |
195  bb.0.entry:
196    liveins: $ctr
197
198    %0:gprc = LI 2048
199    ; CHECK-NOT: MTCTRloop
200    ; CHECK-NOT: BDNZ
201    ; CHECK: ADDI
202    ; CHECK: CMPLWI
203    ; CHECK: BC
204    MTCTRloop killed %0:gprc, implicit-def dead $ctr
205
206  bb.1:
207
208    %1:crbitrc = DecreaseCTRloop 1, implicit-def dead $ctr, implicit $ctr
209    BC killed %1:crbitrc, %bb.1
210    B %bb.2
211
212  bb.2:
213
214    BLR implicit $lr, implicit $rm
215...
216---
217name:            test_fail_def_preheader
218# CHECK: test_fail_def_preheader
219tracksRegLiveness: true
220body:             |
221  bb.0.entry:
222
223    INLINEASM &"", 1 /* sideeffect attdialect */, 12 /* clobber */, implicit-def early-clobber $ctr
224    %0:gprc = LI 2048
225    ; CHECK-NOT: MTCTRloop
226    ; CHECK-NOT: BDNZ
227    ; CHECK: ADDI
228    ; CHECK: CMPLWI
229    ; CHECK: BC
230    MTCTRloop killed %0:gprc, implicit-def dead $ctr
231
232  bb.1:
233
234    %1:crbitrc = DecreaseCTRloop 1, implicit-def dead $ctr, implicit $ctr
235    BC killed %1:crbitrc, %bb.1
236    B %bb.2
237
238  bb.2:
239
240    BLR implicit $lr, implicit $rm
241...
242---
243name:            test_success_only_use_preheader
244# CHECK: test_success_only_use_preheader
245tracksRegLiveness: true
246body:             |
247  bb.0.entry:
248
249    %0:gprc = MFCTR implicit $ctr
250    %1:gprc = LI 2048
251    ; CHECK: MTCTRloop
252    ; CHECK: BDNZ
253    ; CHECK-NOT: ADDI
254    ; CHECK-NOT: CMPLWI
255    ; CHECK-NOT: BC
256    MTCTRloop killed %1:gprc, implicit-def dead $ctr
257
258  bb.1:
259
260    %2:crbitrc = DecreaseCTRloop 1, implicit-def dead $ctr, implicit $ctr
261    BC killed %2:crbitrc, %bb.1
262    B %bb.2
263
264  bb.2:
265
266    BLR implicit $lr, implicit $rm
267...
268---
269name:            test_fail_use_after_mtctr
270# CHECK: test_fail_use_after_mtctr
271tracksRegLiveness: true
272body:             |
273  bb.0.entry:
274
275    %0:gprc = LI 2048
276    ; CHECK-NOT: MTCTRloop
277    ; CHECK-NOT: BDNZ
278    ; CHECK: ADDI
279    ; CHECK: CMPLWI
280    ; CHECK: BC
281    MTCTRloop killed %0:gprc, implicit-def dead $ctr
282    %1:gprc = MFCTR implicit $ctr
283
284  bb.1:
285
286    %2:crbitrc = DecreaseCTRloop 1, implicit-def dead $ctr, implicit $ctr
287    BC killed %2:crbitrc, %bb.1
288    B %bb.2
289
290  bb.2:
291
292    BLR implicit $lr, implicit $rm
293...
294---
295name:            test_fail_def_after_mtctr
296# CHECK: test_fail_def_after_mtctr
297tracksRegLiveness: true
298body:             |
299  bb.0.entry:
300
301    %0:gprc = LI 2048
302    ; CHECK-NOT: MTCTRloop
303    ; CHECK-NOT: BDNZ
304    ; CHECK: ADDI
305    ; CHECK: CMPLWI
306    ; CHECK: BC
307    MTCTRloop killed %0:gprc, implicit-def dead $ctr
308    INLINEASM &"", 1 /* sideeffect attdialect */, 12 /* clobber */, implicit-def early-clobber $ctr
309
310  bb.1:
311
312    %2:crbitrc = DecreaseCTRloop 1, implicit-def dead $ctr, implicit $ctr
313    BC killed %2:crbitrc, %bb.1
314    B %bb.2
315
316  bb.2:
317
318    BLR implicit $lr, implicit $rm
319...
320---
321name:            test_success_def_after_loop
322# CHECK: test_success_def_after_loop
323tracksRegLiveness: true
324body:             |
325  bb.0.entry:
326
327    %0:gprc = LI 2048
328    ; CHECK: MTCTRloop
329    ; CHECK: BDNZ
330    ; CHECK-NOT: ADDI
331    ; CHECK-NOT: CMPLWI
332    ; CHECK-NOT: BC
333    MTCTRloop killed %0:gprc, implicit-def dead $ctr
334
335  bb.1:
336
337    %2:crbitrc = DecreaseCTRloop 1, implicit-def dead $ctr, implicit $ctr
338    BC killed %2:crbitrc, %bb.1
339    B %bb.2
340
341  bb.2:
342    INLINEASM &"", 1 /* sideeffect attdialect */, 12 /* clobber */, implicit-def early-clobber $ctr
343
344    BLR implicit $lr, implicit $rm
345...
346