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
3
4# Check that assert is not triggered
5
6---
7name: si-lower-control-flow
8body: |
9  bb.0:
10    ; GCN-LABEL: name: si-lower-control-flow
11    ; GCN: [[COPY:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5
12    ; GCN: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 16, 0
13    ; GCN: [[S_AND_B32_:%[0-9]+]]:sreg_32_xm0 = S_AND_B32 [[S_LOAD_DWORD_IMM]], 255, implicit-def $scc
14    ; GCN: dead %3:sreg_32_xm0 = S_AND_B32 65535, [[S_AND_B32_]], implicit-def $scc
15    ; GCN: 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...
22
23---
24name: preserve_undef_flag_si_if_src
25tracksRegLiveness: true
26body:             |
27  ; GCN-LABEL: name: preserve_undef_flag_si_if_src
28  ; GCN: bb.0:
29  ; GCN:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
30  ; GCN:   [[COPY:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec
31  ; GCN:   [[S_AND_B64_:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY]], undef %1:sreg_64, implicit-def dead $scc
32  ; GCN:   [[S_XOR_B64_:%[0-9]+]]:sreg_64 = S_XOR_B64 [[S_AND_B64_]], [[COPY]], implicit-def dead $scc
33  ; GCN:   $exec = S_MOV_B64_term killed [[S_AND_B64_]]
34  ; GCN:   S_CBRANCH_EXECZ %bb.2, implicit $exec
35  ; GCN:   S_BRANCH %bb.1
36  ; GCN: bb.1:
37  ; GCN:   successors: %bb.2(0x80000000)
38  ; GCN: bb.2:
39  ; GCN:   S_ENDPGM 0
40  bb.0:
41    successors: %bb.1, %bb.2
42
43    %1:sreg_64 = SI_IF undef %0:sreg_64, %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec
44    S_BRANCH %bb.1
45
46  bb.1:
47    successors: %bb.2
48
49  bb.2:
50    S_ENDPGM 0
51
52...
53
54# We need to split the block for SI_END_CF, but
55---
56name: end_cf_split_block_end
57tracksRegLiveness: true
58body:             |
59  ; GCN-LABEL: name: end_cf_split_block_end
60  ; GCN: bb.0:
61  ; GCN:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
62  ; GCN:   liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31
63  ; GCN:   [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
64  ; GCN:   [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
65  ; GCN:   [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[COPY]], [[COPY1]], implicit $exec
66  ; GCN:   [[COPY2:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec
67  ; GCN:   [[S_AND_B64_:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY2]], [[V_CMP_EQ_U32_e64_]], implicit-def dead $scc
68  ; GCN:   [[S_XOR_B64_:%[0-9]+]]:sreg_64_xexec = S_XOR_B64 [[S_AND_B64_]], [[COPY2]], implicit-def dead $scc
69  ; GCN:   $exec = S_MOV_B64_term killed [[S_AND_B64_]]
70  ; GCN:   [[S_MOV_B64_term:%[0-9]+]]:sreg_64_xexec = S_MOV_B64_term [[S_XOR_B64_]], implicit $exec
71  ; GCN:   S_CBRANCH_EXECZ %bb.1, implicit $exec
72  ; GCN:   S_BRANCH %bb.2
73  ; GCN: bb.1:
74  ; GCN:   successors: %bb.2(0x80000000)
75  ; GCN:   [[COPY3:%[0-9]+]]:sreg_64_xexec = COPY [[S_MOV_B64_term]]
76  ; GCN:   $exec = S_OR_B64_term $exec, [[COPY3]], implicit-def $scc
77  ; GCN: bb.2:
78  ; GCN:   S_ENDPGM 0
79  bb.0:
80    liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31
81
82    %0:vgpr_32 = COPY killed $vgpr0
83    %1:vgpr_32 = COPY killed $vgpr1
84    %3:sreg_64_xexec = V_CMP_EQ_U32_e64 killed %0, killed %1, implicit $exec
85    %4:sreg_64_xexec = SI_IF %3, %bb.1, implicit-def $exec, implicit-def dead $scc, implicit $exec
86    %5:sreg_64_xexec = S_MOV_B64_term %4, implicit $exec
87    S_BRANCH %bb.2
88
89  bb.1:
90    successors: %bb.2
91
92    %6:sreg_64_xexec = COPY %5
93    SI_END_CF killed %6, implicit-def $exec, implicit-def dead $scc, implicit $exec
94
95  bb.2:
96    S_ENDPGM 0
97
98...
99
100---
101name: end_cf_split_block_physreg_livein
102tracksRegLiveness: true
103body:             |
104  ; GCN-LABEL: name: end_cf_split_block_physreg_livein
105  ; GCN: bb.0:
106  ; GCN:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
107  ; GCN:   liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31, $sgpr4_sgpr5
108  ; GCN:   [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
109  ; GCN:   [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
110  ; GCN:   [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[COPY]], [[COPY1]], implicit $exec
111  ; GCN:   [[COPY2:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec
112  ; GCN:   [[S_AND_B64_:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY2]], [[V_CMP_EQ_U32_e64_]], implicit-def dead $scc
113  ; GCN:   [[S_XOR_B64_:%[0-9]+]]:sreg_64_xexec = S_XOR_B64 [[S_AND_B64_]], [[COPY2]], implicit-def dead $scc
114  ; GCN:   $exec = S_MOV_B64_term killed [[S_AND_B64_]]
115  ; GCN:   [[S_MOV_B64_term:%[0-9]+]]:sreg_64_xexec = S_MOV_B64_term [[S_XOR_B64_]], implicit $exec
116  ; GCN:   S_CBRANCH_EXECZ %bb.1, implicit $exec
117  ; GCN:   S_BRANCH %bb.2
118  ; GCN: bb.1:
119  ; GCN:   successors: %bb.3(0x80000000)
120  ; GCN:   liveins: $vgpr0, $sgpr4_sgpr5
121  ; GCN:   [[COPY3:%[0-9]+]]:sreg_64_xexec = COPY [[S_MOV_B64_term]]
122  ; GCN:   S_NOP 0
123  ; GCN:   $exec = S_OR_B64_term $exec, [[COPY3]], implicit-def $scc
124  ; GCN: bb.3:
125  ; GCN:   successors: %bb.2(0x80000000)
126  ; GCN:   liveins: $vgpr0, $sgpr4_sgpr5
127  ; GCN:   S_SLEEP 3
128  ; GCN:   S_NOP 0, implicit $vgpr0, implicit $sgpr4_sgpr5
129  ; GCN: bb.2:
130  ; GCN:   S_ENDPGM 0
131  bb.0:
132    liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31, $sgpr4_sgpr5
133
134    %0:vgpr_32 = COPY killed $vgpr0
135    %1:vgpr_32 = COPY killed $vgpr1
136    %3:sreg_64_xexec = V_CMP_EQ_U32_e64 killed %0, killed %1, implicit $exec
137    %4:sreg_64_xexec = SI_IF %3, %bb.1, implicit-def $exec, implicit-def dead $scc, implicit $exec
138    %5:sreg_64_xexec = S_MOV_B64_term %4, implicit $exec
139    S_BRANCH %bb.2
140
141  bb.1:
142    successors: %bb.2
143    liveins: $vgpr0, $sgpr4_sgpr5
144
145    %6:sreg_64_xexec = COPY %5
146    S_NOP 0
147    SI_END_CF killed %6, implicit-def $exec, implicit-def dead $scc, implicit $exec
148    S_SLEEP 3
149    S_NOP 0, implicit $vgpr0, implicit $sgpr4_sgpr5
150
151  bb.2:
152    S_ENDPGM 0
153
154...
155
156---
157name: end_cf_split_block_physreg_livein_liveout
158tracksRegLiveness: true
159body:             |
160  ; GCN-LABEL: name: end_cf_split_block_physreg_livein_liveout
161  ; GCN: bb.0:
162  ; GCN:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
163  ; GCN:   liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31, $sgpr4_sgpr5, $sgpr8_sgpr9_sgpr10_sgpr11:0x0000000000000003
164  ; GCN:   [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
165  ; GCN:   [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
166  ; GCN:   [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[COPY]], [[COPY1]], implicit $exec
167  ; GCN:   [[COPY2:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec
168  ; GCN:   [[S_AND_B64_:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY2]], [[V_CMP_EQ_U32_e64_]], implicit-def dead $scc
169  ; GCN:   [[S_XOR_B64_:%[0-9]+]]:sreg_64_xexec = S_XOR_B64 [[S_AND_B64_]], [[COPY2]], implicit-def dead $scc
170  ; GCN:   $exec = S_MOV_B64_term killed [[S_AND_B64_]]
171  ; GCN:   [[S_MOV_B64_term:%[0-9]+]]:sreg_64_xexec = S_MOV_B64_term [[S_XOR_B64_]], implicit $exec
172  ; GCN:   S_CBRANCH_EXECZ %bb.1, implicit $exec
173  ; GCN:   S_BRANCH %bb.2
174  ; GCN: bb.1:
175  ; GCN:   successors: %bb.3(0x80000000)
176  ; GCN:   liveins: $vgpr0, $sgpr4_sgpr5, $sgpr8_sgpr9_sgpr10_sgpr11:0x0000000000000003
177  ; GCN:   [[COPY3:%[0-9]+]]:sreg_64_xexec = COPY [[S_MOV_B64_term]]
178  ; GCN:   $exec = S_OR_B64_term $exec, [[COPY3]], implicit-def $scc
179  ; GCN: bb.3:
180  ; GCN:   successors: %bb.2(0x80000000)
181  ; GCN:   liveins: $vgpr0, $sgpr4_sgpr5, $sgpr8_sgpr9
182  ; GCN:   S_SLEEP 3
183  ; GCN:   S_NOP 0
184  ; GCN: bb.2:
185  ; GCN:   liveins: $vgpr0, $sgpr4_sgpr5, $sgpr8_sgpr9_sgpr10_sgpr11:0x0000000000000003
186  ; GCN:   S_ENDPGM 0, implicit $vgpr0, implicit $sgpr4_sgpr5, implicit $sgpr8_sgpr9_sgpr10_sgpr11
187  bb.0:
188    liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31, $sgpr4_sgpr5, $sgpr8_sgpr9_sgpr10_sgpr11:0x00000003
189
190    %0:vgpr_32 = COPY killed $vgpr0
191    %1:vgpr_32 = COPY killed $vgpr1
192    %3:sreg_64_xexec = V_CMP_EQ_U32_e64 killed %0, killed %1, implicit $exec
193    %4:sreg_64_xexec = SI_IF %3, %bb.1, implicit-def $exec, implicit-def dead $scc, implicit $exec
194    %5:sreg_64_xexec = S_MOV_B64_term %4, implicit $exec
195    S_BRANCH %bb.2
196
197  bb.1:
198    successors: %bb.2
199    liveins: $vgpr0, $sgpr4_sgpr5, $sgpr8_sgpr9_sgpr10_sgpr11:0x00000003
200
201    %6:sreg_64_xexec = COPY %5
202    SI_END_CF killed %6, implicit-def $exec, implicit-def dead $scc, implicit $exec
203    S_SLEEP 3
204    S_NOP 0
205
206  bb.2:
207    liveins: $vgpr0, $sgpr4_sgpr5, $sgpr8_sgpr9_sgpr10_sgpr11:0x00000003
208    S_ENDPGM 0, implicit $vgpr0, implicit $sgpr4_sgpr5, implicit $sgpr8_sgpr9_sgpr10_sgpr11
209
210...
211
212---
213name: end_cf_split_block_physreg_liveout
214tracksRegLiveness: true
215body:             |
216  ; GCN-LABEL: name: end_cf_split_block_physreg_liveout
217  ; GCN: bb.0:
218  ; GCN:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
219  ; GCN:   liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31
220  ; GCN:   [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
221  ; GCN:   [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
222  ; GCN:   [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[COPY]], [[COPY1]], implicit $exec
223  ; GCN:   [[COPY2:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec
224  ; GCN:   [[S_AND_B64_:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY2]], [[V_CMP_EQ_U32_e64_]], implicit-def dead $scc
225  ; GCN:   [[S_XOR_B64_:%[0-9]+]]:sreg_64_xexec = S_XOR_B64 [[S_AND_B64_]], [[COPY2]], implicit-def dead $scc
226  ; GCN:   $exec = S_MOV_B64_term killed [[S_AND_B64_]]
227  ; GCN:   [[S_MOV_B64_term:%[0-9]+]]:sreg_64_xexec = S_MOV_B64_term [[S_XOR_B64_]], implicit $exec
228  ; GCN:   S_CBRANCH_EXECZ %bb.1, implicit $exec
229  ; GCN:   S_BRANCH %bb.2
230  ; GCN: bb.1:
231  ; GCN:   successors: %bb.3(0x80000000)
232  ; GCN:   [[COPY3:%[0-9]+]]:sreg_64_xexec = COPY [[S_MOV_B64_term]]
233  ; GCN:   $exec = S_OR_B64_term $exec, [[COPY3]], implicit-def $scc
234  ; GCN: bb.3:
235  ; GCN:   successors: %bb.2(0x80000000)
236  ; GCN:   $vgpr3 = V_MOV_B32_e32 0, implicit $exec
237  ; GCN:   $sgpr4_sgpr5 = S_MOV_B64 32
238  ; GCN: bb.2:
239  ; GCN:   liveins: $vgpr3, $sgpr4_sgpr5
240  ; GCN:   S_ENDPGM 0, implicit $vgpr3, implicit $sgpr4_sgpr5
241  bb.0:
242    liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31
243
244    %0:vgpr_32 = COPY killed $vgpr0
245    %1:vgpr_32 = COPY killed $vgpr1
246    %3:sreg_64_xexec = V_CMP_EQ_U32_e64 killed %0, killed %1, implicit $exec
247    %4:sreg_64_xexec = SI_IF %3, %bb.1, implicit-def $exec, implicit-def dead $scc, implicit $exec
248    %5:sreg_64_xexec = S_MOV_B64_term %4, implicit $exec
249    S_BRANCH %bb.2
250
251  bb.1:
252    successors: %bb.2
253
254    %6:sreg_64_xexec = COPY %5
255    SI_END_CF killed %6, implicit-def $exec, implicit-def dead $scc, implicit $exec
256    $vgpr3 = V_MOV_B32_e32 0, implicit $exec
257    $sgpr4_sgpr5 = S_MOV_B64 32
258
259  bb.2:
260    liveins: $vgpr3, $sgpr4_sgpr5
261    S_ENDPGM 0, implicit $vgpr3, implicit $sgpr4_sgpr5
262
263...
264
265---
266name: end_cf_split_block_physreg_live_across_split
267tracksRegLiveness: true
268body:             |
269  ; GCN-LABEL: name: end_cf_split_block_physreg_live_across_split
270  ; GCN: bb.0:
271  ; GCN:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
272  ; GCN:   liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31, $sgpr4_sgpr5
273  ; GCN:   [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
274  ; GCN:   [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
275  ; GCN:   [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[COPY]], [[COPY1]], implicit $exec
276  ; GCN:   [[COPY2:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec
277  ; GCN:   [[S_AND_B64_:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY2]], [[V_CMP_EQ_U32_e64_]], implicit-def dead $scc
278  ; GCN:   [[S_XOR_B64_:%[0-9]+]]:sreg_64_xexec = S_XOR_B64 [[S_AND_B64_]], [[COPY2]], implicit-def dead $scc
279  ; GCN:   $exec = S_MOV_B64_term killed [[S_AND_B64_]]
280  ; GCN:   [[S_MOV_B64_term:%[0-9]+]]:sreg_64_xexec = S_MOV_B64_term [[S_XOR_B64_]], implicit $exec
281  ; GCN:   S_CBRANCH_EXECZ %bb.1, implicit $exec
282  ; GCN:   S_BRANCH %bb.2
283  ; GCN: bb.1:
284  ; GCN:   successors: %bb.3(0x80000000)
285  ; GCN:   liveins: $vgpr0, $sgpr4_sgpr5
286  ; GCN:   [[COPY3:%[0-9]+]]:sreg_64_xexec = COPY [[S_MOV_B64_term]]
287  ; GCN:   $sgpr4_sgpr5 = S_MOV_B64 32
288  ; GCN:   $exec = S_OR_B64_term $exec, [[COPY3]], implicit-def $scc
289  ; GCN: bb.3:
290  ; GCN:   successors: %bb.2(0x80000000)
291  ; GCN:   liveins: $vgpr0, $sgpr4_sgpr5
292  ; GCN:   S_SLEEP 3, implicit $sgpr4_sgpr5
293  ; GCN:   S_NOP 0
294  ; GCN: bb.2:
295  ; GCN:   liveins: $vgpr0, $sgpr4_sgpr5
296  ; GCN:   S_ENDPGM 0, implicit $vgpr0, implicit $sgpr4_sgpr5
297  bb.0:
298    liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31, $sgpr4_sgpr5
299
300    %0:vgpr_32 = COPY killed $vgpr0
301    %1:vgpr_32 = COPY killed $vgpr1
302    %3:sreg_64_xexec = V_CMP_EQ_U32_e64 killed %0, killed %1, implicit $exec
303    %4:sreg_64_xexec = SI_IF %3, %bb.1, implicit-def $exec, implicit-def dead $scc, implicit $exec
304    %5:sreg_64_xexec = S_MOV_B64_term %4, implicit $exec
305    S_BRANCH %bb.2
306
307  bb.1:
308    successors: %bb.2
309    liveins: $vgpr0, $sgpr4_sgpr5
310
311    %6:sreg_64_xexec = COPY %5
312    $sgpr4_sgpr5 = S_MOV_B64 32
313    SI_END_CF killed %6, implicit-def $exec, implicit-def dead $scc, implicit $exec
314    S_SLEEP 3, implicit $sgpr4_sgpr5
315    S_NOP 0
316
317  bb.2:
318    liveins: $vgpr0, $sgpr4_sgpr5
319    S_ENDPGM 0, implicit $vgpr0, implicit $sgpr4_sgpr5
320
321...
322
323---
324name: end_cf_split_block_process_next_inst
325tracksRegLiveness: true
326body:             |
327  ; GCN-LABEL: name: end_cf_split_block_process_next_inst
328  ; GCN: bb.0:
329  ; GCN:   successors: %bb.1(0x80000000)
330  ; GCN:   liveins: $vgpr0, $vgpr1, $vgpr2
331  ; GCN:   [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
332  ; GCN:   [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
333  ; GCN:   [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
334  ; GCN:   [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[COPY]], [[COPY1]], implicit $exec
335  ; GCN:   [[V_CMP_EQ_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[COPY]], [[COPY2]], implicit $exec
336  ; GCN:   dead %5:sreg_64_xexec = S_MOV_B64 0
337  ; GCN: bb.1:
338  ; GCN:   successors: %bb.3(0x80000000)
339  ; GCN:   [[COPY3:%[0-9]+]]:sreg_64_xexec = COPY [[V_CMP_EQ_U32_e64_]]
340  ; GCN:   $exec = S_OR_B64_term $exec, [[COPY3]], implicit-def $scc
341  ; GCN: bb.3:
342  ; GCN:   successors: %bb.2(0x80000000)
343  ; GCN:   [[COPY4:%[0-9]+]]:sreg_64 = COPY $exec, implicit-def $exec
344  ; GCN:   [[S_AND_B64_:%[0-9]+]]:sreg_64 = S_AND_B64 [[COPY4]], [[V_CMP_EQ_U32_e64_1]], implicit-def dead $scc
345  ; GCN:   [[S_XOR_B64_:%[0-9]+]]:sreg_64_xexec = S_XOR_B64 [[S_AND_B64_]], [[COPY4]], implicit-def dead $scc
346  ; GCN:   $exec = S_MOV_B64_term killed [[S_AND_B64_]]
347  ; GCN:   dead %8:sreg_64_xexec = S_MOV_B64_term [[S_XOR_B64_]], implicit $exec
348  ; GCN:   S_CBRANCH_EXECZ %bb.2, implicit $exec
349  ; GCN: bb.2:
350  ; GCN:   S_ENDPGM 0
351  bb.0:
352    liveins: $vgpr0, $vgpr1, $vgpr2
353
354    %0:vgpr_32 = COPY killed $vgpr0
355    %1:vgpr_32 = COPY killed $vgpr1
356    %2:vgpr_32 = COPY killed $vgpr2
357    %3:sreg_64_xexec = V_CMP_EQ_U32_e64 %0, killed %1, implicit $exec
358    %4:sreg_64_xexec = V_CMP_EQ_U32_e64 killed %0, killed %2, implicit $exec
359    %5:sreg_64_xexec = S_MOV_B64 0
360
361  bb.1:
362    successors: %bb.2
363
364    %6:sreg_64_xexec = COPY %3
365    SI_END_CF killed %6, implicit-def $exec, implicit-def dead $scc, implicit $exec
366    %7:sreg_64_xexec = SI_IF %4, %bb.2, implicit-def $exec, implicit-def dead $scc, implicit $exec
367    %8:sreg_64_xexec = S_MOV_B64_term %7, implicit $exec
368
369  bb.2:
370    S_ENDPGM 0
371
372...
373