1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -march=amdgcn -run-pass=amdgpu-prelegalizer-combiner -verify-machineinstrs %s -o - | FileCheck %s
3
4---
5name:            test_ashr_i44
6tracksRegLiveness: true
7body:             |
8  bb.0:
9    liveins: $vgpr0, $vgpr1
10
11    ; CHECK-LABEL: name: test_ashr_i44
12    ; CHECK: liveins: $vgpr0, $vgpr1
13    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
14    ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
15    ; CHECK: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)
16    ; CHECK: [[TRUNC:%[0-9]+]]:_(s44) = G_TRUNC [[MV]](s64)
17    ; CHECK: [[C:%[0-9]+]]:_(s44) = G_CONSTANT i44 43
18    ; CHECK: [[ASHR:%[0-9]+]]:_(s44) = G_ASHR [[TRUNC]], [[C]](s44)
19    ; CHECK: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[ASHR]](s44)
20    ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[ANYEXT]](s64)
21    ; CHECK: $vgpr0 = COPY [[UV]](s32)
22    ; CHECK: $vgpr1 = COPY [[UV1]](s32)
23    ; CHECK: SI_RETURN_TO_EPILOG implicit $vgpr0, implicit $vgpr1
24    %1:_(s32) = COPY $vgpr0
25    %2:_(s32) = COPY $vgpr1
26    %3:_(s64) = G_MERGE_VALUES %1(s32), %2(s32)
27    %4:_(s44) = G_TRUNC %3(s64)
28    %5:_(s44) = G_CONSTANT i44 22
29    %6:_(s44) = G_ASHR %4, %5(s44)
30    %7:_(s44) = G_ASHR %6, %5(s44)
31    %8:_(s64) = G_ANYEXT %7(s44)
32    %9:_(s32), %10:_(s32) = G_UNMERGE_VALUES %8(s64)
33    $vgpr0 = COPY %9(s32)
34    $vgpr1 = COPY %10(s32)
35    SI_RETURN_TO_EPILOG implicit $vgpr0, implicit $vgpr1
36
37...
38---
39name:            test_ashr_i55
40tracksRegLiveness: true
41body:             |
42  bb.0:
43    liveins: $sgpr0, $sgpr1
44
45    ; CHECK-LABEL: name: test_ashr_i55
46    ; CHECK: liveins: $sgpr0, $sgpr1
47    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $sgpr0
48    ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $sgpr1
49    ; CHECK: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)
50    ; CHECK: [[TRUNC:%[0-9]+]]:_(s55) = G_TRUNC [[MV]](s64)
51    ; CHECK: [[C:%[0-9]+]]:_(s55) = G_CONSTANT i55 53
52    ; CHECK: [[ASHR:%[0-9]+]]:_(s55) = G_ASHR [[TRUNC]], [[C]](s55)
53    ; CHECK: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[ASHR]](s55)
54    ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[ANYEXT]](s64)
55    ; CHECK: $sgpr0 = COPY [[UV]](s32)
56    ; CHECK: $sgpr1 = COPY [[UV1]](s32)
57    ; CHECK: SI_RETURN_TO_EPILOG implicit $sgpr0, implicit $sgpr1
58    %1:_(s32) = COPY $sgpr0
59    %2:_(s32) = COPY $sgpr1
60    %3:_(s64) = G_MERGE_VALUES %1(s32), %2(s32)
61    %4:_(s55) = G_TRUNC %3(s64)
62    %5:_(s55) = G_CONSTANT i55 50
63    %7:_(s55) = G_CONSTANT i55 3
64    %6:_(s55) = G_ASHR %4, %5(s55)
65    %8:_(s55) = G_ASHR %6, %7(s55)
66    %9:_(s64) = G_ANYEXT %8(s55)
67    %10:_(s32), %11:_(s32) = G_UNMERGE_VALUES %9(s64)
68    $sgpr0 = COPY %10(s32)
69    $sgpr1 = COPY %11(s32)
70    SI_RETURN_TO_EPILOG implicit $sgpr0, implicit $sgpr1
71
72...
73---
74name:            test_lshr_i44
75tracksRegLiveness: true
76body:             |
77  bb.0:
78    liveins: $sgpr0, $sgpr1
79
80    ; CHECK-LABEL: name: test_lshr_i44
81    ; CHECK: liveins: $sgpr0, $sgpr1
82    ; CHECK: [[C:%[0-9]+]]:_(s44) = G_CONSTANT i44 0
83    ; CHECK: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[C]](s44)
84    ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[ANYEXT]](s64)
85    ; CHECK: $sgpr0 = COPY [[UV]](s32)
86    ; CHECK: $sgpr1 = COPY [[UV1]](s32)
87    ; CHECK: SI_RETURN_TO_EPILOG implicit $sgpr0, implicit $sgpr1
88    %1:_(s32) = COPY $sgpr0
89    %2:_(s32) = COPY $sgpr1
90    %3:_(s64) = G_MERGE_VALUES %1(s32), %2(s32)
91    %4:_(s44) = G_TRUNC %3(s64)
92    %5:_(s44) = G_CONSTANT i44 22
93    %6:_(s44) = G_LSHR %4, %5(s44)
94    %7:_(s44) = G_LSHR %6, %5(s44)
95    %8:_(s64) = G_ANYEXT %7(s44)
96    %9:_(s32), %10:_(s32) = G_UNMERGE_VALUES %8(s64)
97    $sgpr0 = COPY %9(s32)
98    $sgpr1 = COPY %10(s32)
99    SI_RETURN_TO_EPILOG implicit $sgpr0, implicit $sgpr1
100
101...
102---
103name:            test_lshr_i55
104tracksRegLiveness: true
105body:             |
106  bb.0:
107    liveins: $vgpr0, $vgpr1
108
109    ; CHECK-LABEL: name: test_lshr_i55
110    ; CHECK: liveins: $vgpr0, $vgpr1
111    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
112    ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
113    ; CHECK: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)
114    ; CHECK: [[TRUNC:%[0-9]+]]:_(s55) = G_TRUNC [[MV]](s64)
115    ; CHECK: [[C:%[0-9]+]]:_(s55) = G_CONSTANT i55 53
116    ; CHECK: [[LSHR:%[0-9]+]]:_(s55) = G_LSHR [[TRUNC]], [[C]](s55)
117    ; CHECK: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[LSHR]](s55)
118    ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[ANYEXT]](s64)
119    ; CHECK: $vgpr0 = COPY [[UV]](s32)
120    ; CHECK: $vgpr1 = COPY [[UV1]](s32)
121    ; CHECK: SI_RETURN_TO_EPILOG implicit $vgpr0, implicit $vgpr1
122    %1:_(s32) = COPY $vgpr0
123    %2:_(s32) = COPY $vgpr1
124    %3:_(s64) = G_MERGE_VALUES %1(s32), %2(s32)
125    %4:_(s55) = G_TRUNC %3(s64)
126    %5:_(s55) = G_CONSTANT i55 50
127    %7:_(s55) = G_CONSTANT i55 3
128    %6:_(s55) = G_LSHR %4, %5(s55)
129    %8:_(s55) = G_LSHR %6, %7(s55)
130    %9:_(s64) = G_ANYEXT %8(s55)
131    %10:_(s32), %11:_(s32) = G_UNMERGE_VALUES %9(s64)
132    $vgpr0 = COPY %10(s32)
133    $vgpr1 = COPY %11(s32)
134    SI_RETURN_TO_EPILOG implicit $vgpr0, implicit $vgpr1
135
136...
137---
138name:            test_shl_i44
139tracksRegLiveness: true
140body:             |
141  bb.0:
142    liveins: $vgpr0, $vgpr1
143
144    ; CHECK-LABEL: name: test_shl_i44
145    ; CHECK: liveins: $vgpr0, $vgpr1
146    ; CHECK: [[C:%[0-9]+]]:_(s44) = G_CONSTANT i44 0
147    ; CHECK: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[C]](s44)
148    ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[ANYEXT]](s64)
149    ; CHECK: $vgpr0 = COPY [[UV]](s32)
150    ; CHECK: $vgpr1 = COPY [[UV1]](s32)
151    ; CHECK: SI_RETURN_TO_EPILOG implicit $vgpr0, implicit $vgpr1
152    %1:_(s32) = COPY $vgpr0
153    %2:_(s32) = COPY $vgpr1
154    %3:_(s64) = G_MERGE_VALUES %1(s32), %2(s32)
155    %4:_(s44) = G_TRUNC %3(s64)
156    %5:_(s44) = G_CONSTANT i44 22
157    %6:_(s44) = G_SHL %4, %5(s44)
158    %7:_(s44) = G_SHL %6, %5(s44)
159    %8:_(s64) = G_ANYEXT %7(s44)
160    %9:_(s32), %10:_(s32) = G_UNMERGE_VALUES %8(s64)
161    $vgpr0 = COPY %9(s32)
162    $vgpr1 = COPY %10(s32)
163    SI_RETURN_TO_EPILOG implicit $vgpr0, implicit $vgpr1
164
165...
166---
167name:            test_shl_i55
168tracksRegLiveness: true
169body:             |
170  bb.0:
171    liveins: $sgpr0, $sgpr1
172
173    ; CHECK-LABEL: name: test_shl_i55
174    ; CHECK: liveins: $sgpr0, $sgpr1
175    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $sgpr0
176    ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $sgpr1
177    ; CHECK: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)
178    ; CHECK: [[TRUNC:%[0-9]+]]:_(s55) = G_TRUNC [[MV]](s64)
179    ; CHECK: [[C:%[0-9]+]]:_(s55) = G_CONSTANT i55 53
180    ; CHECK: [[SHL:%[0-9]+]]:_(s55) = G_SHL [[TRUNC]], [[C]](s55)
181    ; CHECK: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[SHL]](s55)
182    ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[ANYEXT]](s64)
183    ; CHECK: $sgpr0 = COPY [[UV]](s32)
184    ; CHECK: $sgpr1 = COPY [[UV1]](s32)
185    ; CHECK: SI_RETURN_TO_EPILOG implicit $sgpr0, implicit $sgpr1
186    %1:_(s32) = COPY $sgpr0
187    %2:_(s32) = COPY $sgpr1
188    %3:_(s64) = G_MERGE_VALUES %1(s32), %2(s32)
189    %4:_(s55) = G_TRUNC %3(s64)
190    %5:_(s55) = G_CONSTANT i55 50
191    %7:_(s55) = G_CONSTANT i55 3
192    %6:_(s55) = G_SHL %4, %5(s55)
193    %8:_(s55) = G_SHL %6, %7(s55)
194    %9:_(s64) = G_ANYEXT %8(s55)
195    %10:_(s32), %11:_(s32) = G_UNMERGE_VALUES %9(s64)
196    $sgpr0 = COPY %10(s32)
197    $sgpr1 = COPY %11(s32)
198    SI_RETURN_TO_EPILOG implicit $sgpr0, implicit $sgpr1
199
200...
201---
202name:            sshlsat_i44
203tracksRegLiveness: true
204body:             |
205  bb.0:
206    liveins: $sgpr0, $sgpr1
207
208    ; CHECK-LABEL: name: sshlsat_i44
209    ; CHECK: liveins: $sgpr0, $sgpr1
210    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $sgpr0
211    ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $sgpr1
212    ; CHECK: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)
213    ; CHECK: [[TRUNC:%[0-9]+]]:_(s44) = G_TRUNC [[MV]](s64)
214    ; CHECK: [[C:%[0-9]+]]:_(s44) = G_CONSTANT i44 43
215    ; CHECK: [[SSHLSAT:%[0-9]+]]:_(s44) = G_SSHLSAT [[TRUNC]], [[C]](s44)
216    ; CHECK: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[SSHLSAT]](s44)
217    ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[ANYEXT]](s64)
218    ; CHECK: [[INT:%[0-9]+]]:_(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.readfirstlane), [[UV]](s32)
219    ; CHECK: $sgpr0 = COPY [[INT]](s32)
220    ; CHECK: [[INT1:%[0-9]+]]:_(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.readfirstlane), [[UV1]](s32)
221    ; CHECK: $sgpr1 = COPY [[INT1]](s32)
222    ; CHECK: SI_RETURN_TO_EPILOG implicit $sgpr0, implicit $sgpr1
223    %1:_(s32) = COPY $sgpr0
224    %2:_(s32) = COPY $sgpr1
225    %3:_(s64) = G_MERGE_VALUES %1(s32), %2(s32)
226    %0:_(s44) = G_TRUNC %3(s64)
227    %5:_(s44) = G_CONSTANT i44 22
228    %6:_(s44) = G_SSHLSAT %0, %5(s44)
229    %7:_(s44) = G_SSHLSAT %6, %5(s44)
230    %8:_(s64) = G_ANYEXT %7(s44)
231    %9:_(s32), %10:_(s32) = G_UNMERGE_VALUES %8(s64)
232    %11:_(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.readfirstlane), %9(s32)
233    $sgpr0 = COPY %11(s32)
234    %12:_(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.readfirstlane), %10(s32)
235    $sgpr1 = COPY %12(s32)
236    SI_RETURN_TO_EPILOG implicit $sgpr0, implicit $sgpr1
237
238...
239---
240name:            sshlsat_i55
241tracksRegLiveness: true
242body:             |
243  bb.0:
244    liveins: $vgpr0, $vgpr1
245
246    ; CHECK-LABEL: name: sshlsat_i55
247    ; CHECK: liveins: $vgpr0, $vgpr1
248    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
249    ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
250    ; CHECK: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)
251    ; CHECK: [[TRUNC:%[0-9]+]]:_(s55) = G_TRUNC [[MV]](s64)
252    ; CHECK: [[C:%[0-9]+]]:_(s55) = G_CONSTANT i55 53
253    ; CHECK: [[SSHLSAT:%[0-9]+]]:_(s55) = G_SSHLSAT [[TRUNC]], [[C]](s55)
254    ; CHECK: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[SSHLSAT]](s55)
255    ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[ANYEXT]](s64)
256    ; CHECK: [[INT:%[0-9]+]]:_(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.readfirstlane), [[UV]](s32)
257    ; CHECK: $vgpr0 = COPY [[INT]](s32)
258    ; CHECK: [[INT1:%[0-9]+]]:_(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.readfirstlane), [[UV1]](s32)
259    ; CHECK: $vgpr1 = COPY [[INT1]](s32)
260    ; CHECK: SI_RETURN_TO_EPILOG implicit $vgpr0, implicit $vgpr1
261    %1:_(s32) = COPY $vgpr0
262    %2:_(s32) = COPY $vgpr1
263    %3:_(s64) = G_MERGE_VALUES %1(s32), %2(s32)
264    %0:_(s55) = G_TRUNC %3(s64)
265    %5:_(s55) = G_CONSTANT i55 50
266    %7:_(s55) = G_CONSTANT i55 3
267    %6:_(s55) = G_SSHLSAT %0, %5(s55)
268    %8:_(s55) = G_SSHLSAT %6, %7(s55)
269    %9:_(s64) = G_ANYEXT %8(s55)
270    %10:_(s32), %11:_(s32) = G_UNMERGE_VALUES %9(s64)
271    %12:_(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.readfirstlane), %10(s32)
272    $vgpr0 = COPY %12(s32)
273    %13:_(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.readfirstlane), %11(s32)
274    $vgpr1 = COPY %13(s32)
275    SI_RETURN_TO_EPILOG implicit $vgpr0, implicit $vgpr1
276
277...
278---
279name:            ushlsat_i44
280tracksRegLiveness: true
281body:             |
282  bb.0:
283    liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31
284
285    ; CHECK-LABEL: name: ushlsat_i44
286    ; CHECK: liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31
287    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
288    ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
289    ; CHECK: [[COPY2:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
290    ; CHECK: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)
291    ; CHECK: [[TRUNC:%[0-9]+]]:_(s44) = G_TRUNC [[MV]](s64)
292    ; CHECK: [[C:%[0-9]+]]:_(s44) = G_CONSTANT i44 22
293    ; CHECK: [[USHLSAT:%[0-9]+]]:_(s44) = G_USHLSAT [[TRUNC]], [[C]](s44)
294    ; CHECK: [[USHLSAT1:%[0-9]+]]:_(s44) = G_USHLSAT [[USHLSAT]], [[C]](s44)
295    ; CHECK: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[USHLSAT1]](s44)
296    ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[ANYEXT]](s64)
297    ; CHECK: $vgpr0 = COPY [[UV]](s32)
298    ; CHECK: $vgpr1 = COPY [[UV1]](s32)
299    ; CHECK: [[COPY3:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY2]]
300    ; CHECK: S_SETPC_B64_return [[COPY3]], implicit $vgpr0, implicit $vgpr1
301    %2:_(s32) = COPY $vgpr0
302    %3:_(s32) = COPY $vgpr1
303    %1:sgpr_64 = COPY $sgpr30_sgpr31
304    %4:_(s64) = G_MERGE_VALUES %2(s32), %3(s32)
305    %0:_(s44) = G_TRUNC %4(s64)
306    %5:_(s44) = G_CONSTANT i44 22
307    %6:_(s44) = G_USHLSAT %0, %5(s44)
308    %7:_(s44) = G_USHLSAT %6, %5(s44)
309    %9:_(s64) = G_ANYEXT %7(s44)
310    %10:_(s32), %11:_(s32) = G_UNMERGE_VALUES %9(s64)
311    $vgpr0 = COPY %10(s32)
312    $vgpr1 = COPY %11(s32)
313    %8:ccr_sgpr_64 = COPY %1
314    S_SETPC_B64_return %8, implicit $vgpr0, implicit $vgpr1
315
316...
317---
318name:            ushlsat_i55
319tracksRegLiveness: true
320body:             |
321  bb.0:
322    liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31
323
324    ; CHECK-LABEL: name: ushlsat_i55
325    ; CHECK: liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31
326    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
327    ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
328    ; CHECK: [[COPY2:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
329    ; CHECK: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)
330    ; CHECK: [[TRUNC:%[0-9]+]]:_(s55) = G_TRUNC [[MV]](s64)
331    ; CHECK: [[C:%[0-9]+]]:_(s55) = G_CONSTANT i55 53
332    ; CHECK: [[USHLSAT:%[0-9]+]]:_(s55) = G_USHLSAT [[TRUNC]], [[C]](s55)
333    ; CHECK: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[USHLSAT]](s55)
334    ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[ANYEXT]](s64)
335    ; CHECK: $vgpr0 = COPY [[UV]](s32)
336    ; CHECK: $vgpr1 = COPY [[UV1]](s32)
337    ; CHECK: [[COPY3:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY2]]
338    ; CHECK: S_SETPC_B64_return [[COPY3]], implicit $vgpr0, implicit $vgpr1
339    %2:_(s32) = COPY $vgpr0
340    %3:_(s32) = COPY $vgpr1
341    %1:sgpr_64 = COPY $sgpr30_sgpr31
342    %4:_(s64) = G_MERGE_VALUES %2(s32), %3(s32)
343    %0:_(s55) = G_TRUNC %4(s64)
344    %5:_(s55) = G_CONSTANT i55 50
345    %7:_(s55) = G_CONSTANT i55 3
346    %6:_(s55) = G_USHLSAT %0, %5(s55)
347    %8:_(s55) = G_USHLSAT %6, %7(s55)
348    %10:_(s64) = G_ANYEXT %8(s55)
349    %11:_(s32), %12:_(s32) = G_UNMERGE_VALUES %10(s64)
350    $vgpr0 = COPY %11(s32)
351    $vgpr1 = COPY %12(s32)
352    %9:ccr_sgpr_64 = COPY %1
353    S_SETPC_B64_return %9, implicit $vgpr0, implicit $vgpr1
354
355...
356