Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / GlobalISel / legalize-zext.mir
blob8db6a7c78aaa452c962f8c7113b3242900a1f6ad
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=fiji -run-pass=legalizer -global-isel-abort=0 -o - %s | FileCheck %s
4 ---
5 name: test_zext_s32_to_s64
6 body: |
7   bb.0:
8     liveins: $vgpr0
10     ; CHECK-LABEL: name: test_zext_s32_to_s64
11     ; CHECK: liveins: $vgpr0
12     ; CHECK-NEXT: {{  $}}
13     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
14     ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[COPY]](s32)
15     ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[ZEXT]](s64)
16     %0:_(s32) = COPY $vgpr0
17     %1:_(s64) = G_ZEXT %0
18     $vgpr0_vgpr1 = COPY %1
19 ...
21 ---
22 name: test_zext_s16_to_s64
23 body: |
24   bb.0:
25     liveins: $vgpr0
27     ; CHECK-LABEL: name: test_zext_s16_to_s64
28     ; CHECK: liveins: $vgpr0
29     ; CHECK-NEXT: {{  $}}
30     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
31     ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[COPY]](s32)
32     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 65535
33     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[ANYEXT]], [[C]]
34     ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[AND]](s64)
35     %0:_(s32) = COPY $vgpr0
36     %1:_(s16) = G_TRUNC %0
37     %2:_(s64) = G_ZEXT %1
38     $vgpr0_vgpr1 = COPY %2
39 ...
41 ---
42 name: test_zext_s16_to_s32
43 body: |
44   bb.0:
45     liveins: $vgpr0
47     ; CHECK-LABEL: name: test_zext_s16_to_s32
48     ; CHECK: liveins: $vgpr0
49     ; CHECK-NEXT: {{  $}}
50     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
51     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
52     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
53     ; CHECK-NEXT: $vgpr0 = COPY [[AND]](s32)
54     %0:_(s32) = COPY $vgpr0
55     %1:_(s16) = G_TRUNC %0
56     %2:_(s32) = G_ZEXT %1
57     $vgpr0 = COPY %2
58 ...
60 ---
61 name: test_zext_s24_to_s32
62 body: |
63   bb.0:
64     liveins: $vgpr0
66     ; CHECK-LABEL: name: test_zext_s24_to_s32
67     ; CHECK: liveins: $vgpr0
68     ; CHECK-NEXT: {{  $}}
69     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
70     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16777215
71     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
72     ; CHECK-NEXT: $vgpr0 = COPY [[AND]](s32)
73     %0:_(s32) = COPY $vgpr0
74     %1:_(s24) = G_TRUNC %0
75     %2:_(s32) = G_ZEXT %1
76     $vgpr0 = COPY %2
77 ...
79 ---
80 name: test_zext_s32_to_s96
81 body: |
82   bb.0:
83     liveins: $vgpr0
85     ; CHECK-LABEL: name: test_zext_s32_to_s96
86     ; CHECK: liveins: $vgpr0
87     ; CHECK-NEXT: {{  $}}
88     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
89     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
90     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[C]](s32)
91     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
92     ; CHECK-NEXT: [[MV1:%[0-9]+]]:_(s192) = G_MERGE_VALUES [[MV]](s64), [[C1]](s64), [[C1]](s64)
93     ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s96) = G_TRUNC [[MV1]](s192)
94     ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2 = COPY [[TRUNC]](s96)
95     %0:_(s32) = COPY $vgpr0
96     %1:_(s96) = G_ZEXT %0
97     $vgpr0_vgpr1_vgpr2 = COPY %1
98 ...
101 name: test_zext_i1_to_s32
102 body: |
103   bb.0:
105     ; CHECK-LABEL: name: test_zext_i1_to_s32
106     ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
107     ; CHECK-NEXT: $vgpr0 = COPY [[C]](s32)
108     %0:_(s1) = G_CONSTANT i1 0
109     %1:_(s32) = G_ZEXT %0
110     $vgpr0 = COPY %1
114 name: test_zext_i1_to_i64
115 body: |
116   bb.0:
118     ; CHECK-LABEL: name: test_zext_i1_to_i64
119     ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
120     ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[C]](s64)
121     %0:_(s1) = G_CONSTANT i1 0
122     %1:_(s64) = G_ZEXT %0
123     $vgpr0_vgpr1 = COPY %1
127 name: test_zext_v2s16_to_v2s32
128 body: |
129   bb.0:
130     liveins: $vgpr0
132     ; CHECK-LABEL: name: test_zext_v2s16_to_v2s32
133     ; CHECK: liveins: $vgpr0
134     ; CHECK-NEXT: {{  $}}
135     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
136     ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>)
137     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
138     ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)
139     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
140     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[BITCAST]], [[C1]]
141     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[AND]](s32), [[LSHR]](s32)
142     ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>)
143     %0:_(<2 x s16>) = COPY $vgpr0
144     %1:_(<2 x s32>) = G_ZEXT %0
145     $vgpr0_vgpr1 = COPY %1
149 name: test_zext_v3s16_to_v3s32
150 body: |
151   bb.0:
152     liveins: $vgpr0_vgpr1
154     ; CHECK-LABEL: name: test_zext_v3s16_to_v3s32
155     ; CHECK: liveins: $vgpr0_vgpr1
156     ; CHECK-NEXT: {{  $}}
157     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr0_vgpr1
158     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>)
159     ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[UV]](<2 x s16>)
160     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
161     ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)
162     ; CHECK-NEXT: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[UV1]](<2 x s16>)
163     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
164     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[BITCAST]], [[C1]]
165     ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[BITCAST1]], [[C1]]
166     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[AND]](s32), [[LSHR]](s32), [[AND1]](s32)
167     ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2 = COPY [[BUILD_VECTOR]](<3 x s32>)
168     %0:_(<4 x s16>) = COPY $vgpr0_vgpr1
169     %1:_(<3 x s16>) = G_EXTRACT %0, 0
170     %2:_(<3 x s32>) = G_ZEXT %1
171     $vgpr0_vgpr1_vgpr2 = COPY %2
175 name: test_zext_v4s16_to_v4s32
176 body: |
177   bb.0:
178     liveins: $vgpr0_vgpr1
180     ; CHECK-LABEL: name: test_zext_v4s16_to_v4s32
181     ; CHECK: liveins: $vgpr0_vgpr1
182     ; CHECK-NEXT: {{  $}}
183     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr0_vgpr1
184     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>)
185     ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[UV]](<2 x s16>)
186     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
187     ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)
188     ; CHECK-NEXT: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[UV1]](<2 x s16>)
189     ; CHECK-NEXT: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32)
190     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
191     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[BITCAST]], [[C1]]
192     ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[BITCAST1]], [[C1]]
193     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[AND]](s32), [[LSHR]](s32), [[AND1]](s32), [[LSHR1]](s32)
194     ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<4 x s32>)
195     %0:_(<4 x s16>) = COPY $vgpr0_vgpr1
196     %1:_(<4 x s32>) = G_ZEXT %0
197     $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %1
201 name: test_zext_v2s32_to_v2s64
202 body: |
203   bb.0:
204     liveins: $vgpr0_vgpr1
206     ; CHECK-LABEL: name: test_zext_v2s32_to_v2s64
207     ; CHECK: liveins: $vgpr0_vgpr1
208     ; CHECK-NEXT: {{  $}}
209     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
210     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
211     ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[UV]](s32)
212     ; CHECK-NEXT: [[ZEXT1:%[0-9]+]]:_(s64) = G_ZEXT [[UV1]](s32)
213     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[ZEXT]](s64), [[ZEXT1]](s64)
214     ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<2 x s64>)
215     %0:_(<2 x s32>) = COPY $vgpr0_vgpr1
216     %1:_(<2 x s64>) = G_ZEXT %0
217     $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %1
221 name: test_zext_v3s32_to_v3s64
222 body: |
223   bb.0:
224     liveins: $vgpr0_vgpr1_vgpr2
226     ; CHECK-LABEL: name: test_zext_v3s32_to_v3s64
227     ; CHECK: liveins: $vgpr0_vgpr1_vgpr2
228     ; CHECK-NEXT: {{  $}}
229     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2
230     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<3 x s32>)
231     ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[UV]](s32)
232     ; CHECK-NEXT: [[ZEXT1:%[0-9]+]]:_(s64) = G_ZEXT [[UV1]](s32)
233     ; CHECK-NEXT: [[ZEXT2:%[0-9]+]]:_(s64) = G_ZEXT [[UV2]](s32)
234     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[ZEXT]](s64), [[ZEXT1]](s64), [[ZEXT2]](s64)
235     ; CHECK-NEXT: S_NOP 0, implicit [[BUILD_VECTOR]](<3 x s64>)
236     %0:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2
237     %1:_(<3 x s64>) = G_ZEXT %0
238     S_NOP 0, implicit %1
243 name: test_zext_v4s32_to_v4s64
244 body: |
245   bb.0:
246     liveins: $vgpr0_vgpr1_vgpr2_vgpr3
248     ; CHECK-LABEL: name: test_zext_v4s32_to_v4s64
249     ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3
250     ; CHECK-NEXT: {{  $}}
251     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
252     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<4 x s32>)
253     ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[UV]](s32)
254     ; CHECK-NEXT: [[ZEXT1:%[0-9]+]]:_(s64) = G_ZEXT [[UV1]](s32)
255     ; CHECK-NEXT: [[ZEXT2:%[0-9]+]]:_(s64) = G_ZEXT [[UV2]](s32)
256     ; CHECK-NEXT: [[ZEXT3:%[0-9]+]]:_(s64) = G_ZEXT [[UV3]](s32)
257     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[ZEXT]](s64), [[ZEXT1]](s64), [[ZEXT2]](s64), [[ZEXT3]](s64)
258     ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 = COPY [[BUILD_VECTOR]](<4 x s64>)
259     %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
260     %1:_(<4 x s64>) = G_ZEXT %0
261     $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 = COPY %1
265 name: test_zext_s8_to_s16
266 body: |
267   bb.0:
268     liveins: $vgpr0
270     ; CHECK-LABEL: name: test_zext_s8_to_s16
271     ; CHECK: liveins: $vgpr0
272     ; CHECK-NEXT: {{  $}}
273     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
274     ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
275     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 255
276     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s16) = G_AND [[TRUNC]], [[C]]
277     ; CHECK-NEXT: S_ENDPGM 0, implicit [[AND]](s16)
278     %0:_(s32) = COPY $vgpr0
279     %1:_(s8) = G_TRUNC %0
280     %2:_(s16) = G_ZEXT %1
281     S_ENDPGM 0, implicit %2
285 name: test_zext_s8_to_s24
286 body: |
287   bb.0:
288     liveins: $vgpr0
290     ; CHECK-LABEL: name: test_zext_s8_to_s24
291     ; CHECK: liveins: $vgpr0
292     ; CHECK-NEXT: {{  $}}
293     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
294     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
295     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
296     ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s24) = G_TRUNC [[AND]](s32)
297     ; CHECK-NEXT: S_ENDPGM 0, implicit [[TRUNC]](s24)
298     %0:_(s32) = COPY $vgpr0
299     %1:_(s8) = G_TRUNC %0
300     %2:_(s24) = G_ZEXT %1
301     S_ENDPGM 0, implicit %2
306 name: test_zext_s7_to_s32
307 body: |
308   bb.0:
309     liveins: $vgpr0
311     ; CHECK-LABEL: name: test_zext_s7_to_s32
312     ; CHECK: liveins: $vgpr0
313     ; CHECK-NEXT: {{  $}}
314     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
315     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 127
316     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
317     ; CHECK-NEXT: S_ENDPGM 0, implicit [[AND]](s32)
318     %0:_(s32) = COPY $vgpr0
319     %1:_(s7) = G_TRUNC %0
320     %2:_(s32) = G_ZEXT %1
321     S_ENDPGM 0, implicit %2
325 name: test_zext_s8_to_s32
326 body: |
327   bb.0:
328     liveins: $vgpr0
330     ; CHECK-LABEL: name: test_zext_s8_to_s32
331     ; CHECK: liveins: $vgpr0
332     ; CHECK-NEXT: {{  $}}
333     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
334     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
335     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
336     ; CHECK-NEXT: S_ENDPGM 0, implicit [[AND]](s32)
337     %0:_(s32) = COPY $vgpr0
338     %1:_(s8) = G_TRUNC %0
339     %2:_(s32) = G_ZEXT %1
340     S_ENDPGM 0, implicit %2
344 name: test_zext_s32_to_s128
345 body: |
346   bb.0:
347     liveins: $vgpr0
349     ; CHECK-LABEL: name: test_zext_s32_to_s128
350     ; CHECK: liveins: $vgpr0
351     ; CHECK-NEXT: {{  $}}
352     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
353     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
354     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[C]](s32)
355     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
356     ; CHECK-NEXT: [[MV1:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[MV]](s64), [[C1]](s64)
357     ; CHECK-NEXT: S_ENDPGM 0, implicit [[MV1]](s128)
358     %0:_(s32) = COPY $vgpr0
359     %1:_(s128) = G_ZEXT %0
360     S_ENDPGM 0, implicit %1
364 name: test_zext_s32_to_s160
365 body: |
366   bb.0:
367     liveins: $vgpr0
369     ; CHECK-LABEL: name: test_zext_s32_to_s160
370     ; CHECK: liveins: $vgpr0
371     ; CHECK-NEXT: {{  $}}
372     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
373     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
374     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[C]](s32)
375     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
376     ; CHECK-NEXT: [[MV1:%[0-9]+]]:_(s320) = G_MERGE_VALUES [[MV]](s64), [[C1]](s64), [[C1]](s64), [[C1]](s64), [[C1]](s64)
377     ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s160) = G_TRUNC [[MV1]](s320)
378     ; CHECK-NEXT: S_ENDPGM 0, implicit [[TRUNC]](s160)
379     %0:_(s32) = COPY $vgpr0
380     %1:_(s160) = G_ZEXT %0
381     S_ENDPGM 0, implicit %1
386 name: test_zext_s32_to_s192
387 body: |
388   bb.0:
389     liveins: $vgpr0
391     ; CHECK-LABEL: name: test_zext_s32_to_s192
392     ; CHECK: liveins: $vgpr0
393     ; CHECK-NEXT: {{  $}}
394     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
395     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
396     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[C]](s32)
397     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
398     ; CHECK-NEXT: [[MV1:%[0-9]+]]:_(s192) = G_MERGE_VALUES [[MV]](s64), [[C1]](s64), [[C1]](s64)
399     ; CHECK-NEXT: S_ENDPGM 0, implicit [[MV1]](s192)
400     %0:_(s32) = COPY $vgpr0
401     %1:_(s192) = G_ZEXT %0
402     S_ENDPGM 0, implicit %1
406 name: test_zext_s32_to_s224
407 body: |
408   bb.0:
409     liveins: $vgpr0
411     ; CHECK-LABEL: name: test_zext_s32_to_s224
412     ; CHECK: liveins: $vgpr0
413     ; CHECK-NEXT: {{  $}}
414     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
415     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
416     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[C]](s32)
417     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
418     ; CHECK-NEXT: [[MV1:%[0-9]+]]:_(s448) = G_MERGE_VALUES [[MV]](s64), [[C1]](s64), [[C1]](s64), [[C1]](s64), [[C1]](s64), [[C1]](s64), [[C1]](s64)
419     ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s224) = G_TRUNC [[MV1]](s448)
420     ; CHECK-NEXT: S_ENDPGM 0, implicit [[TRUNC]](s224)
421     %0:_(s32) = COPY $vgpr0
422     %1:_(s224) = G_ZEXT %0
423     S_ENDPGM 0, implicit %1
427 name: test_zext_s32_to_s256
428 body: |
429   bb.0:
430     liveins: $vgpr0
432     ; CHECK-LABEL: name: test_zext_s32_to_s256
433     ; CHECK: liveins: $vgpr0
434     ; CHECK-NEXT: {{  $}}
435     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
436     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
437     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[C]](s32)
438     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
439     ; CHECK-NEXT: [[MV1:%[0-9]+]]:_(s256) = G_MERGE_VALUES [[MV]](s64), [[C1]](s64), [[C1]](s64), [[C1]](s64)
440     ; CHECK-NEXT: S_ENDPGM 0, implicit [[MV1]](s256)
441     %0:_(s32) = COPY $vgpr0
442     %1:_(s256) = G_ZEXT %0
443     S_ENDPGM 0, implicit %1
447 name: test_zext_s32_to_s512
448 body: |
449   bb.0:
450     liveins: $vgpr0
452     ; CHECK-LABEL: name: test_zext_s32_to_s512
453     ; CHECK: liveins: $vgpr0
454     ; CHECK-NEXT: {{  $}}
455     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
456     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
457     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[C]](s32)
458     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
459     ; CHECK-NEXT: [[MV1:%[0-9]+]]:_(s512) = G_MERGE_VALUES [[MV]](s64), [[C1]](s64), [[C1]](s64), [[C1]](s64), [[C1]](s64), [[C1]](s64), [[C1]](s64), [[C1]](s64)
460     ; CHECK-NEXT: S_ENDPGM 0, implicit [[MV1]](s512)
461     %0:_(s32) = COPY $vgpr0
462     %1:_(s512) = G_ZEXT %0
463     S_ENDPGM 0, implicit %1
467 name: test_zext_s32_to_s992
468 body: |
469   bb.0:
470     liveins: $vgpr0
472     ; CHECK-LABEL: name: test_zext_s32_to_s992
473     ; CHECK: liveins: $vgpr0
474     ; CHECK-NEXT: {{  $}}
475     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
476     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
477     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[C]](s32)
478     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
479     ; CHECK-NEXT: [[MV1:%[0-9]+]]:_(s448) = G_MERGE_VALUES [[MV]](s64), [[C1]](s64), [[C1]](s64), [[C1]](s64), [[C1]](s64), [[C1]](s64), [[C1]](s64)
480     ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s224) = G_TRUNC [[MV1]](s448)
481     ; CHECK-NEXT: S_ENDPGM 0, implicit [[TRUNC]](s224)
482     %0:_(s32) = COPY $vgpr0
483     %1:_(s224) = G_ZEXT %0
484     S_ENDPGM 0, implicit %1
488 name: test_zext_s32_to_s1024
489 body: |
490   bb.0:
491     liveins: $vgpr0
493     ; CHECK-LABEL: name: test_zext_s32_to_s1024
494     ; CHECK: liveins: $vgpr0
495     ; CHECK-NEXT: {{  $}}
496     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
497     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
498     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[C]](s32)
499     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
500     ; CHECK-NEXT: [[MV1:%[0-9]+]]:_(s1024) = G_MERGE_VALUES [[MV]](s64), [[C1]](s64), [[C1]](s64), [[C1]](s64), [[C1]](s64), [[C1]](s64), [[C1]](s64), [[C1]](s64), [[C1]](s64), [[C1]](s64), [[C1]](s64), [[C1]](s64), [[C1]](s64), [[C1]](s64), [[C1]](s64), [[C1]](s64)
501     ; CHECK-NEXT: S_ENDPGM 0, implicit [[MV1]](s1024)
502     %0:_(s32) = COPY $vgpr0
503     %1:_(s1024) = G_ZEXT %0
504     S_ENDPGM 0, implicit %1
508 name: test_zext_s64_to_s128
509 body: |
510   bb.0:
511     liveins: $vgpr0_vgpr1
513     ; CHECK-LABEL: name: test_zext_s64_to_s128
514     ; CHECK: liveins: $vgpr0_vgpr1
515     ; CHECK-NEXT: {{  $}}
516     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
517     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
518     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[COPY]](s64), [[C]](s64)
519     ; CHECK-NEXT: S_ENDPGM 0, implicit [[MV]](s128)
520     %0:_(s64) = COPY $vgpr0_vgpr1
521     %1:_(s128) = G_ZEXT %0
522     S_ENDPGM 0, implicit %1
526 name: test_zext_s64_to_s192
527 body: |
528   bb.0:
529     liveins: $vgpr0_vgpr1
531     ; CHECK-LABEL: name: test_zext_s64_to_s192
532     ; CHECK: liveins: $vgpr0_vgpr1
533     ; CHECK-NEXT: {{  $}}
534     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
535     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
536     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s192) = G_MERGE_VALUES [[COPY]](s64), [[C]](s64), [[C]](s64)
537     ; CHECK-NEXT: S_ENDPGM 0, implicit [[MV]](s192)
538     %0:_(s64) = COPY $vgpr0_vgpr1
539     %1:_(s192) = G_ZEXT %0
540     S_ENDPGM 0, implicit %1
544 name: test_zext_s64_to_s256
545 body: |
546   bb.0:
547     liveins: $vgpr0_vgpr1
549     ; CHECK-LABEL: name: test_zext_s64_to_s256
550     ; CHECK: liveins: $vgpr0_vgpr1
551     ; CHECK-NEXT: {{  $}}
552     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
553     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
554     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s256) = G_MERGE_VALUES [[COPY]](s64), [[C]](s64), [[C]](s64), [[C]](s64)
555     ; CHECK-NEXT: S_ENDPGM 0, implicit [[MV]](s256)
556     %0:_(s64) = COPY $vgpr0_vgpr1
557     %1:_(s256) = G_ZEXT %0
558     S_ENDPGM 0, implicit %1
562 name: test_zext_s64_to_s512
563 body: |
564   bb.0:
565     liveins: $vgpr0_vgpr1
567     ; CHECK-LABEL: name: test_zext_s64_to_s512
568     ; CHECK: liveins: $vgpr0_vgpr1
569     ; CHECK-NEXT: {{  $}}
570     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
571     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
572     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s512) = G_MERGE_VALUES [[COPY]](s64), [[C]](s64), [[C]](s64), [[C]](s64), [[C]](s64), [[C]](s64), [[C]](s64), [[C]](s64)
573     ; CHECK-NEXT: S_ENDPGM 0, implicit [[MV]](s512)
574     %0:_(s64) = COPY $vgpr0_vgpr1
575     %1:_(s512) = G_ZEXT %0
576     S_ENDPGM 0, implicit %1
580 name: test_zext_s64_to_s1024
581 body: |
582   bb.0:
583     liveins: $vgpr0_vgpr1
585     ; CHECK-LABEL: name: test_zext_s64_to_s1024
586     ; CHECK: liveins: $vgpr0_vgpr1
587     ; CHECK-NEXT: {{  $}}
588     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
589     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
590     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s1024) = G_MERGE_VALUES [[COPY]](s64), [[C]](s64), [[C]](s64), [[C]](s64), [[C]](s64), [[C]](s64), [[C]](s64), [[C]](s64), [[C]](s64), [[C]](s64), [[C]](s64), [[C]](s64), [[C]](s64), [[C]](s64), [[C]](s64), [[C]](s64)
591     ; CHECK-NEXT: S_ENDPGM 0, implicit [[MV]](s1024)
592     %0:_(s64) = COPY $vgpr0_vgpr1
593     %1:_(s1024) = G_ZEXT %0
594     S_ENDPGM 0, implicit %1
598 name: test_zext_s96_to_s128
599 body: |
600   bb.0:
601     liveins: $vgpr0_vgpr1_vgpr2
603     ; CHECK-LABEL: name: test_zext_s96_to_s128
604     ; CHECK: liveins: $vgpr0_vgpr1_vgpr2
605     ; CHECK-NEXT: {{  $}}
606     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s96) = COPY $vgpr0_vgpr1_vgpr2
607     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](s96)
608     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
609     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[UV]](s32), [[UV1]](s32)
610     ; CHECK-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[UV2]](s32), [[C]](s32)
611     ; CHECK-NEXT: [[MV2:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[MV]](s64), [[MV1]](s64)
612     ; CHECK-NEXT: S_ENDPGM 0, implicit [[MV2]](s128)
613     %0:_(s96) = COPY $vgpr0_vgpr1_vgpr2
614     %1:_(s128) = G_ZEXT %0
615     S_ENDPGM 0, implicit %1
619 name: test_zext_s128_to_s256
620 body: |
621   bb.0:
622     liveins: $vgpr0_vgpr1_vgpr2_vgpr3
624     ; CHECK-LABEL: name: test_zext_s128_to_s256
625     ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3
626     ; CHECK-NEXT: {{  $}}
627     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
628     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](s128)
629     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
630     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s256) = G_MERGE_VALUES [[UV]](s64), [[UV1]](s64), [[C]](s64), [[C]](s64)
631     ; CHECK-NEXT: S_ENDPGM 0, implicit [[MV]](s256)
632     %0:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
633     %1:_(s256) = G_ZEXT %0
634     S_ENDPGM 0, implicit %1
638 name: test_zext_s32_to_s88
639 body: |
640   bb.0:
641     liveins: $vgpr0
643     ; CHECK-LABEL: name: test_zext_s32_to_s88
644     ; CHECK: liveins: $vgpr0
645     ; CHECK-NEXT: {{  $}}
646     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
647     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 8
648     ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C]](s32)
649     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
650     ; CHECK-NEXT: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C1]](s32)
651     ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 24
652     ; CHECK-NEXT: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C2]](s32)
653     ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
654     ; CHECK-NEXT: [[C3:%[0-9]+]]:_(s16) = G_CONSTANT i16 255
655     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s16) = G_AND [[TRUNC]], [[C3]]
656     ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR]](s32)
657     ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s16) = G_AND [[TRUNC1]], [[C3]]
658     ; CHECK-NEXT: [[C4:%[0-9]+]]:_(s16) = G_CONSTANT i16 8
659     ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s16) = G_SHL [[AND1]], [[C4]](s16)
660     ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s16) = G_OR [[AND]], [[SHL]]
661     ; CHECK-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR1]](s32)
662     ; CHECK-NEXT: [[AND2:%[0-9]+]]:_(s16) = G_AND [[TRUNC2]], [[C3]]
663     ; CHECK-NEXT: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR2]](s32)
664     ; CHECK-NEXT: [[SHL1:%[0-9]+]]:_(s16) = G_SHL [[TRUNC3]], [[C4]](s16)
665     ; CHECK-NEXT: [[OR1:%[0-9]+]]:_(s16) = G_OR [[AND2]], [[SHL1]]
666     ; CHECK-NEXT: [[C5:%[0-9]+]]:_(s16) = G_CONSTANT i16 0
667     ; CHECK-NEXT: [[SHL2:%[0-9]+]]:_(s16) = G_SHL [[C5]], [[C4]](s16)
668     ; CHECK-NEXT: [[OR2:%[0-9]+]]:_(s16) = G_OR [[C5]], [[SHL2]]
669     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s16) = COPY [[OR2]](s16)
670     ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[OR]](s16)
671     ; CHECK-NEXT: [[ZEXT1:%[0-9]+]]:_(s32) = G_ZEXT [[OR1]](s16)
672     ; CHECK-NEXT: [[SHL3:%[0-9]+]]:_(s32) = G_SHL [[ZEXT1]], [[C1]](s32)
673     ; CHECK-NEXT: [[OR3:%[0-9]+]]:_(s32) = G_OR [[ZEXT]], [[SHL3]]
674     ; CHECK-NEXT: [[ZEXT2:%[0-9]+]]:_(s32) = G_ZEXT [[OR2]](s16)
675     ; CHECK-NEXT: [[ZEXT3:%[0-9]+]]:_(s32) = G_ZEXT [[COPY1]](s16)
676     ; CHECK-NEXT: [[SHL4:%[0-9]+]]:_(s32) = G_SHL [[ZEXT3]], [[C1]](s32)
677     ; CHECK-NEXT: [[OR4:%[0-9]+]]:_(s32) = G_OR [[ZEXT2]], [[SHL4]]
678     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[OR3]](s32), [[OR4]](s32)
679     ; CHECK-NEXT: [[C6:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
680     ; CHECK-NEXT: [[MV1:%[0-9]+]]:_(s704) = G_MERGE_VALUES [[MV]](s64), [[C6]](s64), [[C6]](s64), [[C6]](s64), [[C6]](s64), [[C6]](s64), [[C6]](s64), [[C6]](s64), [[C6]](s64), [[C6]](s64), [[C6]](s64)
681     ; CHECK-NEXT: [[TRUNC4:%[0-9]+]]:_(s88) = G_TRUNC [[MV1]](s704)
682     ; CHECK-NEXT: S_ENDPGM 0, implicit [[TRUNC4]](s88)
683     %0:_(s32) = COPY $vgpr0
684     %1:_(s88) = G_ZEXT %0
685     S_ENDPGM 0, implicit %1
688 # The instruction count blows up for this and takes too long to
689 # generate checks. This fails on a G_MERGE_VALUES to s4160
691 # ---
692 # name: test_zext_s32_to_s65
693 # body: |
694 #   bb.0:
695 #     liveins: $vgpr0
697 #     %0:_(s32) = COPY $vgpr0
698 #     %1:_(s65) = G_ZEXT %0
699 #     S_ENDPGM 0, implicit %1
700 # ...
703 name: test_zext_s2_to_s112
704 body: |
705   bb.0:
706     liveins: $vgpr0
708     ; CHECK-LABEL: name: test_zext_s2_to_s112
709     ; CHECK: liveins: $vgpr0
710     ; CHECK-NEXT: {{  $}}
711     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
712     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
713     ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C]](s32)
714     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
715     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C1]]
716     ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[LSHR]], [[C]](s32)
717     ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]]
718     ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
719     ; CHECK-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[C2]], [[C]](s32)
720     ; CHECK-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[C2]], [[SHL1]]
721     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[OR]](s32), [[OR1]](s32)
722     ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s64) = G_IMPLICIT_DEF
723     ; CHECK-NEXT: [[C3:%[0-9]+]]:_(s64) = G_CONSTANT i64 3
724     ; CHECK-NEXT: [[C4:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
725     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[C4]](s64)
726     ; CHECK-NEXT: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[UV]], [[C]](s32)
727     ; CHECK-NEXT: [[SHL2:%[0-9]+]]:_(s32) = G_SHL [[LSHR1]], [[C]](s32)
728     ; CHECK-NEXT: [[OR2:%[0-9]+]]:_(s32) = G_OR [[UV]], [[SHL2]]
729     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY [[C2]](s32)
730     ; CHECK-NEXT: [[SHL3:%[0-9]+]]:_(s32) = G_SHL [[COPY1]], [[C]](s32)
731     ; CHECK-NEXT: [[OR3:%[0-9]+]]:_(s32) = G_OR [[UV1]], [[SHL3]]
732     ; CHECK-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[OR2]](s32), [[OR3]](s32)
733     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY [[MV]](s64)
734     ; CHECK-NEXT: [[EXTRACT:%[0-9]+]]:_(s48) = G_EXTRACT [[DEF]](s64), 0
735     ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(s64) = COPY [[C3]](s64)
736     ; CHECK-NEXT: [[EXTRACT1:%[0-9]+]]:_(s48) = G_EXTRACT [[MV1]](s64), 0
737     ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s64) = G_AND [[COPY2]], [[COPY3]]
738     ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[EXTRACT]](s48)
739     ; CHECK-NEXT: [[ANYEXT1:%[0-9]+]]:_(s64) = G_ANYEXT [[EXTRACT1]](s48)
740     ; CHECK-NEXT: [[AND2:%[0-9]+]]:_(s64) = G_AND [[ANYEXT]], [[ANYEXT1]]
741     ; CHECK-NEXT: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[AND2]](s64)
742     ; CHECK-NEXT: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[UV2]], [[C]](s32)
743     ; CHECK-NEXT: [[DEF1:%[0-9]+]]:_(s64) = G_IMPLICIT_DEF
744     ; CHECK-NEXT: [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[DEF1]](s64)
745     ; CHECK-NEXT: [[LSHR3:%[0-9]+]]:_(s32) = G_LSHR [[UV4]], [[C]](s32)
746     ; CHECK-NEXT: [[AND3:%[0-9]+]]:_(s32) = G_AND [[UV2]], [[C1]]
747     ; CHECK-NEXT: [[SHL4:%[0-9]+]]:_(s32) = G_SHL [[LSHR2]], [[C]](s32)
748     ; CHECK-NEXT: [[OR4:%[0-9]+]]:_(s32) = G_OR [[AND3]], [[SHL4]]
749     ; CHECK-NEXT: [[AND4:%[0-9]+]]:_(s32) = G_AND [[UV3]], [[C1]]
750     ; CHECK-NEXT: [[OR5:%[0-9]+]]:_(s32) = G_OR [[AND4]], [[SHL3]]
751     ; CHECK-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[OR4]](s32), [[OR5]](s32)
752     ; CHECK-NEXT: [[AND5:%[0-9]+]]:_(s32) = G_AND [[UV4]], [[C1]]
753     ; CHECK-NEXT: [[SHL5:%[0-9]+]]:_(s32) = G_SHL [[AND5]], [[C]](s32)
754     ; CHECK-NEXT: [[OR6:%[0-9]+]]:_(s32) = G_OR [[COPY1]], [[SHL5]]
755     ; CHECK-NEXT: [[AND6:%[0-9]+]]:_(s32) = G_AND [[UV5]], [[C1]]
756     ; CHECK-NEXT: [[SHL6:%[0-9]+]]:_(s32) = G_SHL [[AND6]], [[C]](s32)
757     ; CHECK-NEXT: [[OR7:%[0-9]+]]:_(s32) = G_OR [[LSHR3]], [[SHL6]]
758     ; CHECK-NEXT: [[MV3:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[OR6]](s32), [[OR7]](s32)
759     ; CHECK-NEXT: [[OR8:%[0-9]+]]:_(s32) = G_OR [[AND6]], [[SHL5]]
760     ; CHECK-NEXT: [[MV4:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[UV4]](s32), [[OR8]](s32)
761     ; CHECK-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY [[OR7]](s32)
762     ; CHECK-NEXT: [[MV5:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[UV4]](s32)
763     ; CHECK-NEXT: [[OR9:%[0-9]+]]:_(s32) = G_OR [[AND6]], [[SHL3]]
764     ; CHECK-NEXT: [[OR10:%[0-9]+]]:_(s32) = G_OR [[COPY1]], [[SHL3]]
765     ; CHECK-NEXT: [[MV6:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[OR9]](s32), [[OR10]](s32)
766     ; CHECK-NEXT: [[MV7:%[0-9]+]]:_(s384) = G_MERGE_VALUES [[AND1]](s64), [[MV2]](s64), [[MV3]](s64), [[MV4]](s64), [[MV5]](s64), [[MV6]](s64)
767     ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s112) = G_TRUNC [[MV7]](s384)
768     ; CHECK-NEXT: S_ENDPGM 0, implicit [[TRUNC]](s112)
769     %0:_(s32) = COPY $vgpr0
770     %1:_(s2) = G_TRUNC %0
771     %2:_(s112) = G_ZEXT %1
772     S_ENDPGM 0, implicit %2
776 name: test_zext_s112_to_s128
777 body: |
778   bb.0:
779     liveins: $vgpr0_vgpr1_vgpr2_vgpr3
780     ; CHECK-LABEL: name: test_zext_s112_to_s128
781     ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3
782     ; CHECK-NEXT: {{  $}}
783     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
784     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
785     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 281474976710655
786     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](s128)
787     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[UV]], [[C]]
788     ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s64) = G_AND [[UV1]], [[C1]]
789     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[AND]](s64), [[AND1]](s64)
790     ; CHECK-NEXT: S_ENDPGM 0, implicit [[MV]](s128)
791     %0:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
792     %1:_(s112) = G_TRUNC %0
793     %2:_(s128) = G_ZEXT %1
794     S_ENDPGM 0, implicit %2