[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / PowerPC / ctrloops64.mir
blobde37e6accd40e83b598dd798810243ab19696e86
1 # RUN: llc -ppc-asm-full-reg-names -mtriple=powerpc64le-unknown-linux-gnu \
2 # RUN:   -run-pass=ppc-ctrloops %s -o - -verify-machineinstrs | FileCheck %s
3 # RUN: llc -ppc-asm-full-reg-names -mtriple=powerpc64-ibm-aix-xcoff \
4 # RUN:   -run-pass=ppc-ctrloops %s -o - -verify-machineinstrs | FileCheck %s
6 ---
7 name:            test_success1
8 # CHECK: test_success1
10 tracksRegLiveness: true
11 body:             |
12   bb.0.entry:
14     %0:g8rc = LI8 2048
15     ; CHECK: MTCTR8loop
16     ; CHECK: BDNZ8
17     ; CHECK-NOT: ADDI8
18     ; CHECK-NOT: CMPLDI
19     ; CHECK-NOT: BC
20     MTCTR8loop killed %0:g8rc, implicit-def dead $ctr8
22   bb.1:
24     %1:crbitrc = DecreaseCTR8loop 1, implicit-def dead $ctr8, implicit $ctr8
25     BC killed %1:crbitrc, %bb.1
26     B %bb.2
28   bb.2:
30     BLR8 implicit $lr8, implicit $rm
31 ...
32 ---
33 name:            test_fail_clobber
34 # CHECK: test_fail_clobber
35 tracksRegLiveness: true
36 body:             |
37   bb.0.entry:
39     %0:g8rc = LI8 2048
40     ; CHECK-NOT: MTCTR8loop
41     ; CHECK-NOT: BDNZ8
42     ; CHECK: ADDI8
43     ; CHECK: CMPLDI
44     ; CHECK: BC
45     MTCTR8loop killed %0:g8rc, implicit-def dead $ctr8
47   bb.1:
49     INLINEASM &"", 1 /* sideeffect attdialect */, 12 /* clobber */, implicit-def early-clobber $ctr8
50     %1:crbitrc = DecreaseCTR8loop 1, implicit-def dead $ctr8, implicit $ctr8
51     BC killed %1:crbitrc, %bb.1
52     B %bb.2
54   bb.2:
56     BLR8 implicit $lr8, implicit $rm
57 ...
58 ---
59 name:            test_fail_use_in_loop
60 # CHECK: test_fail_use_in_loop
61 tracksRegLiveness: true
62 body:             |
63   bb.0.entry:
65     %0:g8rc = LI8 2048
66     ; CHECK-NOT: MTCTR8loop
67     ; CHECK-NOT: BDNZ8
68     ; CHECK: ADDI8
69     ; CHECK: CMPLDI
70     ; CHECK: BC
71     MTCTR8loop killed %0:g8rc, implicit-def dead $ctr8
73   bb.1:
75     %1:g8rc = MFCTR8 implicit $ctr8
76     %2:crbitrc = DecreaseCTR8loop 1, implicit-def dead $ctr8, implicit $ctr8
77     BC killed %2:crbitrc, %bb.1
78     B %bb.2
80   bb.2:
82     BLR8 implicit $lr8, implicit $rm
83 ...
84 ---
85 name:            test_fail_call_in_preheader_after_mtctr
86 # CHECK: test_fail_call_in_preheader_after_mtctr
87 tracksRegLiveness: true
88 body:             |
89   bb.0.entry:
91     %0:g8rc = LI8 2048
92     ; CHECK-NOT: MTCTR8
93     ; CHECK-NOT: BDNZ8
94     ; CHECK: ADDI8
95     ; CHECK: CMPLDI
96     ; CHECK: BC
97     MTCTR8loop killed %0:g8rc, implicit-def dead $ctr8
98     BL8 @test_fail_use_in_loop, csr_ppc64, implicit-def dead $lr8, implicit $rm
100   bb.1:
102     %1:crbitrc = DecreaseCTR8loop 1, implicit-def dead $ctr8, implicit $ctr8
103     BC killed %1:crbitrc, %bb.1
104     B %bb.2
106   bb.2:
108     BLR8 implicit $lr8, implicit $rm
111 name:            test_succ_call_in_preheader_before_mtctr
112 # CHECK: test_succ_call_in_preheader_before_mtctr
113 tracksRegLiveness: true
114 body:             |
115   bb.0.entry:
117     %0:g8rc = LI8 2048
118     BL8 @test_fail_use_in_loop, csr_ppc64, implicit-def dead $lr8, implicit $rm
119     ; CHECK: MTCTR8
120     ; CHECK: BDNZ8
121     ; CHECK-NOT: ADDI8
122     ; CHECK-NOT: CMPLDI
123     ; CHECK-NOT: BC
124     MTCTR8loop killed %0:g8rc, implicit-def dead $ctr8
126   bb.1:
128     %1:crbitrc = DecreaseCTR8loop 1, implicit-def dead $ctr8, implicit $ctr8
129     BC killed %1:crbitrc, %bb.1
130     B %bb.2
132   bb.2:
134     BLR8 implicit $lr8, implicit $rm
137 name:            test_fail_call_in_loop
138 # CHECK: test_fail_call_in_loop
139 tracksRegLiveness: true
140 body:             |
141   bb.0.entry:
143     %0:g8rc = LI8 2048
144     ; CHECK-NOT: MTCTR8
145     ; CHECK-NOT: BDNZ8
146     ; CHECK: ADDI8
147     ; CHECK: CMPLDI
148     ; CHECK: BC
149     MTCTR8loop killed %0:g8rc, implicit-def dead $ctr8
151   bb.1:
153     BL8 @test_fail_use_in_loop, csr_ppc64, implicit-def dead $lr8, implicit $rm
154     %1:crbitrc = DecreaseCTR8loop 1, implicit-def dead $ctr8, implicit $ctr8
155     BC killed %1:crbitrc, %bb.1
156     B %bb.2
158   bb.2:
160     BLR8 implicit $lr8, implicit $rm
163 name:            test_fail_indirect_call_in_loop
164 # CHECK: test_fail_indirect_call_in_loop
165 tracksRegLiveness: true
166 body:             |
167   bb.0.entry:
168     liveins: $x3, $x4
170     %0:g8rc = LI8 2048
171     ; CHECK-NOT: MTCTR8
172     ; CHECK-NOT: BDNZ8
173     ; CHECK: ADDI8
174     ; CHECK: CMPLDI
175     ; CHECK: BC
176     renamable %1:crrc = CMPLD killed renamable $x3, killed renamable $x4
177     renamable %2:crbitrc = COPY %1.sub_gt
178     MTLR8 %0:g8rc, implicit-def $lr8
179     MTCTR8loop killed %0:g8rc, implicit-def dead $ctr8
181   bb.1:
183     BCLRL renamable %2, implicit $lr, implicit $rm
184     %3:crbitrc = DecreaseCTR8loop 1, implicit-def dead $ctr8, implicit $ctr8
185     BC killed %3:crbitrc, %bb.1
186     B %bb.2
188   bb.2:
190     BLR8 implicit $lr8, implicit $rm
193 name:            test_fail_livein_preheader
194 # CHECK: test_fail_livein_preheader
195 tracksRegLiveness: true
196 body:             |
197   bb.0.entry:
198     liveins: $ctr8
200     %0:g8rc = LI8 2048
201     ; CHECK-NOT: MTCTR8loop
202     ; CHECK-NOT: BDNZ8
203     ; CHECK: ADDI8
204     ; CHECK: CMPLDI
205     ; CHECK: BC
206     MTCTR8loop killed %0:g8rc, implicit-def dead $ctr8
208   bb.1:
210     %1:crbitrc = DecreaseCTR8loop 1, implicit-def dead $ctr8, implicit $ctr8
211     BC killed %1:crbitrc, %bb.1
212     B %bb.2
214   bb.2:
216     BLR8 implicit $lr8, implicit $rm
219 name:            test_fail_def_preheader
220 # CHECK: test_fail_def_preheader
221 tracksRegLiveness: true
222 body:             |
223   bb.0.entry:
225     INLINEASM &"", 1 /* sideeffect attdialect */, 12 /* clobber */, implicit-def early-clobber $ctr8
226     %0:g8rc = LI8 2048
227     ; CHECK-NOT: MTCTR8loop
228     ; CHECK-NOT: BDNZ8
229     ; CHECK: ADDI8
230     ; CHECK: CMPLDI
231     ; CHECK: BC
232     MTCTR8loop killed %0:g8rc, implicit-def dead $ctr8
234   bb.1:
236     %1:crbitrc = DecreaseCTR8loop 1, implicit-def dead $ctr8, implicit $ctr8
237     BC killed %1:crbitrc, %bb.1
238     B %bb.2
240   bb.2:
242     BLR8 implicit $lr8, implicit $rm
245 name:            test_success_only_use_preheader
246 # CHECK: test_success_only_use_preheader
247 tracksRegLiveness: true
248 body:             |
249   bb.0.entry:
251     %0:g8rc = MFCTR8 implicit $ctr8
252     %1:g8rc = LI8 2048
253     ; CHECK: MTCTR8loop
254     ; CHECK: BDNZ8
255     ; CHECK-NOT: ADDI8
256     ; CHECK-NOT: CMPLDI
257     ; CHECK-NOT: BC
258     MTCTR8loop killed %1:g8rc, implicit-def dead $ctr8
260   bb.1:
262     %2:crbitrc = DecreaseCTR8loop 1, implicit-def dead $ctr8, implicit $ctr8
263     BC killed %2:crbitrc, %bb.1
264     B %bb.2
266   bb.2:
268     BLR8 implicit $lr8, implicit $rm
271 name:            test_fail_use_after_mtctr
272 # CHECK: test_fail_use_after_mtctr
273 tracksRegLiveness: true
274 body:             |
275   bb.0.entry:
277     %0:g8rc = LI8 2048
278     ; CHECK-NOT: MTCTR8loop
279     ; CHECK-NOT: BDNZ8
280     ; CHECK: ADDI8
281     ; CHECK: CMPLDI
282     ; CHECK: BC
283     MTCTR8loop killed %0:g8rc, implicit-def dead $ctr8
284     %1:g8rc = MFCTR8 implicit $ctr8
286   bb.1:
288     %2:crbitrc = DecreaseCTR8loop 1, implicit-def dead $ctr8, implicit $ctr8
289     BC killed %2:crbitrc, %bb.1
290     B %bb.2
292   bb.2:
294     BLR8 implicit $lr8, implicit $rm
297 name:            test_fail_def_after_mtctr
298 # CHECK: test_fail_def_after_mtctr
299 tracksRegLiveness: true
300 body:             |
301   bb.0.entry:
303     %0:g8rc = LI8 2048
304     ; CHECK-NOT: MTCTR8loop
305     ; CHECK-NOT: BDNZ8
306     ; CHECK: ADDI8
307     ; CHECK: CMPLDI
308     ; CHECK: BC
309     MTCTR8loop killed %0:g8rc, implicit-def dead $ctr8
310     INLINEASM &"", 1 /* sideeffect attdialect */, 12 /* clobber */, implicit-def early-clobber $ctr8
312   bb.1:
314     %2:crbitrc = DecreaseCTR8loop 1, implicit-def dead $ctr8, implicit $ctr8
315     BC killed %2:crbitrc, %bb.1
316     B %bb.2
318   bb.2:
320     BLR8 implicit $lr8, implicit $rm
323 name:            test_success_def_after_loop
324 # CHECK: test_success_def_after_loop
325 tracksRegLiveness: true
326 body:             |
327   bb.0.entry:
329     %0:g8rc = LI8 2048
330     ; CHECK: MTCTR8loop
331     ; CHECK: BDNZ8
332     ; CHECK-NOT: ADDI8
333     ; CHECK-NOT: CMPLDI
334     ; CHECK-NOT: BC
335     MTCTR8loop killed %0:g8rc, implicit-def dead $ctr8
337   bb.1:
339     %2:crbitrc = DecreaseCTR8loop 1, implicit-def dead $ctr8, implicit $ctr8
340     BC killed %2:crbitrc, %bb.1
341     B %bb.2
343   bb.2:
344     INLINEASM &"", 1 /* sideeffect attdialect */, 12 /* clobber */, implicit-def early-clobber $ctr8
346     BLR8 implicit $lr8, implicit $rm
349 name:            test_fail_dead_def_in_preheader
350 # CHECK: test_fail_dead_def_in_preheader
351 tracksRegLiveness: true
352 body:             |
353   bb.0.entry:
355     %0:g8rc = LI8 2048
356     %1:g8rc = LI8 1024
357     MTCTR8loop killed %0:g8rc, implicit-def dead $ctr8
358     MTCTR8 killed %1:g8rc, implicit-def dead $ctr8
359     ; CHECK-NOT: MTCTR8loop
360     ; CHECK-NOT: BDNZ8
361     ; CHECK: ADDI8
362     ; CHECK: CMPLDI
363     ; CHECK: BC
365   bb.1:
367     %2:crbitrc = DecreaseCTR8loop 1, implicit-def dead $ctr8, implicit $ctr8
368     BC killed %2:crbitrc, %bb.1
369     B %bb.2
371   bb.2:
373     BLR8 implicit $lr8, implicit $rm