[OpenACC] Enable 'attach' clause for combined constructs
[llvm-project.git] / llvm / test / CodeGen / PowerPC / ctrloops32.mir
blobffe62cf6a2f758689d9976acd8d81a303bc04267
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 
4 ---
5 name:            test_success1
6 # CHECK: test_success1
8 tracksRegLiveness: true
9 body:             |
10   bb.0.entry:
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
20   bb.1:
22     %1:crbitrc = DecreaseCTRloop 1, implicit-def dead $ctr, implicit $ctr
23     BC killed %1:crbitrc, %bb.1
24     B %bb.2
26   bb.2:
28     BLR implicit $lr, implicit $rm
29 ...
30 ---
31 name:            test_fail_clobber
32 # CHECK: test_fail_clobber
33 tracksRegLiveness: true
34 body:             |
35   bb.0.entry:
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
45   bb.1:
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
52   bb.2:
54     BLR implicit $lr, implicit $rm
55 ...
56 ---
57 name:            test_fail_use_in_loop
58 # CHECK: test_fail_use_in_loop
59 tracksRegLiveness: true
60 body:             |
61   bb.0.entry:
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
71   bb.1:
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
78   bb.2:
80     BLR implicit $lr, implicit $rm
81 ...
82 ---
83 name:            test_fail_call_in_preheader_after_mtctr
84 # CHECK: test_fail_call_in_preheader_after_mtctr
85 tracksRegLiveness: true
86 body:             |
87   bb.0.entry:
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
98   bb.1:
100     %1:crbitrc = DecreaseCTRloop 1, implicit-def dead $ctr, implicit $ctr
101     BC killed %1:crbitrc, %bb.1
102     B %bb.2
104   bb.2:
106     BLR implicit $lr, implicit $rm
109 name:            test_succ_call_in_preheader_before_mtctr
110 # CHECK: test_succ_call_in_preheader_before_mtctr
111 tracksRegLiveness: true
112 body:             |
113   bb.0.entry:
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
124   bb.1:
126     %1:crbitrc = DecreaseCTRloop 1, implicit-def dead $ctr, implicit $ctr
127     BC killed %1:crbitrc, %bb.1
128     B %bb.2
130   bb.2:
132     BLR implicit $lr, implicit $rm
135 name:            test_fail_call_in_loop
136 # CHECK: test_fail_call_in_loop
137 tracksRegLiveness: true
138 body:             |
139   bb.0.entry:
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
149   bb.1:
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
156   bb.2:
158     BLR implicit $lr, implicit $rm
161 name:            test_fail_indirect_call_in_loop
162 # CHECK: test_fail_indirect_call_in_loop
163 tracksRegLiveness: true
164 body:             |
165   bb.0.entry:
166    liveins: $r3, $r4
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
179   bb.1:
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
186   bb.2:
188     BLR implicit $lr, implicit $rm
191 name:            test_fail_livein_preheader
192 # CHECK: test_fail_livein_preheader
193 tracksRegLiveness: true
194 body:             |
195   bb.0.entry:
196     liveins: $ctr
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
206   bb.1:
208     %1:crbitrc = DecreaseCTRloop 1, implicit-def dead $ctr, implicit $ctr
209     BC killed %1:crbitrc, %bb.1
210     B %bb.2
212   bb.2:
214     BLR implicit $lr, implicit $rm
217 name:            test_fail_def_preheader
218 # CHECK: test_fail_def_preheader
219 tracksRegLiveness: true
220 body:             |
221   bb.0.entry:
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
232   bb.1:
234     %1:crbitrc = DecreaseCTRloop 1, implicit-def dead $ctr, implicit $ctr
235     BC killed %1:crbitrc, %bb.1
236     B %bb.2
238   bb.2:
240     BLR implicit $lr, implicit $rm
243 name:            test_success_only_use_preheader
244 # CHECK: test_success_only_use_preheader
245 tracksRegLiveness: true
246 body:             |
247   bb.0.entry:
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
258   bb.1:
260     %2:crbitrc = DecreaseCTRloop 1, implicit-def dead $ctr, implicit $ctr
261     BC killed %2:crbitrc, %bb.1
262     B %bb.2
264   bb.2:
266     BLR implicit $lr, implicit $rm
269 name:            test_fail_use_after_mtctr
270 # CHECK: test_fail_use_after_mtctr
271 tracksRegLiveness: true
272 body:             |
273   bb.0.entry:
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
284   bb.1:
286     %2:crbitrc = DecreaseCTRloop 1, implicit-def dead $ctr, implicit $ctr
287     BC killed %2:crbitrc, %bb.1
288     B %bb.2
290   bb.2:
292     BLR implicit $lr, implicit $rm
295 name:            test_fail_def_after_mtctr
296 # CHECK: test_fail_def_after_mtctr
297 tracksRegLiveness: true
298 body:             |
299   bb.0.entry:
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
310   bb.1:
312     %2:crbitrc = DecreaseCTRloop 1, implicit-def dead $ctr, implicit $ctr
313     BC killed %2:crbitrc, %bb.1
314     B %bb.2
316   bb.2:
318     BLR implicit $lr, implicit $rm
321 name:            test_success_def_after_loop
322 # CHECK: test_success_def_after_loop
323 tracksRegLiveness: true
324 body:             |
325   bb.0.entry:
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
335   bb.1:
337     %2:crbitrc = DecreaseCTRloop 1, implicit-def dead $ctr, implicit $ctr
338     BC killed %2:crbitrc, %bb.1
339     B %bb.2
341   bb.2:
342     INLINEASM &"", 1 /* sideeffect attdialect */, 12 /* clobber */, implicit-def early-clobber $ctr
344     BLR implicit $lr, implicit $rm