1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2
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
5
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
8
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
11
12# ERR-NOT: remark
13# ERR: remark: <unknown>:0:0: cannot select: %4:sgpr(s16) = G_LSHR %2:sgpr, %3:sgpr(s16) (in function: lshr_s16_s16_ss)
14# ERR-NEXT: remark: <unknown>:0:0: cannot select: %3:vgpr(s16) = G_LSHR %2:vgpr, %1:vgpr(s32) (in function: lshr_s16_s32_vv)
15# ERR-NEXT: remark: <unknown>:0:0: cannot select: %5:vgpr(s64) = G_ZEXT %4:vgpr(s16) (in function: lshr_s16_vv_zext_to_s64)
16# ERR-NEXT: remark: <unknown>:0:0: cannot select: %3:sgpr(s16) = G_LSHR %2:sgpr, %1:sgpr(s32) (in function: lshr_s16_s32_ss)
17# ERR-NEXT: remark: <unknown>:0:0: cannot select: %3:vgpr(s16) = G_LSHR %2:sgpr, %1:vgpr(s32) (in function: lshr_s16_s32_sv)
18# ERR-NEXT: remark: <unknown>:0:0: cannot select: %3:vgpr(s16) = G_LSHR %2:vgpr, %1:sgpr(s32) (in function: lshr_s16_s32_vs)
19# ERR-NOT: remark
20
21---
22name: lshr_s16_s16_ss
23legalized: true
24regBankSelected: true
25
26body: |
27  bb.0:
28    liveins: $sgpr0, $sgpr1
29
30    ; GFX8-LABEL: name: lshr_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: [[LSHR:%[0-9]+]]:sgpr(s16) = G_LSHR [[TRUNC]], [[TRUNC1]](s16)
36    ; GFX8: S_ENDPGM 0, implicit [[LSHR]](s16)
37    ; GFX9-LABEL: name: lshr_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: [[LSHR:%[0-9]+]]:sgpr(s16) = G_LSHR [[TRUNC]], [[TRUNC1]](s16)
43    ; GFX9: S_ENDPGM 0, implicit [[LSHR]](s16)
44    ; GFX10-LABEL: name: lshr_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: [[LSHR:%[0-9]+]]:sgpr(s16) = G_LSHR [[TRUNC]], [[TRUNC1]](s16)
50    ; GFX10: S_ENDPGM 0, implicit [[LSHR]](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_LSHR %2, %3
56    S_ENDPGM 0, implicit %4
57...
58
59---
60name: lshr_s16_s16_vs
61legalized: true
62regBankSelected: true
63
64body: |
65  bb.0:
66    liveins: $sgpr0, $vgpr0
67    ; GFX8-LABEL: name: lshr_s16_s16_vs
68    ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
69    ; GFX8: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr0
70    ; GFX8: [[V_LSHRREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec
71    ; GFX8: S_ENDPGM 0, implicit [[V_LSHRREV_B16_e64_]]
72    ; GFX9-LABEL: name: lshr_s16_s16_vs
73    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
74    ; GFX9: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr0
75    ; GFX9: [[V_LSHRREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec
76    ; GFX9: S_ENDPGM 0, implicit [[V_LSHRREV_B16_e64_]]
77    ; GFX10-LABEL: name: lshr_s16_s16_vs
78    ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
79    ; GFX10: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr0
80    ; GFX10: [[V_LSHRREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec
81    ; GFX10: S_ENDPGM 0, implicit [[V_LSHRREV_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_LSHR %2, %3
87    S_ENDPGM 0, implicit %4
88...
89
90---
91name: lshr_s16_s32_vv
92legalized: true
93regBankSelected: true
94
95body: |
96  bb.0:
97    liveins: $vgpr0, $vgpr1
98
99    ; GFX8-LABEL: name: lshr_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: [[LSHR:%[0-9]+]]:vgpr(s16) = G_LSHR [[TRUNC]], [[COPY1]](s32)
104    ; GFX8: S_ENDPGM 0, implicit [[LSHR]](s16)
105    ; GFX9-LABEL: name: lshr_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: [[LSHR:%[0-9]+]]:vgpr(s16) = G_LSHR [[TRUNC]], [[COPY1]](s32)
110    ; GFX9: S_ENDPGM 0, implicit [[LSHR]](s16)
111    ; GFX10-LABEL: name: lshr_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: [[LSHR:%[0-9]+]]:vgpr(s16) = G_LSHR [[TRUNC]], [[COPY1]](s32)
116    ; GFX10: S_ENDPGM 0, implicit [[LSHR]](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_LSHR %2, %1
121    S_ENDPGM 0, implicit %3
122...
123
124---
125name: lshr_s16_s16_vv
126legalized: true
127regBankSelected: true
128
129body: |
130  bb.0:
131    liveins: $vgpr0, $vgpr1
132
133    ; GFX8-LABEL: name: lshr_s16_s16_vv
134    ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
135    ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
136    ; GFX8: [[V_LSHRREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec
137    ; GFX8: S_ENDPGM 0, implicit [[V_LSHRREV_B16_e64_]]
138    ; GFX9-LABEL: name: lshr_s16_s16_vv
139    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
140    ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
141    ; GFX9: [[V_LSHRREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec
142    ; GFX9: S_ENDPGM 0, implicit [[V_LSHRREV_B16_e64_]]
143    ; GFX10-LABEL: name: lshr_s16_s16_vv
144    ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
145    ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
146    ; GFX10: [[V_LSHRREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec
147    ; GFX10: S_ENDPGM 0, implicit [[V_LSHRREV_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_LSHR %2, %3
153    S_ENDPGM 0, implicit %4
154...
155
156---
157name: lshr_s16_s16_vv_zext_to_s32
158legalized: true
159regBankSelected: true
160
161body: |
162  bb.0:
163    liveins: $vgpr0, $vgpr1
164
165    ; GFX8-LABEL: name: lshr_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_LSHRREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec
169    ; GFX8: S_ENDPGM 0, implicit [[V_LSHRREV_B16_e64_]]
170    ; GFX9-LABEL: name: lshr_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_LSHRREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec
174    ; GFX9: S_ENDPGM 0, implicit [[V_LSHRREV_B16_e64_]]
175    ; GFX10-LABEL: name: lshr_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_LSHRREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec
179    ; GFX10: [[V_BFE_U32_e64_:%[0-9]+]]:vgpr_32 = V_BFE_U32_e64 [[V_LSHRREV_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_LSHR %2, %3
186    %5:vgpr(s32) = G_ZEXT %4
187    S_ENDPGM 0, implicit %5
188...
189
190---
191name: lshr_s16_vv_zext_to_s64
192legalized: true
193regBankSelected: true
194
195body: |
196  bb.0:
197    liveins: $vgpr0, $vgpr1
198
199    ; GFX8-LABEL: name: lshr_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: [[LSHR:%[0-9]+]]:vgpr(s16) = G_LSHR [[TRUNC]], [[TRUNC1]](s16)
205    ; GFX8: [[ZEXT:%[0-9]+]]:vgpr(s64) = G_ZEXT [[LSHR]](s16)
206    ; GFX8: S_ENDPGM 0, implicit [[ZEXT]](s64)
207    ; GFX9-LABEL: name: lshr_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: [[LSHR:%[0-9]+]]:vgpr(s16) = G_LSHR [[TRUNC]], [[TRUNC1]](s16)
213    ; GFX9: [[ZEXT:%[0-9]+]]:vgpr(s64) = G_ZEXT [[LSHR]](s16)
214    ; GFX9: S_ENDPGM 0, implicit [[ZEXT]](s64)
215    ; GFX10-LABEL: name: lshr_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: [[LSHR:%[0-9]+]]:vgpr(s16) = G_LSHR [[TRUNC]], [[TRUNC1]](s16)
221    ; GFX10: [[ZEXT:%[0-9]+]]:vgpr(s64) = G_ZEXT [[LSHR]](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_LSHR %2, %3
228    %5:vgpr(s64) = G_ZEXT %4
229    S_ENDPGM 0, implicit %5
230...
231
232---
233name: lshr_s16_s32_ss
234legalized: true
235regBankSelected: true
236
237body: |
238  bb.0:
239    liveins: $sgpr0, $sgpr1
240
241    ; GFX8-LABEL: name: lshr_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: [[LSHR:%[0-9]+]]:sgpr(s16) = G_LSHR [[TRUNC]], [[COPY1]](s32)
246    ; GFX8: S_ENDPGM 0, implicit [[LSHR]](s16)
247    ; GFX9-LABEL: name: lshr_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: [[LSHR:%[0-9]+]]:sgpr(s16) = G_LSHR [[TRUNC]], [[COPY1]](s32)
252    ; GFX9: S_ENDPGM 0, implicit [[LSHR]](s16)
253    ; GFX10-LABEL: name: lshr_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: [[LSHR:%[0-9]+]]:sgpr(s16) = G_LSHR [[TRUNC]], [[COPY1]](s32)
258    ; GFX10: S_ENDPGM 0, implicit [[LSHR]](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_LSHR %2, %1
263    S_ENDPGM 0, implicit %3
264...
265
266---
267name: lshr_s16_s32_sv
268legalized: true
269regBankSelected: true
270
271body: |
272  bb.0:
273    liveins: $sgpr0, $vgpr0
274    ; GFX8-LABEL: name: lshr_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: [[LSHR:%[0-9]+]]:vgpr(s16) = G_LSHR [[TRUNC]], [[COPY1]](s32)
279    ; GFX8: S_ENDPGM 0, implicit [[LSHR]](s16)
280    ; GFX9-LABEL: name: lshr_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: [[LSHR:%[0-9]+]]:vgpr(s16) = G_LSHR [[TRUNC]], [[COPY1]](s32)
285    ; GFX9: S_ENDPGM 0, implicit [[LSHR]](s16)
286    ; GFX10-LABEL: name: lshr_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: [[LSHR:%[0-9]+]]:vgpr(s16) = G_LSHR [[TRUNC]], [[COPY1]](s32)
291    ; GFX10: S_ENDPGM 0, implicit [[LSHR]](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_LSHR %2, %1
296    S_ENDPGM 0, implicit %3
297...
298
299---
300name: lshr_s16_s16_sv
301legalized: true
302regBankSelected: true
303
304body: |
305  bb.0:
306    liveins: $sgpr0, $vgpr0
307    ; GFX8-LABEL: name: lshr_s16_s16_sv
308    ; GFX8: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
309    ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0
310    ; GFX8: [[V_LSHRREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec
311    ; GFX8: S_ENDPGM 0, implicit [[V_LSHRREV_B16_e64_]]
312    ; GFX9-LABEL: name: lshr_s16_s16_sv
313    ; GFX9: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
314    ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0
315    ; GFX9: [[V_LSHRREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec
316    ; GFX9: S_ENDPGM 0, implicit [[V_LSHRREV_B16_e64_]]
317    ; GFX10-LABEL: name: lshr_s16_s16_sv
318    ; GFX10: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
319    ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0
320    ; GFX10: [[V_LSHRREV_B16_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B16_e64 [[COPY1]], [[COPY]], implicit $exec
321    ; GFX10: S_ENDPGM 0, implicit [[V_LSHRREV_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_LSHR %2, %3
327    S_ENDPGM 0, implicit %4
328...
329
330---
331name: lshr_s16_s32_vs
332legalized: true
333regBankSelected: true
334
335body: |
336  bb.0:
337    liveins: $sgpr0, $vgpr0
338    ; GFX8-LABEL: name: lshr_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: [[LSHR:%[0-9]+]]:vgpr(s16) = G_LSHR [[TRUNC]], [[COPY1]](s32)
343    ; GFX8: S_ENDPGM 0, implicit [[LSHR]](s16)
344    ; GFX9-LABEL: name: lshr_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: [[LSHR:%[0-9]+]]:vgpr(s16) = G_LSHR [[TRUNC]], [[COPY1]](s32)
349    ; GFX9: S_ENDPGM 0, implicit [[LSHR]](s16)
350    ; GFX10-LABEL: name: lshr_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: [[LSHR:%[0-9]+]]:vgpr(s16) = G_LSHR [[TRUNC]], [[COPY1]](s32)
355    ; GFX10: S_ENDPGM 0, implicit [[LSHR]](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_LSHR %2, %1
360    S_ENDPGM 0, implicit %3
361...
362