xref: /llvm-project/llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-copy.mir (revision f6a8eb98b13ee50c67ecf4804461a23fba7398aa)
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 -run-pass=instruction-select -verify-machineinstrs -o - %s | FileCheck -check-prefix=WAVE32 %s
4# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 -run-pass=instruction-select -verify-machineinstrs -o - %s | FileCheck -check-prefix=WAVE32 %s
5
6---
7
8name:            copy
9legalized:       true
10regBankSelected: true
11
12
13body: |
14  bb.0:
15    liveins: $sgpr2_sgpr3
16
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_xexec_xnull = 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---
38
39name:            copy_vcc_bank_sgpr_bank
40legalized:       true
41regBankSelected: true
42
43body: |
44  bb.0:
45    liveins: $vgpr0_vgpr1, $vgpr2, $vgpr3, $scc
46
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---
79
80name:            copy_vcc_bank_sgpr_bank_2_uses
81legalized:       true
82regBankSelected: true
83
84body: |
85  bb.0:
86    liveins: $vgpr0_vgpr1, $vgpr2, $vgpr3, $scc
87
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)
125...
126
127---
128
129name:            copy_vcc_bank_scc_physreg
130legalized:       true
131regBankSelected: true
132
133body: |
134  bb.0:
135    liveins: $vgpr0_vgpr1, $vgpr2, $vgpr3, $scc
136
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)
162...
163---
164
165name:            copy_sgpr_no_type
166legalized:       true
167regBankSelected: true
168
169
170body: |
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
187
188...
189
190---
191
192name:            copy_vgpr_no_type
193legalized:       true
194regBankSelected: true
195
196
197body: |
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
214
215...
216
217---
218
219name:            copy_maybe_vcc
220legalized:       true
221regBankSelected: true
222
223
224body: |
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
241
242...
243
244# FIXME: This is malformed. There should never be a trunc to vcc.
245---
246
247name:            copy_s1_vcc_to_vcc
248legalized:       true
249regBankSelected: true
250
251
252body: |
253  bb.0:
254    liveins: $sgpr0_sgpr1
255
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
273
274...
275
276---
277
278name:            copy_s64_to_vcc
279legalized:       true
280regBankSelected: true
281
282
283body: |
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
302
303...
304
305---
306
307name:            copy_s32_to_vcc_lo
308legalized:       true
309regBankSelected: true
310
311
312body: |
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
331
332...
333
334---
335
336name:            copy_vcc_to_s64
337legalized:       true
338regBankSelected: true
339
340
341body: |
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
357
358...
359
360---
361
362name:            copy_vcc_lo_to_s32
363legalized:       true
364regBankSelected: true
365
366
367body: |
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
383
384...
385
386---
387
388name:            copy_s1_to_vcc
389legalized:       true
390regBankSelected: true
391tracksRegLiveness: true
392body:             |
393  bb.0:
394    liveins: $sgpr0_sgpr1
395
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
417
418...
419
420---
421
422name:            copy_s1_false_to_vcc
423legalized:       true
424regBankSelected: true
425tracksRegLiveness: true
426body:             |
427  bb.0:
428    liveins: $sgpr0
429
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
444
445...
446
447---
448
449name:            copy_s1_true_to_vcc
450legalized:       true
451regBankSelected: true
452tracksRegLiveness: true
453body:             |
454  bb.0:
455    liveins: $sgpr0
456
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
471
472...
473