[docs] Add LICENSE.txt to the root of the mono-repo
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / si-lower-control-flow.mir
blobb99ca2b9fd3272773a0f424ce3d266ebd09ed14b
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=amdgcn-amd-amdhsa -run-pass=liveintervals,si-lower-control-flow,si-lower-control-flow -verify-machineinstrs %s -o - | FileCheck -check-prefixes=GCN %s
4 # Check that assert is not triggered
6 ---
7 name: si-lower-control-flow
8 body: |
9   bb.0:
10     ; GCN-LABEL: name: si-lower-control-flow
11     ; GCN: [[COPY:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5
12     ; GCN-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 16, 0
13     ; GCN-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32_xm0 = S_AND_B32 [[S_LOAD_DWORD_IMM]], 255, implicit-def $scc
14     ; GCN-NEXT: dead %3:sreg_32_xm0 = S_AND_B32 65535, [[S_AND_B32_]], implicit-def $scc
15     ; GCN-NEXT: S_ENDPGM 0
16     %0:sgpr_64 = COPY $sgpr4_sgpr5
17     %1:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM %0, 16, 0
18     %2:sreg_32_xm0 = S_AND_B32 %1, 255, implicit-def $scc
19     %3:sreg_32_xm0 = S_AND_B32 65535, %2, implicit-def $scc
20     S_ENDPGM 0
21 ...
23 ---
24 name: preserve_undef_flag_si_if_src
25 tracksRegLiveness: true
26 body:             |
27   ; GCN-LABEL: name: preserve_undef_flag_si_if_src
28   ; GCN: bb.0:
29   ; GCN-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
30   ; GCN-NEXT: {{  $}}
31   ; GCN-NEXT:   [[COPY:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec
32   ; GCN-NEXT:   [[S_AND_B64_:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY]], undef %1:sreg_64, implicit-def dead $scc
33   ; GCN-NEXT:   dead %0:sreg_64 = S_XOR_B64 [[S_AND_B64_]], [[COPY]], implicit-def dead $scc
34   ; GCN-NEXT:   $exec = S_MOV_B64_term [[S_AND_B64_]]
35   ; GCN-NEXT:   S_CBRANCH_EXECZ %bb.2, implicit $exec
36   ; GCN-NEXT:   S_BRANCH %bb.1
37   ; GCN-NEXT: {{  $}}
38   ; GCN-NEXT: bb.1:
39   ; GCN-NEXT:   successors: %bb.2(0x80000000)
40   ; GCN-NEXT: {{  $}}
41   ; GCN-NEXT: {{  $}}
42   ; GCN-NEXT: bb.2:
43   ; GCN-NEXT:   S_ENDPGM 0
44   bb.0:
45     successors: %bb.1, %bb.2
47     %1:sreg_64 = SI_IF undef %0:sreg_64, %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec
48     S_BRANCH %bb.1
50   bb.1:
51     successors: %bb.2
53   bb.2:
54     S_ENDPGM 0
56 ...
58 # We need to split the block for SI_END_CF, but
59 ---
60 name: end_cf_split_block_end
61 tracksRegLiveness: true
62 body:             |
63   ; GCN-LABEL: name: end_cf_split_block_end
64   ; GCN: bb.0:
65   ; GCN-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
66   ; GCN-NEXT:   liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31
67   ; GCN-NEXT: {{  $}}
68   ; GCN-NEXT:   [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
69   ; GCN-NEXT:   [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
70   ; GCN-NEXT:   [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[COPY]], [[COPY1]], implicit $exec
71   ; GCN-NEXT:   [[COPY2:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec
72   ; GCN-NEXT:   [[S_AND_B64_:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY2]], [[V_CMP_EQ_U32_e64_]], implicit-def dead $scc
73   ; GCN-NEXT:   [[S_XOR_B64_:%[0-9]+]]:sreg_64_xexec = S_XOR_B64 [[S_AND_B64_]], [[COPY2]], implicit-def dead $scc
74   ; GCN-NEXT:   $exec = S_MOV_B64_term [[S_AND_B64_]]
75   ; GCN-NEXT:   [[S_MOV_B64_term:%[0-9]+]]:sreg_64_xexec = S_MOV_B64_term [[S_XOR_B64_]], implicit $exec
76   ; GCN-NEXT:   S_CBRANCH_EXECZ %bb.1, implicit $exec
77   ; GCN-NEXT:   S_BRANCH %bb.2
78   ; GCN-NEXT: {{  $}}
79   ; GCN-NEXT: bb.1:
80   ; GCN-NEXT:   successors: %bb.2(0x80000000)
81   ; GCN-NEXT: {{  $}}
82   ; GCN-NEXT:   [[COPY3:%[0-9]+]]:sreg_64_xexec = COPY [[S_MOV_B64_term]]
83   ; GCN-NEXT:   $exec = S_OR_B64_term $exec, [[COPY3]], implicit-def $scc
84   ; GCN-NEXT: {{  $}}
85   ; GCN-NEXT: bb.2:
86   ; GCN-NEXT:   S_ENDPGM 0
87   bb.0:
88     liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31
90     %0:vgpr_32 = COPY killed $vgpr0
91     %1:vgpr_32 = COPY killed $vgpr1
92     %3:sreg_64_xexec = V_CMP_EQ_U32_e64 killed %0, killed %1, implicit $exec
93     %4:sreg_64_xexec = SI_IF %3, %bb.1, implicit-def $exec, implicit-def dead $scc, implicit $exec
94     %5:sreg_64_xexec = S_MOV_B64_term %4, implicit $exec
95     S_BRANCH %bb.2
97   bb.1:
98     successors: %bb.2
100     %6:sreg_64_xexec = COPY %5
101     SI_END_CF killed %6, implicit-def $exec, implicit-def dead $scc, implicit $exec
103   bb.2:
104     S_ENDPGM 0
109 name: end_cf_split_block_physreg_livein
110 tracksRegLiveness: true
111 body:             |
112   ; GCN-LABEL: name: end_cf_split_block_physreg_livein
113   ; GCN: bb.0:
114   ; GCN-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
115   ; GCN-NEXT:   liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31, $sgpr4_sgpr5
116   ; GCN-NEXT: {{  $}}
117   ; GCN-NEXT:   [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
118   ; GCN-NEXT:   [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
119   ; GCN-NEXT:   [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[COPY]], [[COPY1]], implicit $exec
120   ; GCN-NEXT:   [[COPY2:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec
121   ; GCN-NEXT:   [[S_AND_B64_:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY2]], [[V_CMP_EQ_U32_e64_]], implicit-def dead $scc
122   ; GCN-NEXT:   [[S_XOR_B64_:%[0-9]+]]:sreg_64_xexec = S_XOR_B64 [[S_AND_B64_]], [[COPY2]], implicit-def dead $scc
123   ; GCN-NEXT:   $exec = S_MOV_B64_term [[S_AND_B64_]]
124   ; GCN-NEXT:   [[S_MOV_B64_term:%[0-9]+]]:sreg_64_xexec = S_MOV_B64_term [[S_XOR_B64_]], implicit $exec
125   ; GCN-NEXT:   S_CBRANCH_EXECZ %bb.1, implicit $exec
126   ; GCN-NEXT:   S_BRANCH %bb.2
127   ; GCN-NEXT: {{  $}}
128   ; GCN-NEXT: bb.1:
129   ; GCN-NEXT:   successors: %bb.3(0x80000000)
130   ; GCN-NEXT:   liveins: $vgpr0, $sgpr4_sgpr5
131   ; GCN-NEXT: {{  $}}
132   ; GCN-NEXT:   [[COPY3:%[0-9]+]]:sreg_64_xexec = COPY [[S_MOV_B64_term]]
133   ; GCN-NEXT:   S_NOP 0
134   ; GCN-NEXT:   $exec = S_OR_B64_term $exec, [[COPY3]], implicit-def $scc
135   ; GCN-NEXT: {{  $}}
136   ; GCN-NEXT: bb.3:
137   ; GCN-NEXT:   successors: %bb.2(0x80000000)
138   ; GCN-NEXT:   liveins: $vgpr0, $sgpr4_sgpr5
139   ; GCN-NEXT: {{  $}}
140   ; GCN-NEXT:   S_SLEEP 3
141   ; GCN-NEXT:   S_NOP 0, implicit $vgpr0, implicit $sgpr4_sgpr5
142   ; GCN-NEXT: {{  $}}
143   ; GCN-NEXT: bb.2:
144   ; GCN-NEXT:   S_ENDPGM 0
145   bb.0:
146     liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31, $sgpr4_sgpr5
148     %0:vgpr_32 = COPY killed $vgpr0
149     %1:vgpr_32 = COPY killed $vgpr1
150     %3:sreg_64_xexec = V_CMP_EQ_U32_e64 killed %0, killed %1, implicit $exec
151     %4:sreg_64_xexec = SI_IF %3, %bb.1, implicit-def $exec, implicit-def dead $scc, implicit $exec
152     %5:sreg_64_xexec = S_MOV_B64_term %4, implicit $exec
153     S_BRANCH %bb.2
155   bb.1:
156     successors: %bb.2
157     liveins: $vgpr0, $sgpr4_sgpr5
159     %6:sreg_64_xexec = COPY %5
160     S_NOP 0
161     SI_END_CF killed %6, implicit-def $exec, implicit-def dead $scc, implicit $exec
162     S_SLEEP 3
163     S_NOP 0, implicit $vgpr0, implicit $sgpr4_sgpr5
165   bb.2:
166     S_ENDPGM 0
171 name: end_cf_split_block_physreg_livein_liveout
172 tracksRegLiveness: true
173 body:             |
174   ; GCN-LABEL: name: end_cf_split_block_physreg_livein_liveout
175   ; GCN: bb.0:
176   ; GCN-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
177   ; GCN-NEXT:   liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31, $sgpr4_sgpr5, $sgpr8_sgpr9_sgpr10_sgpr11:0x0000000000000003
178   ; GCN-NEXT: {{  $}}
179   ; GCN-NEXT:   [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
180   ; GCN-NEXT:   [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
181   ; GCN-NEXT:   [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[COPY]], [[COPY1]], implicit $exec
182   ; GCN-NEXT:   [[COPY2:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec
183   ; GCN-NEXT:   [[S_AND_B64_:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY2]], [[V_CMP_EQ_U32_e64_]], implicit-def dead $scc
184   ; GCN-NEXT:   [[S_XOR_B64_:%[0-9]+]]:sreg_64_xexec = S_XOR_B64 [[S_AND_B64_]], [[COPY2]], implicit-def dead $scc
185   ; GCN-NEXT:   $exec = S_MOV_B64_term [[S_AND_B64_]]
186   ; GCN-NEXT:   [[S_MOV_B64_term:%[0-9]+]]:sreg_64_xexec = S_MOV_B64_term [[S_XOR_B64_]], implicit $exec
187   ; GCN-NEXT:   S_CBRANCH_EXECZ %bb.1, implicit $exec
188   ; GCN-NEXT:   S_BRANCH %bb.2
189   ; GCN-NEXT: {{  $}}
190   ; GCN-NEXT: bb.1:
191   ; GCN-NEXT:   successors: %bb.3(0x80000000)
192   ; GCN-NEXT:   liveins: $vgpr0, $sgpr4_sgpr5, $sgpr8_sgpr9_sgpr10_sgpr11:0x0000000000000003
193   ; GCN-NEXT: {{  $}}
194   ; GCN-NEXT:   [[COPY3:%[0-9]+]]:sreg_64_xexec = COPY [[S_MOV_B64_term]]
195   ; GCN-NEXT:   $exec = S_OR_B64_term $exec, [[COPY3]], implicit-def $scc
196   ; GCN-NEXT: {{  $}}
197   ; GCN-NEXT: bb.3:
198   ; GCN-NEXT:   successors: %bb.2(0x80000000)
199   ; GCN-NEXT:   liveins: $vgpr0, $sgpr4_sgpr5, $sgpr8_sgpr9
200   ; GCN-NEXT: {{  $}}
201   ; GCN-NEXT:   S_SLEEP 3
202   ; GCN-NEXT:   S_NOP 0
203   ; GCN-NEXT: {{  $}}
204   ; GCN-NEXT: bb.2:
205   ; GCN-NEXT:   liveins: $vgpr0, $sgpr4_sgpr5, $sgpr8_sgpr9_sgpr10_sgpr11:0x0000000000000003
206   ; GCN-NEXT: {{  $}}
207   ; GCN-NEXT:   S_ENDPGM 0, implicit $vgpr0, implicit $sgpr4_sgpr5, implicit $sgpr8_sgpr9_sgpr10_sgpr11
208   bb.0:
209     liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31, $sgpr4_sgpr5, $sgpr8_sgpr9_sgpr10_sgpr11:0x00000003
211     %0:vgpr_32 = COPY killed $vgpr0
212     %1:vgpr_32 = COPY killed $vgpr1
213     %3:sreg_64_xexec = V_CMP_EQ_U32_e64 killed %0, killed %1, implicit $exec
214     %4:sreg_64_xexec = SI_IF %3, %bb.1, implicit-def $exec, implicit-def dead $scc, implicit $exec
215     %5:sreg_64_xexec = S_MOV_B64_term %4, implicit $exec
216     S_BRANCH %bb.2
218   bb.1:
219     successors: %bb.2
220     liveins: $vgpr0, $sgpr4_sgpr5, $sgpr8_sgpr9_sgpr10_sgpr11:0x00000003
222     %6:sreg_64_xexec = COPY %5
223     SI_END_CF killed %6, implicit-def $exec, implicit-def dead $scc, implicit $exec
224     S_SLEEP 3
225     S_NOP 0
227   bb.2:
228     liveins: $vgpr0, $sgpr4_sgpr5, $sgpr8_sgpr9_sgpr10_sgpr11:0x00000003
229     S_ENDPGM 0, implicit $vgpr0, implicit $sgpr4_sgpr5, implicit $sgpr8_sgpr9_sgpr10_sgpr11
234 name: end_cf_split_block_physreg_liveout
235 tracksRegLiveness: true
236 body:             |
237   ; GCN-LABEL: name: end_cf_split_block_physreg_liveout
238   ; GCN: bb.0:
239   ; GCN-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
240   ; GCN-NEXT:   liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31
241   ; GCN-NEXT: {{  $}}
242   ; GCN-NEXT:   [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
243   ; GCN-NEXT:   [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
244   ; GCN-NEXT:   [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[COPY]], [[COPY1]], implicit $exec
245   ; GCN-NEXT:   [[COPY2:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec
246   ; GCN-NEXT:   [[S_AND_B64_:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY2]], [[V_CMP_EQ_U32_e64_]], implicit-def dead $scc
247   ; GCN-NEXT:   [[S_XOR_B64_:%[0-9]+]]:sreg_64_xexec = S_XOR_B64 [[S_AND_B64_]], [[COPY2]], implicit-def dead $scc
248   ; GCN-NEXT:   $exec = S_MOV_B64_term [[S_AND_B64_]]
249   ; GCN-NEXT:   [[S_MOV_B64_term:%[0-9]+]]:sreg_64_xexec = S_MOV_B64_term [[S_XOR_B64_]], implicit $exec
250   ; GCN-NEXT:   S_CBRANCH_EXECZ %bb.1, implicit $exec
251   ; GCN-NEXT:   S_BRANCH %bb.2
252   ; GCN-NEXT: {{  $}}
253   ; GCN-NEXT: bb.1:
254   ; GCN-NEXT:   successors: %bb.3(0x80000000)
255   ; GCN-NEXT: {{  $}}
256   ; GCN-NEXT:   [[COPY3:%[0-9]+]]:sreg_64_xexec = COPY [[S_MOV_B64_term]]
257   ; GCN-NEXT:   $exec = S_OR_B64_term $exec, [[COPY3]], implicit-def $scc
258   ; GCN-NEXT: {{  $}}
259   ; GCN-NEXT: bb.3:
260   ; GCN-NEXT:   successors: %bb.2(0x80000000)
261   ; GCN-NEXT: {{  $}}
262   ; GCN-NEXT:   $vgpr3 = V_MOV_B32_e32 0, implicit $exec
263   ; GCN-NEXT:   $sgpr4_sgpr5 = S_MOV_B64 32
264   ; GCN-NEXT: {{  $}}
265   ; GCN-NEXT: bb.2:
266   ; GCN-NEXT:   liveins: $vgpr3, $sgpr4_sgpr5
267   ; GCN-NEXT: {{  $}}
268   ; GCN-NEXT:   S_ENDPGM 0, implicit $vgpr3, implicit $sgpr4_sgpr5
269   bb.0:
270     liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31
272     %0:vgpr_32 = COPY killed $vgpr0
273     %1:vgpr_32 = COPY killed $vgpr1
274     %3:sreg_64_xexec = V_CMP_EQ_U32_e64 killed %0, killed %1, implicit $exec
275     %4:sreg_64_xexec = SI_IF %3, %bb.1, implicit-def $exec, implicit-def dead $scc, implicit $exec
276     %5:sreg_64_xexec = S_MOV_B64_term %4, implicit $exec
277     S_BRANCH %bb.2
279   bb.1:
280     successors: %bb.2
282     %6:sreg_64_xexec = COPY %5
283     SI_END_CF killed %6, implicit-def $exec, implicit-def dead $scc, implicit $exec
284     $vgpr3 = V_MOV_B32_e32 0, implicit $exec
285     $sgpr4_sgpr5 = S_MOV_B64 32
287   bb.2:
288     liveins: $vgpr3, $sgpr4_sgpr5
289     S_ENDPGM 0, implicit $vgpr3, implicit $sgpr4_sgpr5
294 name: end_cf_split_block_physreg_live_across_split
295 tracksRegLiveness: true
296 body:             |
297   ; GCN-LABEL: name: end_cf_split_block_physreg_live_across_split
298   ; GCN: bb.0:
299   ; GCN-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
300   ; GCN-NEXT:   liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31, $sgpr4_sgpr5
301   ; GCN-NEXT: {{  $}}
302   ; GCN-NEXT:   [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
303   ; GCN-NEXT:   [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
304   ; GCN-NEXT:   [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[COPY]], [[COPY1]], implicit $exec
305   ; GCN-NEXT:   [[COPY2:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec
306   ; GCN-NEXT:   [[S_AND_B64_:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY2]], [[V_CMP_EQ_U32_e64_]], implicit-def dead $scc
307   ; GCN-NEXT:   [[S_XOR_B64_:%[0-9]+]]:sreg_64_xexec = S_XOR_B64 [[S_AND_B64_]], [[COPY2]], implicit-def dead $scc
308   ; GCN-NEXT:   $exec = S_MOV_B64_term [[S_AND_B64_]]
309   ; GCN-NEXT:   [[S_MOV_B64_term:%[0-9]+]]:sreg_64_xexec = S_MOV_B64_term [[S_XOR_B64_]], implicit $exec
310   ; GCN-NEXT:   S_CBRANCH_EXECZ %bb.1, implicit $exec
311   ; GCN-NEXT:   S_BRANCH %bb.2
312   ; GCN-NEXT: {{  $}}
313   ; GCN-NEXT: bb.1:
314   ; GCN-NEXT:   successors: %bb.3(0x80000000)
315   ; GCN-NEXT:   liveins: $vgpr0, $sgpr4_sgpr5
316   ; GCN-NEXT: {{  $}}
317   ; GCN-NEXT:   [[COPY3:%[0-9]+]]:sreg_64_xexec = COPY [[S_MOV_B64_term]]
318   ; GCN-NEXT:   $sgpr4_sgpr5 = S_MOV_B64 32
319   ; GCN-NEXT:   $exec = S_OR_B64_term $exec, [[COPY3]], implicit-def $scc
320   ; GCN-NEXT: {{  $}}
321   ; GCN-NEXT: bb.3:
322   ; GCN-NEXT:   successors: %bb.2(0x80000000)
323   ; GCN-NEXT:   liveins: $vgpr0, $sgpr4_sgpr5
324   ; GCN-NEXT: {{  $}}
325   ; GCN-NEXT:   S_SLEEP 3, implicit $sgpr4_sgpr5
326   ; GCN-NEXT:   S_NOP 0
327   ; GCN-NEXT: {{  $}}
328   ; GCN-NEXT: bb.2:
329   ; GCN-NEXT:   liveins: $vgpr0, $sgpr4_sgpr5
330   ; GCN-NEXT: {{  $}}
331   ; GCN-NEXT:   S_ENDPGM 0, implicit $vgpr0, implicit $sgpr4_sgpr5
332   bb.0:
333     liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31, $sgpr4_sgpr5
335     %0:vgpr_32 = COPY killed $vgpr0
336     %1:vgpr_32 = COPY killed $vgpr1
337     %3:sreg_64_xexec = V_CMP_EQ_U32_e64 killed %0, killed %1, implicit $exec
338     %4:sreg_64_xexec = SI_IF %3, %bb.1, implicit-def $exec, implicit-def dead $scc, implicit $exec
339     %5:sreg_64_xexec = S_MOV_B64_term %4, implicit $exec
340     S_BRANCH %bb.2
342   bb.1:
343     successors: %bb.2
344     liveins: $vgpr0, $sgpr4_sgpr5
346     %6:sreg_64_xexec = COPY %5
347     $sgpr4_sgpr5 = S_MOV_B64 32
348     SI_END_CF killed %6, implicit-def $exec, implicit-def dead $scc, implicit $exec
349     S_SLEEP 3, implicit $sgpr4_sgpr5
350     S_NOP 0
352   bb.2:
353     liveins: $vgpr0, $sgpr4_sgpr5
354     S_ENDPGM 0, implicit $vgpr0, implicit $sgpr4_sgpr5
359 name: end_cf_split_block_process_next_inst
360 tracksRegLiveness: true
361 body:             |
362   ; GCN-LABEL: name: end_cf_split_block_process_next_inst
363   ; GCN: bb.0:
364   ; GCN-NEXT:   successors: %bb.1(0x80000000)
365   ; GCN-NEXT:   liveins: $vgpr0, $vgpr1, $vgpr2
366   ; GCN-NEXT: {{  $}}
367   ; GCN-NEXT:   [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
368   ; GCN-NEXT:   [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
369   ; GCN-NEXT:   [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
370   ; GCN-NEXT:   [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[COPY]], [[COPY1]], implicit $exec
371   ; GCN-NEXT:   [[V_CMP_EQ_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[COPY]], [[COPY2]], implicit $exec
372   ; GCN-NEXT:   dead %5:sreg_64_xexec = S_MOV_B64 0
373   ; GCN-NEXT: {{  $}}
374   ; GCN-NEXT: bb.1:
375   ; GCN-NEXT:   successors: %bb.3(0x80000000)
376   ; GCN-NEXT: {{  $}}
377   ; GCN-NEXT:   [[COPY3:%[0-9]+]]:sreg_64_xexec = COPY [[V_CMP_EQ_U32_e64_]]
378   ; GCN-NEXT:   $exec = S_OR_B64_term $exec, [[COPY3]], implicit-def $scc
379   ; GCN-NEXT: {{  $}}
380   ; GCN-NEXT: bb.3:
381   ; GCN-NEXT:   successors: %bb.2(0x80000000)
382   ; GCN-NEXT: {{  $}}
383   ; GCN-NEXT:   [[COPY4:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec
384   ; GCN-NEXT:   [[S_AND_B64_:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY4]], [[V_CMP_EQ_U32_e64_1]], implicit-def dead $scc
385   ; GCN-NEXT:   [[S_XOR_B64_:%[0-9]+]]:sreg_64_xexec = S_XOR_B64 [[S_AND_B64_]], [[COPY4]], implicit-def dead $scc
386   ; GCN-NEXT:   $exec = S_MOV_B64_term [[S_AND_B64_]]
387   ; GCN-NEXT:   dead %8:sreg_64_xexec = S_MOV_B64_term [[S_XOR_B64_]], implicit $exec
388   ; GCN-NEXT:   S_CBRANCH_EXECZ %bb.2, implicit $exec
389   ; GCN-NEXT: {{  $}}
390   ; GCN-NEXT: bb.2:
391   ; GCN-NEXT:   S_ENDPGM 0
392   bb.0:
393     liveins: $vgpr0, $vgpr1, $vgpr2
395     %0:vgpr_32 = COPY killed $vgpr0
396     %1:vgpr_32 = COPY killed $vgpr1
397     %2:vgpr_32 = COPY killed $vgpr2
398     %3:sreg_64_xexec = V_CMP_EQ_U32_e64 %0, killed %1, implicit $exec
399     %4:sreg_64_xexec = V_CMP_EQ_U32_e64 killed %0, killed %2, implicit $exec
400     %5:sreg_64_xexec = S_MOV_B64 0
402   bb.1:
403     successors: %bb.2
405     %6:sreg_64_xexec = COPY %3
406     SI_END_CF killed %6, implicit-def $exec, implicit-def dead $scc, implicit $exec
407     %7:sreg_64_xexec = SI_IF %4, %bb.2, implicit-def $exec, implicit-def dead $scc, implicit $exec
408     %8:sreg_64_xexec = S_MOV_B64_term %7, implicit $exec
410   bb.2:
411     S_ENDPGM 0