Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / GlobalISel / inst-select-copy.mir
blob6047bda19753a775fb88d32fc55e4803ce8a7827
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=hawaii -run-pass=instruction-select -verify-machineinstrs -o - %s | FileCheck -check-prefix=WAVE64 %s
3 # RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1010 -mattr=+wavefrontsize32,-wavefrontsize64  -run-pass=instruction-select -verify-machineinstrs -o - %s | FileCheck -check-prefix=WAVE32 %s
4 # RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 -mattr=+wavefrontsize32,-wavefrontsize64  -run-pass=instruction-select -verify-machineinstrs -o - %s | FileCheck -check-prefix=WAVE32 %s
6 ---
8 name:            copy
9 legalized:       true
10 regBankSelected: true
13 body: |
14   bb.0:
15     liveins: $sgpr2_sgpr3
17     ; WAVE64-LABEL: name: copy
18     ; WAVE64: liveins: $sgpr2_sgpr3
19     ; WAVE64-NEXT: {{  $}}
20     ; WAVE64-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr2_sgpr3
21     ; WAVE64-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY [[COPY]]
22     ; WAVE64-NEXT: [[DEF:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF
23     ; WAVE64-NEXT: FLAT_STORE_DWORD [[COPY1]], [[DEF]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1)
24     ;
25     ; WAVE32-LABEL: name: copy
26     ; WAVE32: liveins: $sgpr2_sgpr3
27     ; WAVE32-NEXT: {{  $}}
28     ; WAVE32-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr2_sgpr3
29     ; WAVE32-NEXT: [[DEF:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF
30     ; WAVE32-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
31     ; WAVE32-NEXT: GLOBAL_STORE_DWORD_SADDR [[V_MOV_B32_e32_]], [[DEF]], [[COPY]], 0, 0, implicit $exec :: (store (s32), addrspace 1)
32     %0:sgpr(p1) = COPY $sgpr2_sgpr3
33     %1:vgpr(p1) = COPY %0
34     %2:vgpr(s32) = G_IMPLICIT_DEF
35     G_STORE %2, %1 :: (store (s32), addrspace 1)
36 ...
37 ---
39 name:            copy_vcc_bank_sgpr_bank
40 legalized:       true
41 regBankSelected: true
43 body: |
44   bb.0:
45     liveins: $vgpr0_vgpr1, $vgpr2, $vgpr3, $scc
47     ; WAVE64-LABEL: name: copy_vcc_bank_sgpr_bank
48     ; WAVE64: liveins: $vgpr0_vgpr1, $vgpr2, $vgpr3, $scc
49     ; WAVE64-NEXT: {{  $}}
50     ; WAVE64-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
51     ; WAVE64-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
52     ; WAVE64-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr3
53     ; WAVE64-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $scc
54     ; WAVE64-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 1, [[COPY3]], implicit-def dead $scc
55     ; WAVE64-NEXT: [[V_CMP_NE_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_NE_U32_e64 0, [[S_AND_B32_]], implicit $exec
56     ; WAVE64-NEXT: [[V_CNDMASK_B32_e64_:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e64 0, [[COPY2]], 0, [[COPY1]], [[V_CMP_NE_U32_e64_]], implicit $exec
57     ; WAVE64-NEXT: FLAT_STORE_DWORD [[COPY]], [[V_CNDMASK_B32_e64_]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1)
58     ;
59     ; WAVE32-LABEL: name: copy_vcc_bank_sgpr_bank
60     ; WAVE32: liveins: $vgpr0_vgpr1, $vgpr2, $vgpr3, $scc
61     ; WAVE32-NEXT: {{  $}}
62     ; WAVE32-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
63     ; WAVE32-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
64     ; WAVE32-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr3
65     ; WAVE32-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $scc
66     ; WAVE32-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 1, [[COPY3]], implicit-def dead $scc
67     ; WAVE32-NEXT: [[V_CMP_NE_U32_e64_:%[0-9]+]]:sreg_32_xm0_xexec = V_CMP_NE_U32_e64 0, [[S_AND_B32_]], implicit $exec
68     ; WAVE32-NEXT: [[V_CNDMASK_B32_e64_:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e64 0, [[COPY2]], 0, [[COPY1]], [[V_CMP_NE_U32_e64_]], implicit $exec
69     ; WAVE32-NEXT: GLOBAL_STORE_DWORD [[COPY]], [[V_CNDMASK_B32_e64_]], 0, 0, implicit $exec :: (store (s32), addrspace 1)
70     %0:vgpr(p1) = COPY $vgpr0_vgpr1
71     %1:vgpr(s32) = COPY $vgpr2
72     %2:vgpr(s32) = COPY $vgpr3
73     %3:sgpr(s1) = COPY $scc
74     %4:vcc(s1) = COPY %3
75     %5:vgpr(s32) = G_SELECT %4, %1, %2
76     G_STORE %5, %0 :: (store (s32), addrspace 1)
77 ...
78 ---
80 name:            copy_vcc_bank_sgpr_bank_2_uses
81 legalized:       true
82 regBankSelected: true
84 body: |
85   bb.0:
86     liveins: $vgpr0_vgpr1, $vgpr2, $vgpr3, $scc
88     ; WAVE64-LABEL: name: copy_vcc_bank_sgpr_bank_2_uses
89     ; WAVE64: liveins: $vgpr0_vgpr1, $vgpr2, $vgpr3, $scc
90     ; WAVE64-NEXT: {{  $}}
91     ; WAVE64-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
92     ; WAVE64-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
93     ; WAVE64-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr3
94     ; WAVE64-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $scc
95     ; WAVE64-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 1, [[COPY3]], implicit-def dead $scc
96     ; WAVE64-NEXT: [[V_CMP_NE_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_NE_U32_e64 0, [[S_AND_B32_]], implicit $exec
97     ; WAVE64-NEXT: [[V_CNDMASK_B32_e64_:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e64 0, [[COPY2]], 0, [[COPY1]], [[V_CMP_NE_U32_e64_]], implicit $exec
98     ; WAVE64-NEXT: [[S_AND_B32_1:%[0-9]+]]:sreg_32 = S_AND_B32 1, [[COPY3]], implicit-def dead $scc
99     ; WAVE64-NEXT: [[V_CMP_NE_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_CMP_NE_U32_e64 0, [[S_AND_B32_1]], implicit $exec
100     ; WAVE64-NEXT: [[V_CNDMASK_B32_e64_1:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e64 0, [[V_CNDMASK_B32_e64_]], 0, [[COPY1]], [[V_CMP_NE_U32_e64_1]], implicit $exec
101     ; WAVE64-NEXT: FLAT_STORE_DWORD [[COPY]], [[V_CNDMASK_B32_e64_1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1)
102     ;
103     ; WAVE32-LABEL: name: copy_vcc_bank_sgpr_bank_2_uses
104     ; WAVE32: liveins: $vgpr0_vgpr1, $vgpr2, $vgpr3, $scc
105     ; WAVE32-NEXT: {{  $}}
106     ; WAVE32-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
107     ; WAVE32-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
108     ; WAVE32-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr3
109     ; WAVE32-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $scc
110     ; WAVE32-NEXT: [[COPY4:%[0-9]+]]:sreg_32_xm0_xexec = COPY [[COPY3]]
111     ; WAVE32-NEXT: [[V_CNDMASK_B32_e64_:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e64 0, [[COPY2]], 0, [[COPY1]], [[COPY4]], implicit $exec
112     ; WAVE32-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 1, [[COPY3]], implicit-def dead $scc
113     ; WAVE32-NEXT: [[V_CMP_NE_U32_e64_:%[0-9]+]]:sreg_32_xm0_xexec = V_CMP_NE_U32_e64 0, [[S_AND_B32_]], implicit $exec
114     ; WAVE32-NEXT: [[V_CNDMASK_B32_e64_1:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e64 0, [[V_CNDMASK_B32_e64_]], 0, [[COPY1]], [[V_CMP_NE_U32_e64_]], implicit $exec
115     ; WAVE32-NEXT: GLOBAL_STORE_DWORD [[COPY]], [[V_CNDMASK_B32_e64_1]], 0, 0, implicit $exec :: (store (s32), addrspace 1)
116     %0:vgpr(p1) = COPY $vgpr0_vgpr1
117     %1:vgpr(s32) = COPY $vgpr2
118     %2:vgpr(s32) = COPY $vgpr3
119     %3:sgpr(s1) = COPY $scc
120     %4:vcc(s1) = COPY %3
121     %5:vgpr(s32) = G_SELECT %4, %1, %2
122     %6:vcc(s1) = COPY %3
123     %7:vgpr(s32) = G_SELECT %6, %1, %5
124     G_STORE %7, %0 :: (store (s32), addrspace 1)
129 name:            copy_vcc_bank_scc_physreg
130 legalized:       true
131 regBankSelected: true
133 body: |
134   bb.0:
135     liveins: $vgpr0_vgpr1, $vgpr2, $vgpr3, $scc
137     ; WAVE64-LABEL: name: copy_vcc_bank_scc_physreg
138     ; WAVE64: liveins: $vgpr0_vgpr1, $vgpr2, $vgpr3, $scc
139     ; WAVE64-NEXT: {{  $}}
140     ; WAVE64-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
141     ; WAVE64-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
142     ; WAVE64-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr3
143     ; WAVE64-NEXT: [[COPY3:%[0-9]+]]:sreg_64_xexec = COPY $scc
144     ; WAVE64-NEXT: [[V_CNDMASK_B32_e64_:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e64 0, [[COPY2]], 0, [[COPY1]], [[COPY3]], implicit $exec
145     ; WAVE64-NEXT: FLAT_STORE_DWORD [[COPY]], [[V_CNDMASK_B32_e64_]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 1)
146     ;
147     ; WAVE32-LABEL: name: copy_vcc_bank_scc_physreg
148     ; WAVE32: liveins: $vgpr0_vgpr1, $vgpr2, $vgpr3, $scc
149     ; WAVE32-NEXT: {{  $}}
150     ; WAVE32-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
151     ; WAVE32-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
152     ; WAVE32-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr3
153     ; WAVE32-NEXT: [[COPY3:%[0-9]+]]:sreg_32_xm0_xexec = COPY $scc
154     ; WAVE32-NEXT: [[V_CNDMASK_B32_e64_:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e64 0, [[COPY2]], 0, [[COPY1]], [[COPY3]], implicit $exec
155     ; WAVE32-NEXT: GLOBAL_STORE_DWORD [[COPY]], [[V_CNDMASK_B32_e64_]], 0, 0, implicit $exec :: (store (s32), addrspace 1)
156     %0:vgpr(p1) = COPY $vgpr0_vgpr1
157     %1:vgpr(s32) = COPY $vgpr2
158     %2:vgpr(s32) = COPY $vgpr3
159     %3:vcc(s1) = COPY $scc
160     %5:vgpr(s32) = G_SELECT %3, %1, %2
161     G_STORE %5, %0 :: (store (s32), addrspace 1)
165 name:            copy_sgpr_no_type
166 legalized:       true
167 regBankSelected: true
170 body: |
171   bb.0:
172     liveins: $sgpr0
173     ; WAVE64-LABEL: name: copy_sgpr_no_type
174     ; WAVE64: liveins: $sgpr0
175     ; WAVE64-NEXT: {{  $}}
176     ; WAVE64-NEXT: [[COPY:%[0-9]+]]:sreg_32_xm0 = COPY $sgpr0
177     ; WAVE64-NEXT: S_ENDPGM 0, implicit [[COPY]]
178     ;
179     ; WAVE32-LABEL: name: copy_sgpr_no_type
180     ; WAVE32: liveins: $sgpr0
181     ; WAVE32-NEXT: {{  $}}
182     ; WAVE32-NEXT: [[COPY:%[0-9]+]]:sreg_32_xm0 = COPY $sgpr0
183     ; WAVE32-NEXT: S_ENDPGM 0, implicit [[COPY]]
184     %0:sreg_32_xm0 = COPY $sgpr0
185     %1:sreg_32_xm0 = COPY %0
186     S_ENDPGM 0, implicit %1
192 name:            copy_vgpr_no_type
193 legalized:       true
194 regBankSelected: true
197 body: |
198   bb.0:
199     liveins: $vgpr0
200     ; WAVE64-LABEL: name: copy_vgpr_no_type
201     ; WAVE64: liveins: $vgpr0
202     ; WAVE64-NEXT: {{  $}}
203     ; WAVE64-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
204     ; WAVE64-NEXT: S_ENDPGM 0, implicit [[COPY]]
205     ;
206     ; WAVE32-LABEL: name: copy_vgpr_no_type
207     ; WAVE32: liveins: $vgpr0
208     ; WAVE32-NEXT: {{  $}}
209     ; WAVE32-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
210     ; WAVE32-NEXT: S_ENDPGM 0, implicit [[COPY]]
211     %0:vgpr_32 = COPY $vgpr0
212     %1:vgpr_32 = COPY %0
213     S_ENDPGM 0, implicit %1
219 name:            copy_maybe_vcc
220 legalized:       true
221 regBankSelected: true
224 body: |
225   bb.0:
226     liveins: $sgpr0_sgpr1
227     ; WAVE64-LABEL: name: copy_maybe_vcc
228     ; WAVE64: liveins: $sgpr0_sgpr1
229     ; WAVE64-NEXT: {{  $}}
230     ; WAVE64-NEXT: [[COPY:%[0-9]+]]:sreg_64_xexec = COPY $sgpr0_sgpr1
231     ; WAVE64-NEXT: S_ENDPGM 0, implicit [[COPY]]
232     ;
233     ; WAVE32-LABEL: name: copy_maybe_vcc
234     ; WAVE32: liveins: $sgpr0_sgpr1
235     ; WAVE32-NEXT: {{  $}}
236     ; WAVE32-NEXT: [[COPY:%[0-9]+]]:sreg_64_xexec = COPY $sgpr0_sgpr1
237     ; WAVE32-NEXT: S_ENDPGM 0, implicit [[COPY]]
238     %0:sreg_64_xexec = COPY $sgpr0_sgpr1
239     %1:sreg_64_xexec = COPY %0
240     S_ENDPGM 0, implicit %1
244 # FIXME: This is malformed. There should never be a trunc to vcc.
247 name:            copy_s1_vcc_to_vcc
248 legalized:       true
249 regBankSelected: true
252 body: |
253   bb.0:
254     liveins: $sgpr0_sgpr1
256     ; WAVE64-LABEL: name: copy_s1_vcc_to_vcc
257     ; WAVE64: liveins: $sgpr0_sgpr1
258     ; WAVE64-NEXT: {{  $}}
259     ; WAVE64-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
260     ; WAVE64-NEXT: [[COPY1:%[0-9]+]]:sreg_64_xexec = COPY [[COPY]]
261     ; WAVE64-NEXT: S_ENDPGM 0, implicit [[COPY1]]
262     ;
263     ; WAVE32-LABEL: name: copy_s1_vcc_to_vcc
264     ; WAVE32: liveins: $sgpr0_sgpr1
265     ; WAVE32-NEXT: {{  $}}
266     ; WAVE32-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
267     ; WAVE32-NEXT: [[COPY1:%[0-9]+]]:sreg_32_xm0_xexec = COPY [[COPY]]
268     ; WAVE32-NEXT: S_ENDPGM 0, implicit [[COPY1]]
269     %0:sgpr(s32) = COPY $sgpr0
270     %1:vcc(s1) = G_TRUNC %0
271     %2:vcc(s1) = COPY %1
272     S_ENDPGM 0, implicit %2
278 name:            copy_s64_to_vcc
279 legalized:       true
280 regBankSelected: true
283 body: |
284   bb.0:
285     liveins: $sgpr0_sgpr1
286     ; WAVE64-LABEL: name: copy_s64_to_vcc
287     ; WAVE64: liveins: $sgpr0_sgpr1
288     ; WAVE64-NEXT: {{  $}}
289     ; WAVE64-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
290     ; WAVE64-NEXT: $vcc = COPY [[COPY]]
291     ; WAVE64-NEXT: S_ENDPGM 0, implicit $vcc
292     ;
293     ; WAVE32-LABEL: name: copy_s64_to_vcc
294     ; WAVE32: liveins: $sgpr0_sgpr1
295     ; WAVE32-NEXT: {{  $}}
296     ; WAVE32-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
297     ; WAVE32-NEXT: $vcc = COPY [[COPY]]
298     ; WAVE32-NEXT: S_ENDPGM 0, implicit $vcc_lo
299     %0:sgpr(s64) = COPY $sgpr0_sgpr1
300     $vcc = COPY %0
301     S_ENDPGM 0, implicit $vcc
307 name:            copy_s32_to_vcc_lo
308 legalized:       true
309 regBankSelected: true
312 body: |
313   bb.0:
314     liveins: $sgpr0
315     ; WAVE64-LABEL: name: copy_s32_to_vcc_lo
316     ; WAVE64: liveins: $sgpr0
317     ; WAVE64-NEXT: {{  $}}
318     ; WAVE64-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
319     ; WAVE64-NEXT: $vcc_lo = COPY [[COPY]]
320     ; WAVE64-NEXT: S_ENDPGM 0, implicit $vcc
321     ;
322     ; WAVE32-LABEL: name: copy_s32_to_vcc_lo
323     ; WAVE32: liveins: $sgpr0
324     ; WAVE32-NEXT: {{  $}}
325     ; WAVE32-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
326     ; WAVE32-NEXT: $vcc_lo = COPY [[COPY]]
327     ; WAVE32-NEXT: S_ENDPGM 0, implicit $vcc_lo
328     %0:sgpr(s32) = COPY $sgpr0
329     $vcc_lo = COPY %0
330     S_ENDPGM 0, implicit $vcc
336 name:            copy_vcc_to_s64
337 legalized:       true
338 regBankSelected: true
341 body: |
342   bb.0:
343     liveins: $vcc
344     ; WAVE64-LABEL: name: copy_vcc_to_s64
345     ; WAVE64: liveins: $vcc
346     ; WAVE64-NEXT: {{  $}}
347     ; WAVE64-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $vcc
348     ; WAVE64-NEXT: S_ENDPGM 0, implicit [[COPY]]
349     ;
350     ; WAVE32-LABEL: name: copy_vcc_to_s64
351     ; WAVE32: liveins: $vcc
352     ; WAVE32-NEXT: {{  $}}
353     ; WAVE32-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $vcc
354     ; WAVE32-NEXT: S_ENDPGM 0, implicit [[COPY]]
355     %0:sgpr(s64) = COPY $vcc
356     S_ENDPGM 0, implicit %0
362 name:            copy_vcc_lo_to_s32
363 legalized:       true
364 regBankSelected: true
367 body: |
368   bb.0:
369     liveins: $vcc
370     ; WAVE64-LABEL: name: copy_vcc_lo_to_s32
371     ; WAVE64: liveins: $vcc
372     ; WAVE64-NEXT: {{  $}}
373     ; WAVE64-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $vcc_lo
374     ; WAVE64-NEXT: S_ENDPGM 0, implicit [[COPY]]
375     ;
376     ; WAVE32-LABEL: name: copy_vcc_lo_to_s32
377     ; WAVE32: liveins: $vcc
378     ; WAVE32-NEXT: {{  $}}
379     ; WAVE32-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $vcc_lo
380     ; WAVE32-NEXT: S_ENDPGM 0, implicit [[COPY]]
381     %0:sgpr(s32) = COPY $vcc_lo
382     S_ENDPGM 0, implicit %0
388 name:            copy_s1_to_vcc
389 legalized:       true
390 regBankSelected: true
391 tracksRegLiveness: true
392 body:             |
393   bb.0:
394     liveins: $sgpr0_sgpr1
396     ; WAVE64-LABEL: name: copy_s1_to_vcc
397     ; WAVE64: liveins: $sgpr0_sgpr1
398     ; WAVE64-NEXT: {{  $}}
399     ; WAVE64-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
400     ; WAVE64-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub0
401     ; WAVE64-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 1, [[COPY1]], implicit-def dead $scc
402     ; WAVE64-NEXT: [[V_CMP_NE_U32_e64_:%[0-9]+]]:sreg_64 = V_CMP_NE_U32_e64 0, [[S_AND_B32_]], implicit $exec
403     ; WAVE64-NEXT: S_ENDPGM 0, implicit [[V_CMP_NE_U32_e64_]]
404     ;
405     ; WAVE32-LABEL: name: copy_s1_to_vcc
406     ; WAVE32: liveins: $sgpr0_sgpr1
407     ; WAVE32-NEXT: {{  $}}
408     ; WAVE32-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
409     ; WAVE32-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub0
410     ; WAVE32-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 1, [[COPY1]], implicit-def dead $scc
411     ; WAVE32-NEXT: [[V_CMP_NE_U32_e64_:%[0-9]+]]:sreg_32 = V_CMP_NE_U32_e64 0, [[S_AND_B32_]], implicit $exec
412     ; WAVE32-NEXT: S_ENDPGM 0, implicit [[V_CMP_NE_U32_e64_]]
413     %0:sgpr(s64) = COPY $sgpr0_sgpr1
414     %1:sgpr(s1) = G_TRUNC %0(s64)
415     %2:vcc(s1) = COPY %1(s1)
416     S_ENDPGM 0, implicit %2
422 name:            copy_s1_false_to_vcc
423 legalized:       true
424 regBankSelected: true
425 tracksRegLiveness: true
426 body:             |
427   bb.0:
428     liveins: $sgpr0
430     ; WAVE64-LABEL: name: copy_s1_false_to_vcc
431     ; WAVE64: liveins: $sgpr0
432     ; WAVE64-NEXT: {{  $}}
433     ; WAVE64-NEXT: [[S_MOV_B64_:%[0-9]+]]:sreg_64 = S_MOV_B64 0
434     ; WAVE64-NEXT: S_ENDPGM 0, implicit [[S_MOV_B64_]]
435     ;
436     ; WAVE32-LABEL: name: copy_s1_false_to_vcc
437     ; WAVE32: liveins: $sgpr0
438     ; WAVE32-NEXT: {{  $}}
439     ; WAVE32-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 0
440     ; WAVE32-NEXT: S_ENDPGM 0, implicit [[S_MOV_B32_]]
441     %0:sgpr(s1) = G_CONSTANT i1 false
442     %1:vcc(s1) = COPY %0(s1)
443     S_ENDPGM 0, implicit %1
449 name:            copy_s1_true_to_vcc
450 legalized:       true
451 regBankSelected: true
452 tracksRegLiveness: true
453 body:             |
454   bb.0:
455     liveins: $sgpr0
457     ; WAVE64-LABEL: name: copy_s1_true_to_vcc
458     ; WAVE64: liveins: $sgpr0
459     ; WAVE64-NEXT: {{  $}}
460     ; WAVE64-NEXT: [[S_MOV_B64_:%[0-9]+]]:sreg_64 = S_MOV_B64 -1
461     ; WAVE64-NEXT: S_ENDPGM 0, implicit [[S_MOV_B64_]]
462     ;
463     ; WAVE32-LABEL: name: copy_s1_true_to_vcc
464     ; WAVE32: liveins: $sgpr0
465     ; WAVE32-NEXT: {{  $}}
466     ; WAVE32-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 -1
467     ; WAVE32-NEXT: S_ENDPGM 0, implicit [[S_MOV_B32_]]
468     %0:sgpr(s1) = G_CONSTANT i1 true
469     %1:vcc(s1) = COPY %0(s1)
470     S_ENDPGM 0, implicit %1