[AMDGPU] Make v8i16/v8f16 legal
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / GlobalISel / inst-select-shl.s16.mir
blob7e981f0c3ad5863cf4dba2a97bd4d2c9667cc42d
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
3 # RUN: llc -march=amdgcn -mcpu=fiji -run-pass=instruction-select -global-isel-abort=2 -disable-gisel-legality-check -pass-remarks-missed='gisel*' -verify-machineinstrs %s -o - 2>%t | FileCheck -check-prefix=GFX8 %s
4 # RUN: FileCheck --check-prefix=ERR %s < %t
6 # RUN: llc -march=amdgcn -mcpu=gfx900 -run-pass=instruction-select -global-isel-abort=2 -disable-gisel-legality-check -pass-remarks-missed='gisel*' -verify-machineinstrs %s -o - 2>%t | FileCheck -check-prefix=GFX9 %s
7 # RUN: FileCheck --check-prefix=ERR %s < %t
9 # RUN: llc -march=amdgcn -mcpu=gfx1010 -run-pass=instruction-select -global-isel-abort=2 -disable-gisel-legality-check -pass-remarks-missed='gisel*' -verify-machineinstrs %s -o - 2>%t | FileCheck -check-prefix=GFX10 %s
10 # RUN: FileCheck --check-prefix=ERR %s < %t
12 # ERR-NOT: remark
13 # ERR: remark: <unknown>:0:0: cannot select: %4:sgpr(s16) = G_SHL %2:sgpr, %3:sgpr(s16) (in function: shl_s16_s16_ss)
14 # ERR-NEXT: remark: <unknown>:0:0: cannot select: %3:vgpr(s16) = G_SHL %2:vgpr, %1:vgpr(s32) (in function: shl_s16_s32_vv)
15 # ERR-NEXT: remark: <unknown>:0:0: cannot select: %5:vgpr(s64) = G_ZEXT %4:vgpr(s16) (in function: shl_s16_vv_zext_to_s64)
16 # ERR-NEXT: remark: <unknown>:0:0: cannot select: %3:sgpr(s16) = G_SHL %2:sgpr, %1:sgpr(s32) (in function: shl_s16_s32_ss)
17 # ERR-NEXT: remark: <unknown>:0:0: cannot select: %3:vgpr(s16) = G_SHL %2:sgpr, %1:vgpr(s32) (in function: shl_s16_s32_sv)
18 # ERR-NEXT: remark: <unknown>:0:0: cannot select: %3:vgpr(s16) = G_SHL %2:vgpr, %1:sgpr(s32) (in function: shl_s16_s32_vs)
19 # ERR-NOT: remark
21 ---
22 name: shl_s16_s16_ss
23 legalized: true
24 regBankSelected: true
26 body: |
27   bb.0:
28     liveins: $sgpr0, $sgpr1
30     ; GFX8-LABEL: name: shl_s16_s16_ss
31     ; GFX8: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
32     ; GFX8: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
33     ; GFX8: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)
34     ; GFX8: [[TRUNC1:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY1]](s32)
35     ; GFX8: [[SHL:%[0-9]+]]:sgpr(s16) = G_SHL [[TRUNC]], [[TRUNC1]](s16)
36     ; GFX8: S_ENDPGM 0, implicit [[SHL]](s16)
37     ; GFX9-LABEL: name: shl_s16_s16_ss
38     ; GFX9: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
39     ; GFX9: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
40     ; GFX9: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)
41     ; GFX9: [[TRUNC1:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY1]](s32)
42     ; GFX9: [[SHL:%[0-9]+]]:sgpr(s16) = G_SHL [[TRUNC]], [[TRUNC1]](s16)
43     ; GFX9: S_ENDPGM 0, implicit [[SHL]](s16)
44     ; GFX10-LABEL: name: shl_s16_s16_ss
45     ; GFX10: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
46     ; GFX10: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
47     ; GFX10: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)
48     ; GFX10: [[TRUNC1:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY1]](s32)
49     ; GFX10: [[SHL:%[0-9]+]]:sgpr(s16) = G_SHL [[TRUNC]], [[TRUNC1]](s16)
50     ; GFX10: S_ENDPGM 0, implicit [[SHL]](s16)
51     %0:sgpr(s32) = COPY $sgpr0
52     %1:sgpr(s32) = COPY $sgpr1
53     %2:sgpr(s16) = G_TRUNC %0
54     %3:sgpr(s16) = G_TRUNC %1
55     %4:sgpr(s16) = G_SHL %2, %3
56     S_ENDPGM 0, implicit %4
57 ...
59 ---
60 name: shl_s16_s16_vs
61 legalized: true
62 regBankSelected: true
64 body: |
65   bb.0:
66     liveins: $sgpr0, $vgpr0
67     ; GFX8-LABEL: name: shl_s16_s16_vs
68     ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
69     ; GFX8: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr0
70     ; GFX8: [[V_LSHLREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHLREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec
71     ; GFX8: S_ENDPGM 0, implicit [[V_LSHLREV_B16_e64_]]
72     ; GFX9-LABEL: name: shl_s16_s16_vs
73     ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
74     ; GFX9: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr0
75     ; GFX9: [[V_LSHLREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHLREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec
76     ; GFX9: S_ENDPGM 0, implicit [[V_LSHLREV_B16_e64_]]
77     ; GFX10-LABEL: name: shl_s16_s16_vs
78     ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
79     ; GFX10: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr0
80     ; GFX10: [[V_LSHLREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHLREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec
81     ; GFX10: S_ENDPGM 0, implicit [[V_LSHLREV_B16_e64_]]
82     %0:vgpr(s32) = COPY $vgpr0
83     %1:sgpr(s32) = COPY $sgpr0
84     %2:vgpr(s16) = G_TRUNC %0
85     %3:sgpr(s16) = G_TRUNC %1
86     %4:vgpr(s16) = G_SHL %2, %3
87     S_ENDPGM 0, implicit %4
88 ...
90 ---
91 name: shl_s16_s32_vv
92 legalized: true
93 regBankSelected: true
95 body: |
96   bb.0:
97     liveins: $vgpr0, $vgpr1
99     ; GFX8-LABEL: name: shl_s16_s32_vv
100     ; GFX8: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
101     ; GFX8: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
102     ; GFX8: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32)
103     ; GFX8: [[SHL:%[0-9]+]]:vgpr(s16) = G_SHL [[TRUNC]], [[COPY1]](s32)
104     ; GFX8: S_ENDPGM 0, implicit [[SHL]](s16)
105     ; GFX9-LABEL: name: shl_s16_s32_vv
106     ; GFX9: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
107     ; GFX9: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
108     ; GFX9: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32)
109     ; GFX9: [[SHL:%[0-9]+]]:vgpr(s16) = G_SHL [[TRUNC]], [[COPY1]](s32)
110     ; GFX9: S_ENDPGM 0, implicit [[SHL]](s16)
111     ; GFX10-LABEL: name: shl_s16_s32_vv
112     ; GFX10: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
113     ; GFX10: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
114     ; GFX10: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32)
115     ; GFX10: [[SHL:%[0-9]+]]:vgpr(s16) = G_SHL [[TRUNC]], [[COPY1]](s32)
116     ; GFX10: S_ENDPGM 0, implicit [[SHL]](s16)
117     %0:vgpr(s32) = COPY $vgpr0
118     %1:vgpr(s32) = COPY $vgpr1
119     %2:vgpr(s16) = G_TRUNC %0
120     %3:vgpr(s16) = G_SHL %2, %1
121     S_ENDPGM 0, implicit %3
125 name: shl_s16_s16_vv
126 legalized: true
127 regBankSelected: true
129 body: |
130   bb.0:
131     liveins: $vgpr0, $vgpr1
133     ; GFX8-LABEL: name: shl_s16_s16_vv
134     ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
135     ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
136     ; GFX8: [[V_LSHLREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHLREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec
137     ; GFX8: S_ENDPGM 0, implicit [[V_LSHLREV_B16_e64_]]
138     ; GFX9-LABEL: name: shl_s16_s16_vv
139     ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
140     ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
141     ; GFX9: [[V_LSHLREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHLREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec
142     ; GFX9: S_ENDPGM 0, implicit [[V_LSHLREV_B16_e64_]]
143     ; GFX10-LABEL: name: shl_s16_s16_vv
144     ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
145     ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
146     ; GFX10: [[V_LSHLREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHLREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec
147     ; GFX10: S_ENDPGM 0, implicit [[V_LSHLREV_B16_e64_]]
148     %0:vgpr(s32) = COPY $vgpr0
149     %1:vgpr(s32) = COPY $vgpr1
150     %2:vgpr(s16) = G_TRUNC %0
151     %3:vgpr(s16) = G_TRUNC %1
152     %4:vgpr(s16) = G_SHL %2, %3
153     S_ENDPGM 0, implicit %4
157 name: shl_s16_s16_vv_zext_to_s32
158 legalized: true
159 regBankSelected: true
161 body: |
162   bb.0:
163     liveins: $vgpr0, $vgpr1
165     ; GFX8-LABEL: name: shl_s16_s16_vv_zext_to_s32
166     ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
167     ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
168     ; GFX8: [[V_LSHLREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHLREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec
169     ; GFX8: S_ENDPGM 0, implicit [[V_LSHLREV_B16_e64_]]
170     ; GFX9-LABEL: name: shl_s16_s16_vv_zext_to_s32
171     ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
172     ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
173     ; GFX9: [[V_LSHLREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHLREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec
174     ; GFX9: S_ENDPGM 0, implicit [[V_LSHLREV_B16_e64_]]
175     ; GFX10-LABEL: name: shl_s16_s16_vv_zext_to_s32
176     ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
177     ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
178     ; GFX10: [[V_LSHLREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHLREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec
179     ; GFX10: [[V_BFE_U32_e64_:%[0-9]+]]:vgpr_32 = V_BFE_U32_e64 [[V_LSHLREV_B16_e64_]], 0, 16, implicit $exec
180     ; GFX10: S_ENDPGM 0, implicit [[V_BFE_U32_e64_]]
181     %0:vgpr(s32) = COPY $vgpr0
182     %1:vgpr(s32) = COPY $vgpr1
183     %2:vgpr(s16) = G_TRUNC %0
184     %3:vgpr(s16) = G_TRUNC %1
185     %4:vgpr(s16) = G_SHL %2, %3
186     %5:vgpr(s32) = G_ZEXT %4
187     S_ENDPGM 0, implicit %5
191 name: shl_s16_vv_zext_to_s64
192 legalized: true
193 regBankSelected: true
195 body: |
196   bb.0:
197     liveins: $vgpr0, $vgpr1
199     ; GFX8-LABEL: name: shl_s16_vv_zext_to_s64
200     ; GFX8: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
201     ; GFX8: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
202     ; GFX8: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32)
203     ; GFX8: [[TRUNC1:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY1]](s32)
204     ; GFX8: [[SHL:%[0-9]+]]:vgpr(s16) = G_SHL [[TRUNC]], [[TRUNC1]](s16)
205     ; GFX8: [[ZEXT:%[0-9]+]]:vgpr(s64) = G_ZEXT [[SHL]](s16)
206     ; GFX8: S_ENDPGM 0, implicit [[ZEXT]](s64)
207     ; GFX9-LABEL: name: shl_s16_vv_zext_to_s64
208     ; GFX9: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
209     ; GFX9: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
210     ; GFX9: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32)
211     ; GFX9: [[TRUNC1:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY1]](s32)
212     ; GFX9: [[SHL:%[0-9]+]]:vgpr(s16) = G_SHL [[TRUNC]], [[TRUNC1]](s16)
213     ; GFX9: [[ZEXT:%[0-9]+]]:vgpr(s64) = G_ZEXT [[SHL]](s16)
214     ; GFX9: S_ENDPGM 0, implicit [[ZEXT]](s64)
215     ; GFX10-LABEL: name: shl_s16_vv_zext_to_s64
216     ; GFX10: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
217     ; GFX10: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
218     ; GFX10: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32)
219     ; GFX10: [[TRUNC1:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY1]](s32)
220     ; GFX10: [[SHL:%[0-9]+]]:vgpr(s16) = G_SHL [[TRUNC]], [[TRUNC1]](s16)
221     ; GFX10: [[ZEXT:%[0-9]+]]:vgpr(s64) = G_ZEXT [[SHL]](s16)
222     ; GFX10: S_ENDPGM 0, implicit [[ZEXT]](s64)
223     %0:vgpr(s32) = COPY $vgpr0
224     %1:vgpr(s32) = COPY $vgpr1
225     %2:vgpr(s16) = G_TRUNC %0
226     %3:vgpr(s16) = G_TRUNC %1
227     %4:vgpr(s16) = G_SHL %2, %3
228     %5:vgpr(s64) = G_ZEXT %4
229     S_ENDPGM 0, implicit %5
233 name: shl_s16_s32_ss
234 legalized: true
235 regBankSelected: true
237 body: |
238   bb.0:
239     liveins: $sgpr0, $sgpr1
241     ; GFX8-LABEL: name: shl_s16_s32_ss
242     ; GFX8: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
243     ; GFX8: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
244     ; GFX8: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)
245     ; GFX8: [[SHL:%[0-9]+]]:sgpr(s16) = G_SHL [[TRUNC]], [[COPY1]](s32)
246     ; GFX8: S_ENDPGM 0, implicit [[SHL]](s16)
247     ; GFX9-LABEL: name: shl_s16_s32_ss
248     ; GFX9: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
249     ; GFX9: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
250     ; GFX9: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)
251     ; GFX9: [[SHL:%[0-9]+]]:sgpr(s16) = G_SHL [[TRUNC]], [[COPY1]](s32)
252     ; GFX9: S_ENDPGM 0, implicit [[SHL]](s16)
253     ; GFX10-LABEL: name: shl_s16_s32_ss
254     ; GFX10: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
255     ; GFX10: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
256     ; GFX10: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)
257     ; GFX10: [[SHL:%[0-9]+]]:sgpr(s16) = G_SHL [[TRUNC]], [[COPY1]](s32)
258     ; GFX10: S_ENDPGM 0, implicit [[SHL]](s16)
259     %0:sgpr(s32) = COPY $sgpr0
260     %1:sgpr(s32) = COPY $sgpr1
261     %2:sgpr(s16) = G_TRUNC %0
262     %3:sgpr(s16) = G_SHL %2, %1
263     S_ENDPGM 0, implicit %3
267 name: shl_s16_s32_sv
268 legalized: true
269 regBankSelected: true
271 body: |
272   bb.0:
273     liveins: $sgpr0, $vgpr0
274     ; GFX8-LABEL: name: shl_s16_s32_sv
275     ; GFX8: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
276     ; GFX8: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
277     ; GFX8: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)
278     ; GFX8: [[SHL:%[0-9]+]]:vgpr(s16) = G_SHL [[TRUNC]], [[COPY1]](s32)
279     ; GFX8: S_ENDPGM 0, implicit [[SHL]](s16)
280     ; GFX9-LABEL: name: shl_s16_s32_sv
281     ; GFX9: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
282     ; GFX9: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
283     ; GFX9: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)
284     ; GFX9: [[SHL:%[0-9]+]]:vgpr(s16) = G_SHL [[TRUNC]], [[COPY1]](s32)
285     ; GFX9: S_ENDPGM 0, implicit [[SHL]](s16)
286     ; GFX10-LABEL: name: shl_s16_s32_sv
287     ; GFX10: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
288     ; GFX10: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
289     ; GFX10: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)
290     ; GFX10: [[SHL:%[0-9]+]]:vgpr(s16) = G_SHL [[TRUNC]], [[COPY1]](s32)
291     ; GFX10: S_ENDPGM 0, implicit [[SHL]](s16)
292     %0:sgpr(s32) = COPY $sgpr0
293     %1:vgpr(s32) = COPY $vgpr0
294     %2:sgpr(s16) = G_TRUNC %0
295     %3:vgpr(s16) = G_SHL %2, %1
296     S_ENDPGM 0, implicit %3
300 name: shl_s16_s16_sv
301 legalized: true
302 regBankSelected: true
304 body: |
305   bb.0:
306     liveins: $sgpr0, $vgpr0
307     ; GFX8-LABEL: name: shl_s16_s16_sv
308     ; GFX8: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
309     ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0
310     ; GFX8: [[V_LSHLREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHLREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec
311     ; GFX8: S_ENDPGM 0, implicit [[V_LSHLREV_B16_e64_]]
312     ; GFX9-LABEL: name: shl_s16_s16_sv
313     ; GFX9: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
314     ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0
315     ; GFX9: [[V_LSHLREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHLREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec
316     ; GFX9: S_ENDPGM 0, implicit [[V_LSHLREV_B16_e64_]]
317     ; GFX10-LABEL: name: shl_s16_s16_sv
318     ; GFX10: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
319     ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0
320     ; GFX10: [[V_LSHLREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHLREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec
321     ; GFX10: S_ENDPGM 0, implicit [[V_LSHLREV_B16_e64_]]
322     %0:sgpr(s32) = COPY $sgpr0
323     %1:vgpr(s32) = COPY $vgpr0
324     %2:sgpr(s16) = G_TRUNC %0
325     %3:vgpr(s16) = G_TRUNC %1
326     %4:vgpr(s16) = G_SHL %2, %3
327     S_ENDPGM 0, implicit %4
331 name: shl_s16_s32_vs
332 legalized: true
333 regBankSelected: true
335 body: |
336   bb.0:
337     liveins: $sgpr0, $vgpr0
338     ; GFX8-LABEL: name: shl_s16_s32_vs
339     ; GFX8: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
340     ; GFX8: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
341     ; GFX8: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32)
342     ; GFX8: [[SHL:%[0-9]+]]:vgpr(s16) = G_SHL [[TRUNC]], [[COPY1]](s32)
343     ; GFX8: S_ENDPGM 0, implicit [[SHL]](s16)
344     ; GFX9-LABEL: name: shl_s16_s32_vs
345     ; GFX9: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
346     ; GFX9: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
347     ; GFX9: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32)
348     ; GFX9: [[SHL:%[0-9]+]]:vgpr(s16) = G_SHL [[TRUNC]], [[COPY1]](s32)
349     ; GFX9: S_ENDPGM 0, implicit [[SHL]](s16)
350     ; GFX10-LABEL: name: shl_s16_s32_vs
351     ; GFX10: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
352     ; GFX10: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
353     ; GFX10: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32)
354     ; GFX10: [[SHL:%[0-9]+]]:vgpr(s16) = G_SHL [[TRUNC]], [[COPY1]](s32)
355     ; GFX10: S_ENDPGM 0, implicit [[SHL]](s16)
356     %0:vgpr(s32) = COPY $vgpr0
357     %1:sgpr(s32) = COPY $sgpr0
358     %2:vgpr(s16) = G_TRUNC %0
359     %3:vgpr(s16) = G_SHL %2, %1
360     S_ENDPGM 0, implicit %3