[clang] Fix crashes when passing VLA to va_arg (#119563)
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / merge-m0.mir
blob614ee6762a27b5333cfa58c9127c410295981a50
1 # RUN: llc -mtriple=amdgcn -amdgpu-enable-merge-m0 -verify-machineinstrs -run-pass si-fix-sgpr-copies %s -o - | FileCheck -check-prefix=GCN %s
3 # GCN-LABEL: name: merge-m0-many-init
4 # GCN:    bb.0.entry:
5 # GCN:      SI_INIT_M0 -1
6 # GCN-NEXT: IMPLICIT_DEF
7 # GCN-NEXT: IMPLICIT_DEF
8 # GCN-NEXT: DS_WRITE_B32
9 # GCN-NEXT: DS_WRITE_B32
10 # GCN-NEXT: SI_INIT_M0 65536
11 # GCN-NEXT: DS_WRITE_B32
12 # GCN-NEXT: DS_WRITE_B32
13 # GCN-NEXT: SI_INIT_M0 -1
14 # GCN-NEXT: DS_WRITE_B32
15 # GCN-NEXT: SI_INIT_M0 65536
16 # GCN-NEXT: DS_WRITE_B32
18 # GCN:    bb.1:
19 # GCN:      SI_INIT_M0 -1
20 # GCN-NEXT: DS_WRITE_B32
21 # GCN-NEXT: DS_WRITE_B32
23 # GCN:    bb.2:
24 # GCN:      SI_INIT_M0 65536
25 # GCN-NEXT: DS_WRITE_B32
27 # GCN:    bb.3:
28 # GCN:      SI_INIT_M0 3
30 # GCN:    bb.4:
31 # GCN-NOT:  SI_INIT_M0
32 # GCN:      DS_WRITE_B32
33 # GCN-NEXT: SI_INIT_M0 4
34 # GCN-NEXT: DS_WRITE_B32
36 # GCN:    bb.5:
37 # GCN-NOT: SI_INIT_M0
38 # GCN:     DS_WRITE_B32
39 # GCN-NEXT: SI_INIT_M0 4
40 # GCN-NEXT: DS_WRITE_B32
42 # GCN:    bb.6:
43 # GCN:      SI_INIT_M0 -1,
44 # GCN-NEXT: DS_WRITE_B32
45 # GCN:      SI_INIT_M0 %2
46 # GCN-NEXT: DS_WRITE_B32
47 # GCN-NEXT: SI_INIT_M0 %2
48 # GCN-NEXT: DS_WRITE_B32
49 # GCN-NEXT: SI_INIT_M0 -1
50 # GCN-NEXT: DS_WRITE_B32
51 ---
52 name: merge-m0-many-init
53 registers:
54   - { id: 0, class: vgpr_32 }
55   - { id: 1, class: vgpr_32 }
56   - { id: 2, class: sreg_32_xm0 }
57 body:             |
58   bb.0.entry:
59     successors: %bb.1, %bb.2
61     %0 = IMPLICIT_DEF
62     %1 = IMPLICIT_DEF
63     SI_INIT_M0 -1, implicit-def $m0
64     DS_WRITE_B32 %0, %1, 0, 0, implicit $m0, implicit $exec
65     SI_INIT_M0 -1, implicit-def $m0
66     DS_WRITE_B32 %0, %1, 0, 0, implicit $m0, implicit $exec
67     SI_INIT_M0 65536, implicit-def $m0
68     DS_WRITE_B32 %0, %1, 0, 0, implicit $m0, implicit $exec
69     SI_INIT_M0 65536, implicit-def $m0
70     DS_WRITE_B32 %0, %1, 0, 0, implicit $m0, implicit $exec
71     SI_INIT_M0 -1, implicit-def $m0
72     DS_WRITE_B32 %0, %1, 0, 0, implicit $m0, implicit $exec
73     SI_INIT_M0 65536, implicit-def $m0
74     DS_WRITE_B32 %0, %1, 0, 0, implicit $m0, implicit $exec
75     S_CBRANCH_VCCZ %bb.1, implicit undef $vcc
76     S_BRANCH %bb.2
78   bb.1:
79     successors: %bb.2
80     SI_INIT_M0 -1, implicit-def $m0
81     DS_WRITE_B32 %0, %1, 0, 0, implicit $m0, implicit $exec
82     SI_INIT_M0 -1, implicit-def $m0
83     DS_WRITE_B32 %0, %1, 0, 0, implicit $m0, implicit $exec
84     S_BRANCH %bb.2
86   bb.2:
87     successors: %bb.3
88     SI_INIT_M0 65536, implicit-def $m0
89     DS_WRITE_B32 %0, %1, 0, 0, implicit $m0, implicit $exec
90     S_BRANCH %bb.3
92   bb.3:
93     successors: %bb.4, %bb.5
94     S_CBRANCH_VCCZ %bb.4, implicit undef $vcc
95     S_BRANCH %bb.5
97   bb.4:
98     successors: %bb.6
99     SI_INIT_M0 3, implicit-def $m0
100     DS_WRITE_B32 %0, %1, 0, 0, implicit $m0, implicit $exec
101     SI_INIT_M0 4, implicit-def $m0
102     DS_WRITE_B32 %0, %1, 0, 0, implicit $m0, implicit $exec
103     S_BRANCH %bb.6
105   bb.5:
106     successors: %bb.6
107     SI_INIT_M0 3, implicit-def $m0
108     DS_WRITE_B32 %0, %1, 0, 0, implicit $m0, implicit $exec
109     SI_INIT_M0 4, implicit-def $m0
110     DS_WRITE_B32 %0, %1, 0, 0, implicit $m0, implicit $exec
111     S_BRANCH %bb.6
113   bb.6:
114     successors: %bb.0.entry, %bb.6
115     SI_INIT_M0 -1, implicit-def $m0
116     DS_WRITE_B32 %0, %1, 0, 0, implicit $m0, implicit $exec
117     %2 = IMPLICIT_DEF
118     SI_INIT_M0 %2, implicit-def $m0
119     DS_WRITE_B32 %0, %1, 0, 0, implicit $m0, implicit $exec
120     SI_INIT_M0 %2, implicit-def $m0
121     DS_WRITE_B32 %0, %1, 0, 0, implicit $m0, implicit $exec
122     SI_INIT_M0 -1, implicit-def $m0
123     DS_WRITE_B32 %0, %1, 0, 0, implicit $m0, implicit $exec
124     S_CBRANCH_VCCZ %bb.6, implicit undef $vcc
125     S_BRANCH %bb.0.entry
129 # GCN-LABEL: name: merge-m0-dont-hoist-past-init-with-different-initializer
130 # GCN:    bb.0.entry:
131 # GCN:      SI_INIT_M0 65536
132 # GCN-NEXT: IMPLICIT_DEF
133 # GCN-NEXT: IMPLICIT_DEF
134 # GCN-NEXT: DS_WRITE_B32
136 # GCN:    bb.1:
137 # GCN-NOT:  SI_INIT_M0 65536
138 # GCN-NOT:  SI_INIT_M0 -1
140 # GCN:    bb.2:
141 # GCN:      SI_INIT_M0 -1
143 # GCN:    bb.3:
144 # GCN:      SI_INIT_M0 -1
146 name: merge-m0-dont-hoist-past-init-with-different-initializer
147 registers:
148   - { id: 0, class: vgpr_32 }
149   - { id: 1, class: vgpr_32 }
150 body:             |
151   bb.0.entry:
152     successors: %bb.1
154     %0 = IMPLICIT_DEF
155     %1 = IMPLICIT_DEF
156     SI_INIT_M0 65536, implicit-def $m0
157     DS_WRITE_B32 %0, %1, 0, 0, implicit $m0, implicit $exec
158     S_BRANCH %bb.1
160   bb.1:
161     successors: %bb.2, %bb.3
163     SI_INIT_M0 65536, implicit-def $m0
164     DS_WRITE_B32 %0, %1, 0, 0, implicit $m0, implicit $exec
165     S_CBRANCH_VCCZ %bb.2, implicit undef $vcc
166     S_BRANCH %bb.3
168   bb.2:
169     successors: %bb.4
171     SI_INIT_M0 -1, implicit-def $m0
172     DS_WRITE_B32 %0, %1, 0, 0, implicit $m0, implicit $exec
173     S_BRANCH %bb.4
175   bb.3:
176     successors: %bb.4
178     SI_INIT_M0 -1, implicit-def $m0
179     DS_WRITE_B32 %0, %1, 0, 0, implicit $m0, implicit $exec
180     S_BRANCH %bb.4
182   bb.4:
183     S_ENDPGM 0
186 # GCN-LABEL: name: merge-m0-after-prologue
187 # GCN:    bb.0.entry:
188 # GCN-NOT:  SI_INIT_M0
189 # GCN:      S_OR_B64
190 # GCN-NEXT: SI_INIT_M0
192 # GCN:     bb.1:
193 # GCN-NOT:   SI_INIT_M0 -1
195 # GCN:     bb.2:
196 # GCN-NOT:   SI_INIT_MO -1
198 name: merge-m0-after-prologue
199 registers:
200   - { id: 0, class: vgpr_32 }
201   - { id: 1, class: vgpr_32 }
202 body:             |
203   bb.0.entry:
204     successors: %bb.1, %bb.2
205     liveins: $sgpr0_sgpr1
207     $exec = S_OR_B64 $exec, killed $sgpr0_sgpr1, implicit-def $scc
208     %0 = IMPLICIT_DEF
209     %1 = IMPLICIT_DEF
210     S_CBRANCH_VCCZ %bb.1, implicit undef $vcc
211     S_BRANCH %bb.2
213   bb.1:
214     successors: %bb.3
216     SI_INIT_M0 -1, implicit-def $m0
217     DS_WRITE_B32 %0, %1, 0, 0, implicit $m0, implicit $exec
218     S_BRANCH %bb.3
220   bb.2:
221     successors: %bb.3
223     SI_INIT_M0 -1, implicit-def $m0
224     DS_WRITE_B32 %0, %1, 0, 0, implicit $m0, implicit $exec
225     S_BRANCH %bb.3
227   bb.3:
228     S_ENDPGM 0
231 # GCN-LABEL: name: move-m0-avoid-hazard
232 # GCN: $m0 = S_MOV_B32 -1
233 # GCN-NEXT: $vgpr0 = V_MOV_B32_e32 0, implicit $exec
234 # GCN-NEXT: DS_GWS_INIT $vgpr0, 0, implicit $m0, implicit $exec
236 name: move-m0-avoid-hazard
237 body:             |
238   bb.0:
239     $vgpr0 = V_MOV_B32_e32 0, implicit $exec
240     $m0 = S_MOV_B32 -1
241     DS_GWS_INIT $vgpr0, 0, implicit $m0, implicit $exec
244 # GCN-LABEL: name: move-m0-with-prologue
245 # GCN: $exec = S_OR_B64 $exec, killed $sgpr0_sgpr1, implicit-def $scc
246 # GCN: $m0 = S_MOV_B32 -1
247 # GCN-NEXT: $vgpr0 = V_MOV_B32_e32 0, implicit $exec
248 # GCN-NEXT: DS_GWS_INIT $vgpr0, 0, implicit $m0, implicit $exec
250 name: move-m0-with-prologue
251 body:             |
252   bb.0:
253     liveins: $sgpr0_sgpr1
255     $exec = S_OR_B64 $exec, killed $sgpr0_sgpr1, implicit-def $scc
256     $vgpr0 = V_MOV_B32_e32 0, implicit $exec
257     $m0 = S_MOV_B32 -1
258     DS_GWS_INIT $vgpr0, 0, implicit $m0, implicit $exec
261 # GCN-LABEL: name: move-m0-different-initializer
262 # GCN: SI_INIT_M0 -1
263 # GCN-NEXT: %0:vgpr_32 = IMPLICIT_DEF
264 # GCN: SI_INIT_M0 65536
265 # GCN-NEXT: S_NOP
267 name: move-m0-different-initializer
268 registers:
269   - { id: 0, class: vgpr_32 }
270   - { id: 1, class: vgpr_32 }
271 body:             |
272   bb.0:
273     %0 = IMPLICIT_DEF
274     %1 = IMPLICIT_DEF
275     SI_INIT_M0 -1, implicit-def $m0
276     DS_WRITE_B32 %0, %1, 0, 0, implicit $m0, implicit $exec
277     S_NOP 0
278     SI_INIT_M0 65536, implicit-def $m0
279     DS_WRITE_B32 %0, %1, 0, 0, implicit $m0, implicit $exec
282 # GCN-LABEL: name: move-m0-schedule-boundary
283 # GCN: S_SETREG
284 # GCN-NEXT: SI_INIT_M0 -1
286 name: move-m0-schedule-boundary
287 registers:
288   - { id: 0, class: vgpr_32 }
289   - { id: 1, class: vgpr_32 }
290 body:             |
291   bb.0:
292     %0 = IMPLICIT_DEF
293     %1 = IMPLICIT_DEF
294     S_SETREG_IMM32_B32 0, 1, implicit-def $mode, implicit $mode
295     SI_INIT_M0 -1, implicit-def $m0
296     DS_WRITE_B32 %0, %1, 0, 0, implicit $m0, implicit $exec
300 # GCN-LABEL: name: m0-in-loop-0
301 # GCN:    bb.0.entry:
302 # GCN:      SI_INIT_M0 -1
303 # GCN-NEXT: IMPLICIT_DEF
304 # GCN-NEXT: IMPLICIT_DEF
305 # GCN-NEXT: IMPLICIT_DEF
306 # GCN-NEXT: DS_WRITE_B32
308 # GCN:    bb.1:
309 # GCN:      SI_INIT_M0 -1
310 # GCN-NEXT: DS_WRITE_B32
311 # GCN-NEXT: $m0 = COPY %2
314 name: m0-in-loop-0
315 registers:
316   - { id: 0, class: vgpr_32 }
317   - { id: 1, class: vgpr_32 }
318   - { id: 2, class: sgpr_32 }
319 body:             |
320   bb.0.entry:
321     successors: %bb.1
323     %0 = IMPLICIT_DEF
324     %1 = IMPLICIT_DEF
325     %2 = IMPLICIT_DEF
326     SI_INIT_M0 -1, implicit-def $m0
327     DS_WRITE_B32 %0, %1, 0, 0, implicit $m0, implicit $exec
328     S_BRANCH %bb.1
330   bb.1:
331     successors: %bb.1, %bb.2
333     SI_INIT_M0 -1, implicit-def $m0
334     DS_WRITE_B32 %0, %1, 0, 0, implicit $m0, implicit $exec
335     $m0 = COPY %2:sgpr_32
336     S_SENDMSG 34, implicit $exec, implicit $m0
337     S_CBRANCH_VCCZ %bb.1, implicit undef $vcc
338     S_BRANCH %bb.2
340   bb.2:
341     S_ENDPGM 0
344 # GCN-LABEL: name: m0-in-loop-1
345 # GCN:    bb.0.entry:
346 # GCN:      SI_INIT_M0 -1
347 # GCN-NEXT: IMPLICIT_DEF
348 # GCN-NEXT: IMPLICIT_DEF
349 # GCN-NEXT: IMPLICIT_DEF
350 # GCN-NEXT: DS_WRITE_B32
352 # GCN:    bb.1:
353 # GCN-NOT:      SI_INIT_M0 -1
354 # GCN: DS_WRITE_B32
357 name: m0-in-loop-1
358 registers:
359   - { id: 0, class: vgpr_32 }
360   - { id: 1, class: vgpr_32 }
361   - { id: 2, class: sgpr_32 }
362 body:             |
363   bb.0.entry:
364     successors: %bb.1
366     %0 = IMPLICIT_DEF
367     %1 = IMPLICIT_DEF
368     %2 = IMPLICIT_DEF
369     SI_INIT_M0 -1, implicit-def $m0
370     DS_WRITE_B32 %0, %1, 0, 0, implicit $m0, implicit $exec
371     S_BRANCH %bb.1
373   bb.1:
374     successors: %bb.1, %bb.2
376     SI_INIT_M0 -1, implicit-def $m0
377     DS_WRITE_B32 %0, %1, 0, 0, implicit $m0, implicit $exec
378     S_CBRANCH_VCCZ %bb.1, implicit undef $vcc
379     S_BRANCH %bb.2
381   bb.2:
382     S_ENDPGM 0
385 # GCN-LABEL: name: m0-in-loop-2
386 # GCN:    bb.0.entry:
387 # GCN:      SI_INIT_M0 -1
388 # GCN-NEXT: IMPLICIT_DEF
389 # GCN-NEXT: IMPLICIT_DEF
390 # GCN-NEXT: IMPLICIT_DEF
391 # GCN-NEXT: DS_WRITE_B32
393 # GCN:    bb.1:
394 # GCN: $m0 = COPY %2
395 # GCN-NEXT:      SENDMSG
396 # GCN-NEXT:      SI_INIT_M0 -1
397 # GCN-NEXT: DS_WRITE_B32
400 name: m0-in-loop-2
401 registers:
402   - { id: 0, class: vgpr_32 }
403   - { id: 1, class: vgpr_32 }
404   - { id: 2, class: sgpr_32 }
405 body:             |
406   bb.0.entry:
407     successors: %bb.1
409     %0 = IMPLICIT_DEF
410     %1 = IMPLICIT_DEF
411     %2 = IMPLICIT_DEF
412     SI_INIT_M0 -1, implicit-def $m0
413     DS_WRITE_B32 %0, %1, 0, 0, implicit $m0, implicit $exec
414     S_BRANCH %bb.1
416   bb.1:
417     successors: %bb.1, %bb.2
419     $m0 = COPY %2:sgpr_32
420     S_SENDMSG 34, implicit $exec, implicit $m0
421     SI_INIT_M0 -1, implicit-def $m0
422     DS_WRITE_B32 %0, %1, 0, 0, implicit $m0, implicit $exec
423     S_CBRANCH_VCCZ %bb.1, implicit undef $vcc
424     S_BRANCH %bb.2
426   bb.2:
427     S_ENDPGM 0
430 # GCN-LABEL: name: m0-in-loop-3
431 # GCN:    bb.0.entry:
432 # GCN:      SI_INIT_M0 -1
433 # GCN-NEXT: IMPLICIT_DEF
434 # GCN-NEXT: IMPLICIT_DEF
435 # GCN-NEXT: IMPLICIT_DEF
436 # GCN-NEXT: DS_WRITE_B32
438 # GCN:    bb.1:
439 # GCN: $m0 = COPY %2
440 # GCN-NEXT:      SENDMSG
441 # GCN-NEXT:      SI_INIT_M0 -1
442 # GCN-NEXT: DS_WRITE_B32
443 # GCN-NEXT: DS_WRITE_B32
446 name: m0-in-loop-3
447 registers:
448   - { id: 0, class: vgpr_32 }
449   - { id: 1, class: vgpr_32 }
450   - { id: 2, class: sgpr_32 }
451 body:             |
452   bb.0.entry:
453     successors: %bb.1
455     %0 = IMPLICIT_DEF
456     %1 = IMPLICIT_DEF
457     %2 = IMPLICIT_DEF
458     SI_INIT_M0 -1, implicit-def $m0
459     DS_WRITE_B32 %0, %1, 0, 0, implicit $m0, implicit $exec
460     S_BRANCH %bb.1
462   bb.1:
463     successors: %bb.1, %bb.2
465     $m0 = COPY %2:sgpr_32
466     S_SENDMSG 34, implicit $exec, implicit $m0
467     SI_INIT_M0 -1, implicit-def $m0
468     DS_WRITE_B32 %0, %1, 0, 0, implicit $m0, implicit $exec
469     SI_INIT_M0 -1, implicit-def $m0
470     DS_WRITE_B32 %0, %1, 0, 0, implicit $m0, implicit $exec
471     S_CBRANCH_VCCZ %bb.1, implicit undef $vcc
472     S_BRANCH %bb.2
474   bb.2:
475     S_ENDPGM 0
478 # GCN-LABEL: name: m0-in-loop-4
479 # GCN:    bb.0.entry:
480 # GCN:      SI_INIT_M0 -1
481 # GCN-NEXT: IMPLICIT_DEF
482 # GCN-NEXT: IMPLICIT_DEF
483 # GCN-NEXT: IMPLICIT_DEF
484 # GCN-NEXT: DS_WRITE_B32
486 # GCN:    bb.1:
487 # GCN:  SI_INIT_M0 -1
488 # GCN-NEXT: DS_WRITE_B32
489 # GCN-NEXT: DS_WRITE_B32
490 # GCN-NEXT: $m0 = COPY %2
491 # GCN-NEXT:      SENDMSG
494 name: m0-in-loop-4
495 registers:
496   - { id: 0, class: vgpr_32 }
497   - { id: 1, class: vgpr_32 }
498   - { id: 2, class: sgpr_32 }
499 body:             |
500   bb.0.entry:
501     successors: %bb.1
503     %0 = IMPLICIT_DEF
504     %1 = IMPLICIT_DEF
505     %2 = IMPLICIT_DEF
506     SI_INIT_M0 -1, implicit-def $m0
507     DS_WRITE_B32 %0, %1, 0, 0, implicit $m0, implicit $exec
508     S_BRANCH %bb.1
510   bb.1:
511     successors: %bb.1, %bb.2
513     SI_INIT_M0 -1, implicit-def $m0
514     DS_WRITE_B32 %0, %1, 0, 0, implicit $m0, implicit $exec
515     SI_INIT_M0 -1, implicit-def $m0
516     DS_WRITE_B32 %0, %1, 0, 0, implicit $m0, implicit $exec
517     $m0 = COPY %2:sgpr_32
518     S_SENDMSG 34, implicit $exec, implicit $m0
519     S_CBRANCH_VCCZ %bb.1, implicit undef $vcc
520     S_BRANCH %bb.2
522   bb.2:
523     S_ENDPGM 0
526 # GCN-LABEL: name: m0-in-loop-5
527 # GCN:    bb.0.entry:
528 # GCN:      SI_INIT_M0 -1
529 # GCN-NEXT: IMPLICIT_DEF
530 # GCN-NEXT: IMPLICIT_DEF
531 # GCN-NEXT: IMPLICIT_DEF
532 # GCN-NEXT: DS_WRITE_B32
534 # GCN:    bb.1:
535 # GCN:  SI_INIT_M0 65536
536 # GCN-NEXT: DS_WRITE_B32
537 # GCN-NEXT:  SI_INIT_M0 -1
538 # GCN-NEXT: DS_WRITE_B32
539 # GCN-NEXT: $m0 = COPY %2
540 # GCN-NEXT:      SENDMSG
543 name: m0-in-loop-5
544 registers:
545   - { id: 0, class: vgpr_32 }
546   - { id: 1, class: vgpr_32 }
547   - { id: 2, class: sgpr_32 }
548 body:             |
549   bb.0.entry:
550     successors: %bb.1
552     %0 = IMPLICIT_DEF
553     %1 = IMPLICIT_DEF
554     %2 = IMPLICIT_DEF
555     SI_INIT_M0 -1, implicit-def $m0
556     DS_WRITE_B32 %0, %1, 0, 0, implicit $m0, implicit $exec
557     S_BRANCH %bb.1
559   bb.1:
560     successors: %bb.1, %bb.2
562     SI_INIT_M0 65536, implicit-def $m0
563     DS_WRITE_B32 %0, %1, 0, 0, implicit $m0, implicit $exec
564     SI_INIT_M0 -1, implicit-def $m0
565     DS_WRITE_B32 %0, %1, 0, 0, implicit $m0, implicit $exec
566     $m0 = COPY %2:sgpr_32
567     S_SENDMSG 34, implicit $exec, implicit $m0
568     S_CBRANCH_VCCZ %bb.1, implicit undef $vcc
569     S_BRANCH %bb.2
571   bb.2:
572     S_ENDPGM 0
575 # GCN-LABEL: name: m0-in-loop-6
576 # GCN:    bb.0.entry:
577 # GCN:      SI_INIT_M0 -1
578 # GCN-NEXT: IMPLICIT_DEF
579 # GCN-NEXT: IMPLICIT_DEF
580 # GCN-NEXT: IMPLICIT_DEF
581 # GCN-NEXT: DS_WRITE_B32
583 # GCN:    bb.1:
584 # GCN:  SI_INIT_M0 -1
585 # GCN-NEXT: DS_WRITE_B32
586 # GCN-NEXT: DS_WRITE_B32
587 # GCN-NEXT: $m0 = COPY %2
588 # GCN-NEXT:      SENDMSG
591 name: m0-in-loop-6
592 registers:
593   - { id: 0, class: vgpr_32 }
594   - { id: 1, class: vgpr_32 }
595   - { id: 2, class: sgpr_32 }
596 body:             |
597   bb.0.entry:
598     successors: %bb.1
600     %0 = IMPLICIT_DEF
601     %1 = IMPLICIT_DEF
602     %2 = IMPLICIT_DEF
603     SI_INIT_M0 -1, implicit-def $m0
604     DS_WRITE_B32 %0, %1, 0, 0, implicit $m0, implicit $exec
605     S_BRANCH %bb.1
607   bb.1:
608     successors: %bb.2
610     SI_INIT_M0 -1, implicit-def $m0
611     DS_WRITE_B32 %0, %1, 0, 0, implicit $m0, implicit $exec
612     SI_INIT_M0 -1, implicit-def $m0
613     DS_WRITE_B32 %0, %1, 0, 0, implicit $m0, implicit $exec
614     $m0 = COPY %2:sgpr_32
615     S_SENDMSG 34, implicit $exec, implicit $m0
616     S_BRANCH %bb.2
618   bb.2:
619     successors: %bb.3, %bb.1
620     S_CBRANCH_VCCZ %bb.1, implicit undef $vcc
621     S_BRANCH %bb.3
624   bb.3:
625     S_ENDPGM 0
628 # GCN-LABEL: name: m0-in-loop-7
629 # GCN:    bb.0.entry:
630 # GCN:      SI_INIT_M0 -1
631 # GCN-NEXT: IMPLICIT_DEF
632 # GCN-NEXT: IMPLICIT_DEF
633 # GCN-NEXT: IMPLICIT_DEF
634 # GCN-NEXT: DS_WRITE_B32
636 # GCN:    bb.1:
637 # GCN:  SI_INIT_M0 -1
638 # GCN-NEXT: DS_WRITE_B32
639 # GCN-NEXT: DS_WRITE_B32
641 # GCN:    bb.2:
642 # GCN: $m0 = COPY %2
643 # GCN-NEXT:      SENDMSG
646 name: m0-in-loop-7
647 registers:
648   - { id: 0, class: vgpr_32 }
649   - { id: 1, class: vgpr_32 }
650   - { id: 2, class: sgpr_32 }
651 body:             |
652   bb.0.entry:
653     successors: %bb.1
655     %0 = IMPLICIT_DEF
656     %1 = IMPLICIT_DEF
657     %2 = IMPLICIT_DEF
658     SI_INIT_M0 -1, implicit-def $m0
659     DS_WRITE_B32 %0, %1, 0, 0, implicit $m0, implicit $exec
660     S_BRANCH %bb.1
662   bb.1:
663     successors: %bb.2
665     SI_INIT_M0 -1, implicit-def $m0
666     DS_WRITE_B32 %0, %1, 0, 0, implicit $m0, implicit $exec
667     SI_INIT_M0 -1, implicit-def $m0
668     DS_WRITE_B32 %0, %1, 0, 0, implicit $m0, implicit $exec
669     S_BRANCH %bb.2
671   bb.2:
672     successors: %bb.3, %bb.1
673     $m0 = COPY %2:sgpr_32
674     S_SENDMSG 34, implicit $exec, implicit $m0
675     S_CBRANCH_VCCZ %bb.1, implicit undef $vcc
676     S_BRANCH %bb.3
678   bb.3:
679     S_ENDPGM 0