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
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)
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
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
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
127 regBankSelected: true
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
159 regBankSelected: true
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
193 regBankSelected: true
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
235 regBankSelected: true
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
269 regBankSelected: true
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
302 regBankSelected: true
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
333 regBankSelected: true
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