[AMDGPU] Make v8i16/v8f16 legal
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / GlobalISel / legalize-zext.mir
blobb62013d28e817a03edb31ab67002916d5315a42e
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: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
12     ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[COPY]](s32)
13     ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[ZEXT]](s64)
14     %0:_(s32) = COPY $vgpr0
15     %1:_(s64) = G_ZEXT %0
16     $vgpr0_vgpr1 = COPY %1
17 ...
19 ---
20 name: test_zext_s16_to_s64
21 body: |
22   bb.0:
23     liveins: $vgpr0
25     ; CHECK-LABEL: name: test_zext_s16_to_s64
26     ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
27     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 65535
28     ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[COPY]](s32)
29     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[ANYEXT]], [[C]]
30     ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[AND]](s64)
31     %0:_(s32) = COPY $vgpr0
32     %1:_(s16) = G_TRUNC %0
33     %2:_(s64) = G_ZEXT %1
34     $vgpr0_vgpr1 = COPY %2
35 ...
37 ---
38 name: test_zext_s16_to_s32
39 body: |
40   bb.0:
41     liveins: $vgpr0
43     ; CHECK-LABEL: name: test_zext_s16_to_s32
44     ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
45     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
46     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
47     ; CHECK-NEXT: $vgpr0 = COPY [[AND]](s32)
48     %0:_(s32) = COPY $vgpr0
49     %1:_(s16) = G_TRUNC %0
50     %2:_(s32) = G_ZEXT %1
51     $vgpr0 = COPY %2
52 ...
54 ---
55 name: test_zext_s24_to_s32
56 body: |
57   bb.0:
58     liveins: $vgpr0
60     ; CHECK-LABEL: name: test_zext_s24_to_s32
61     ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
62     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16777215
63     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
64     ; CHECK-NEXT: $vgpr0 = COPY [[AND]](s32)
65     %0:_(s32) = COPY $vgpr0
66     %1:_(s24) = G_TRUNC %0
67     %2:_(s32) = G_ZEXT %1
68     $vgpr0 = COPY %2
69 ...
71 ---
72 name: test_zext_s32_to_s96
73 body: |
74   bb.0:
75     liveins: $vgpr0
77     ; CHECK-LABEL: name: test_zext_s32_to_s96
78     ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
79     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
80     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[C]](s32)
81     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
82     ; CHECK-NEXT: [[MV1:%[0-9]+]]:_(s192) = G_MERGE_VALUES [[MV]](s64), [[C1]](s64), [[C1]](s64)
83     ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s96) = G_TRUNC [[MV1]](s192)
84     ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2 = COPY [[TRUNC]](s96)
85     %0:_(s32) = COPY $vgpr0
86     %1:_(s96) = G_ZEXT %0
87     $vgpr0_vgpr1_vgpr2 = COPY %1
88 ...
90 ---
91 name: test_zext_i1_to_s32
92 body: |
93   bb.0:
95     ; CHECK-LABEL: name: test_zext_i1_to_s32
96     ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
97     ; CHECK-NEXT: $vgpr0 = COPY [[C]](s32)
98     %0:_(s1) = G_CONSTANT i1 0
99     %1:_(s32) = G_ZEXT %0
100     $vgpr0 = COPY %1
104 name: test_zext_i1_to_i64
105 body: |
106   bb.0:
108     ; CHECK-LABEL: name: test_zext_i1_to_i64
109     ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
110     ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[C]](s64)
111     %0:_(s1) = G_CONSTANT i1 0
112     %1:_(s64) = G_ZEXT %0
113     $vgpr0_vgpr1 = COPY %1
117 name: test_zext_v2s16_to_v2s32
118 body: |
119   bb.0:
120     liveins: $vgpr0
122     ; CHECK-LABEL: name: test_zext_v2s16_to_v2s32
123     ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
124     ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>)
125     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
126     ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)
127     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
128     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[BITCAST]], [[C1]]
129     ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[LSHR]], [[C1]]
130     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[AND]](s32), [[AND1]](s32)
131     ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>)
132     %0:_(<2 x s16>) = COPY $vgpr0
133     %1:_(<2 x s32>) = G_ZEXT %0
134     $vgpr0_vgpr1 = COPY %1
138 name: test_zext_v3s16_to_v3s32
139 body: |
140   bb.0:
141     liveins: $vgpr0_vgpr1
143     ; CHECK-LABEL: name: test_zext_v3s16_to_v3s32
144     ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr0_vgpr1
145     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>)
146     ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[UV]](<2 x s16>)
147     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
148     ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)
149     ; CHECK-NEXT: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[UV1]](<2 x s16>)
150     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
151     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[BITCAST]], [[C1]]
152     ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[LSHR]], [[C1]]
153     ; CHECK-NEXT: [[AND2:%[0-9]+]]:_(s32) = G_AND [[BITCAST1]], [[C1]]
154     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[AND]](s32), [[AND1]](s32), [[AND2]](s32)
155     ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2 = COPY [[BUILD_VECTOR]](<3 x s32>)
156     %0:_(<4 x s16>) = COPY $vgpr0_vgpr1
157     %1:_(<3 x s16>) = G_EXTRACT %0, 0
158     %2:_(<3 x s32>) = G_ZEXT %1
159     $vgpr0_vgpr1_vgpr2 = COPY %2
163 name: test_zext_v4s16_to_v4s32
164 body: |
165   bb.0:
166     liveins: $vgpr0_vgpr1
168     ; CHECK-LABEL: name: test_zext_v4s16_to_v4s32
169     ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr0_vgpr1
170     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>)
171     ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[UV]](<2 x s16>)
172     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
173     ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)
174     ; CHECK-NEXT: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[UV1]](<2 x s16>)
175     ; CHECK-NEXT: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32)
176     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
177     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[BITCAST]], [[C1]]
178     ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[LSHR]], [[C1]]
179     ; CHECK-NEXT: [[AND2:%[0-9]+]]:_(s32) = G_AND [[BITCAST1]], [[C1]]
180     ; CHECK-NEXT: [[AND3:%[0-9]+]]:_(s32) = G_AND [[LSHR1]], [[C1]]
181     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[AND]](s32), [[AND1]](s32), [[AND2]](s32), [[AND3]](s32)
182     ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<4 x s32>)
183     %0:_(<4 x s16>) = COPY $vgpr0_vgpr1
184     %1:_(<4 x s32>) = G_ZEXT %0
185     $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %1
189 name: test_zext_v2s32_to_v2s64
190 body: |
191   bb.0:
192     liveins: $vgpr0_vgpr1
194     ; CHECK-LABEL: name: test_zext_v2s32_to_v2s64
195     ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
196     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
197     ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[UV]](s32)
198     ; CHECK-NEXT: [[ZEXT1:%[0-9]+]]:_(s64) = G_ZEXT [[UV1]](s32)
199     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[ZEXT]](s64), [[ZEXT1]](s64)
200     ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<2 x s64>)
201     %0:_(<2 x s32>) = COPY $vgpr0_vgpr1
202     %1:_(<2 x s64>) = G_ZEXT %0
203     $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %1
207 name: test_zext_v3s32_to_v3s64
208 body: |
209   bb.0:
210     liveins: $vgpr0_vgpr1_vgpr2
212     ; CHECK-LABEL: name: test_zext_v3s32_to_v3s64
213     ; CHECK: [[COPY:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2
214     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<3 x s32>)
215     ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[UV]](s32)
216     ; CHECK-NEXT: [[ZEXT1:%[0-9]+]]:_(s64) = G_ZEXT [[UV1]](s32)
217     ; CHECK-NEXT: [[ZEXT2:%[0-9]+]]:_(s64) = G_ZEXT [[UV2]](s32)
218     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[ZEXT]](s64), [[ZEXT1]](s64), [[ZEXT2]](s64)
219     ; CHECK-NEXT: S_NOP 0, implicit [[BUILD_VECTOR]](<3 x s64>)
220     %0:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2
221     %1:_(<3 x s64>) = G_ZEXT %0
222     S_NOP 0, implicit %1
227 name: test_zext_v4s32_to_v4s64
228 body: |
229   bb.0:
230     liveins: $vgpr0_vgpr1_vgpr2_vgpr3
232     ; CHECK-LABEL: name: test_zext_v4s32_to_v4s64
233     ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
234     ; 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>)
235     ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[UV]](s32)
236     ; CHECK-NEXT: [[ZEXT1:%[0-9]+]]:_(s64) = G_ZEXT [[UV1]](s32)
237     ; CHECK-NEXT: [[ZEXT2:%[0-9]+]]:_(s64) = G_ZEXT [[UV2]](s32)
238     ; CHECK-NEXT: [[ZEXT3:%[0-9]+]]:_(s64) = G_ZEXT [[UV3]](s32)
239     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[ZEXT]](s64), [[ZEXT1]](s64), [[ZEXT2]](s64), [[ZEXT3]](s64)
240     ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 = COPY [[BUILD_VECTOR]](<4 x s64>)
241     %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
242     %1:_(<4 x s64>) = G_ZEXT %0
243     $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 = COPY %1
247 name: test_zext_s8_to_s16
248 body: |
249   bb.0:
250     liveins: $vgpr0
252     ; CHECK-LABEL: name: test_zext_s8_to_s16
253     ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
254     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 255
255     ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
256     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s16) = G_AND [[TRUNC]], [[C]]
257     ; CHECK-NEXT: S_ENDPGM 0, implicit [[AND]](s16)
258     %0:_(s32) = COPY $vgpr0
259     %1:_(s8) = G_TRUNC %0
260     %2:_(s16) = G_ZEXT %1
261     S_ENDPGM 0, implicit %2
265 name: test_zext_s8_to_s24
266 body: |
267   bb.0:
268     liveins: $vgpr0
270     ; CHECK-LABEL: name: test_zext_s8_to_s24
271     ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
272     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
273     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
274     ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s24) = G_TRUNC [[AND]](s32)
275     ; CHECK-NEXT: S_ENDPGM 0, implicit [[TRUNC]](s24)
276     %0:_(s32) = COPY $vgpr0
277     %1:_(s8) = G_TRUNC %0
278     %2:_(s24) = G_ZEXT %1
279     S_ENDPGM 0, implicit %2
284 name: test_zext_s7_to_s32
285 body: |
286   bb.0:
287     liveins: $vgpr0
289     ; CHECK-LABEL: name: test_zext_s7_to_s32
290     ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
291     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 127
292     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
293     ; CHECK-NEXT: S_ENDPGM 0, implicit [[AND]](s32)
294     %0:_(s32) = COPY $vgpr0
295     %1:_(s7) = G_TRUNC %0
296     %2:_(s32) = G_ZEXT %1
297     S_ENDPGM 0, implicit %2
301 name: test_zext_s8_to_s32
302 body: |
303   bb.0:
304     liveins: $vgpr0
306     ; CHECK-LABEL: name: test_zext_s8_to_s32
307     ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
308     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
309     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
310     ; CHECK-NEXT: S_ENDPGM 0, implicit [[AND]](s32)
311     %0:_(s32) = COPY $vgpr0
312     %1:_(s8) = G_TRUNC %0
313     %2:_(s32) = G_ZEXT %1
314     S_ENDPGM 0, implicit %2
318 name: test_zext_s32_to_s128
319 body: |
320   bb.0:
321     liveins: $vgpr0
323     ; CHECK-LABEL: name: test_zext_s32_to_s128
324     ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
325     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
326     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[C]](s32)
327     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
328     ; CHECK-NEXT: [[MV1:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[MV]](s64), [[C1]](s64)
329     ; CHECK-NEXT: S_ENDPGM 0, implicit [[MV1]](s128)
330     %0:_(s32) = COPY $vgpr0
331     %1:_(s128) = G_ZEXT %0
332     S_ENDPGM 0, implicit %1
336 name: test_zext_s32_to_s160
337 body: |
338   bb.0:
339     liveins: $vgpr0
341     ; CHECK-LABEL: name: test_zext_s32_to_s160
342     ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
343     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
344     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[C]](s32)
345     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
346     ; CHECK-NEXT: [[MV1:%[0-9]+]]:_(s320) = G_MERGE_VALUES [[MV]](s64), [[C1]](s64), [[C1]](s64), [[C1]](s64), [[C1]](s64)
347     ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s160) = G_TRUNC [[MV1]](s320)
348     ; CHECK-NEXT: S_ENDPGM 0, implicit [[TRUNC]](s160)
349     %0:_(s32) = COPY $vgpr0
350     %1:_(s160) = G_ZEXT %0
351     S_ENDPGM 0, implicit %1
356 name: test_zext_s32_to_s192
357 body: |
358   bb.0:
359     liveins: $vgpr0
361     ; CHECK-LABEL: name: test_zext_s32_to_s192
362     ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
363     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
364     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[C]](s32)
365     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
366     ; CHECK-NEXT: [[MV1:%[0-9]+]]:_(s192) = G_MERGE_VALUES [[MV]](s64), [[C1]](s64), [[C1]](s64)
367     ; CHECK-NEXT: S_ENDPGM 0, implicit [[MV1]](s192)
368     %0:_(s32) = COPY $vgpr0
369     %1:_(s192) = G_ZEXT %0
370     S_ENDPGM 0, implicit %1
374 name: test_zext_s32_to_s224
375 body: |
376   bb.0:
377     liveins: $vgpr0
379     ; CHECK-LABEL: name: test_zext_s32_to_s224
380     ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
381     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
382     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[C]](s32)
383     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
384     ; CHECK-NEXT: [[MV1:%[0-9]+]]:_(s448) = G_MERGE_VALUES [[MV]](s64), [[C1]](s64), [[C1]](s64), [[C1]](s64), [[C1]](s64), [[C1]](s64), [[C1]](s64)
385     ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s224) = G_TRUNC [[MV1]](s448)
386     ; CHECK-NEXT: S_ENDPGM 0, implicit [[TRUNC]](s224)
387     %0:_(s32) = COPY $vgpr0
388     %1:_(s224) = G_ZEXT %0
389     S_ENDPGM 0, implicit %1
393 name: test_zext_s32_to_s256
394 body: |
395   bb.0:
396     liveins: $vgpr0
398     ; CHECK-LABEL: name: test_zext_s32_to_s256
399     ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
400     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
401     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[C]](s32)
402     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
403     ; CHECK-NEXT: [[MV1:%[0-9]+]]:_(s256) = G_MERGE_VALUES [[MV]](s64), [[C1]](s64), [[C1]](s64), [[C1]](s64)
404     ; CHECK-NEXT: S_ENDPGM 0, implicit [[MV1]](s256)
405     %0:_(s32) = COPY $vgpr0
406     %1:_(s256) = G_ZEXT %0
407     S_ENDPGM 0, implicit %1
411 name: test_zext_s32_to_s512
412 body: |
413   bb.0:
414     liveins: $vgpr0
416     ; CHECK-LABEL: name: test_zext_s32_to_s512
417     ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
418     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
419     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[C]](s32)
420     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
421     ; 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)
422     ; CHECK-NEXT: S_ENDPGM 0, implicit [[MV1]](s512)
423     %0:_(s32) = COPY $vgpr0
424     %1:_(s512) = G_ZEXT %0
425     S_ENDPGM 0, implicit %1
429 name: test_zext_s32_to_s992
430 body: |
431   bb.0:
432     liveins: $vgpr0
434     ; CHECK-LABEL: name: test_zext_s32_to_s992
435     ; CHECK: [[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]+]]:_(s448) = G_MERGE_VALUES [[MV]](s64), [[C1]](s64), [[C1]](s64), [[C1]](s64), [[C1]](s64), [[C1]](s64), [[C1]](s64)
440     ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s224) = G_TRUNC [[MV1]](s448)
441     ; CHECK-NEXT: S_ENDPGM 0, implicit [[TRUNC]](s224)
442     %0:_(s32) = COPY $vgpr0
443     %1:_(s224) = G_ZEXT %0
444     S_ENDPGM 0, implicit %1
448 name: test_zext_s32_to_s1024
449 body: |
450   bb.0:
451     liveins: $vgpr0
453     ; CHECK-LABEL: name: test_zext_s32_to_s1024
454     ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
455     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
456     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[C]](s32)
457     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
458     ; 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)
459     ; CHECK-NEXT: S_ENDPGM 0, implicit [[MV1]](s1024)
460     %0:_(s32) = COPY $vgpr0
461     %1:_(s1024) = G_ZEXT %0
462     S_ENDPGM 0, implicit %1
466 name: test_zext_s64_to_s128
467 body: |
468   bb.0:
469     liveins: $vgpr0_vgpr1
471     ; CHECK-LABEL: name: test_zext_s64_to_s128
472     ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
473     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
474     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[COPY]](s64), [[C]](s64)
475     ; CHECK-NEXT: S_ENDPGM 0, implicit [[MV]](s128)
476     %0:_(s64) = COPY $vgpr0_vgpr1
477     %1:_(s128) = G_ZEXT %0
478     S_ENDPGM 0, implicit %1
482 name: test_zext_s64_to_s192
483 body: |
484   bb.0:
485     liveins: $vgpr0_vgpr1
487     ; CHECK-LABEL: name: test_zext_s64_to_s192
488     ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
489     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
490     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s192) = G_MERGE_VALUES [[COPY]](s64), [[C]](s64), [[C]](s64)
491     ; CHECK-NEXT: S_ENDPGM 0, implicit [[MV]](s192)
492     %0:_(s64) = COPY $vgpr0_vgpr1
493     %1:_(s192) = G_ZEXT %0
494     S_ENDPGM 0, implicit %1
498 name: test_zext_s64_to_s256
499 body: |
500   bb.0:
501     liveins: $vgpr0_vgpr1
503     ; CHECK-LABEL: name: test_zext_s64_to_s256
504     ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
505     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
506     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s256) = G_MERGE_VALUES [[COPY]](s64), [[C]](s64), [[C]](s64), [[C]](s64)
507     ; CHECK-NEXT: S_ENDPGM 0, implicit [[MV]](s256)
508     %0:_(s64) = COPY $vgpr0_vgpr1
509     %1:_(s256) = G_ZEXT %0
510     S_ENDPGM 0, implicit %1
514 name: test_zext_s64_to_s512
515 body: |
516   bb.0:
517     liveins: $vgpr0_vgpr1
519     ; CHECK-LABEL: name: test_zext_s64_to_s512
520     ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
521     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
522     ; 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)
523     ; CHECK-NEXT: S_ENDPGM 0, implicit [[MV]](s512)
524     %0:_(s64) = COPY $vgpr0_vgpr1
525     %1:_(s512) = G_ZEXT %0
526     S_ENDPGM 0, implicit %1
530 name: test_zext_s64_to_s1024
531 body: |
532   bb.0:
533     liveins: $vgpr0_vgpr1
535     ; CHECK-LABEL: name: test_zext_s64_to_s1024
536     ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
537     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
538     ; 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)
539     ; CHECK-NEXT: S_ENDPGM 0, implicit [[MV]](s1024)
540     %0:_(s64) = COPY $vgpr0_vgpr1
541     %1:_(s1024) = G_ZEXT %0
542     S_ENDPGM 0, implicit %1
546 name: test_zext_s96_to_s128
547 body: |
548   bb.0:
549     liveins: $vgpr0_vgpr1_vgpr2
551     ; CHECK-LABEL: name: test_zext_s96_to_s128
552     ; CHECK: [[COPY:%[0-9]+]]:_(s96) = COPY $vgpr0_vgpr1_vgpr2
553     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](s96)
554     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
555     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[UV]](s32), [[UV1]](s32)
556     ; CHECK-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[UV2]](s32), [[C]](s32)
557     ; CHECK-NEXT: [[MV2:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[MV]](s64), [[MV1]](s64)
558     ; CHECK-NEXT: S_ENDPGM 0, implicit [[MV2]](s128)
559     %0:_(s96) = COPY $vgpr0_vgpr1_vgpr2
560     %1:_(s128) = G_ZEXT %0
561     S_ENDPGM 0, implicit %1
565 name: test_zext_s128_to_s256
566 body: |
567   bb.0:
568     liveins: $vgpr0_vgpr1_vgpr2_vgpr3
570     ; CHECK-LABEL: name: test_zext_s128_to_s256
571     ; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
572     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](s128)
573     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
574     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s256) = G_MERGE_VALUES [[UV]](s64), [[UV1]](s64), [[C]](s64), [[C]](s64)
575     ; CHECK-NEXT: S_ENDPGM 0, implicit [[MV]](s256)
576     %0:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
577     %1:_(s256) = G_ZEXT %0
578     S_ENDPGM 0, implicit %1
582 name: test_zext_s32_to_s88
583 body: |
584   bb.0:
585     liveins: $vgpr0
587     ; CHECK-LABEL: name: test_zext_s32_to_s88
588     ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
589     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 8
590     ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C]](s32)
591     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
592     ; CHECK-NEXT: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C1]](s32)
593     ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 24
594     ; CHECK-NEXT: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C2]](s32)
595     ; CHECK-NEXT: [[C3:%[0-9]+]]:_(s16) = G_CONSTANT i16 255
596     ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
597     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s16) = G_AND [[TRUNC]], [[C3]]
598     ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR]](s32)
599     ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s16) = G_AND [[TRUNC1]], [[C3]]
600     ; CHECK-NEXT: [[C4:%[0-9]+]]:_(s16) = G_CONSTANT i16 8
601     ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s16) = G_SHL [[AND1]], [[C4]](s16)
602     ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s16) = G_OR [[AND]], [[SHL]]
603     ; CHECK-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR1]](s32)
604     ; CHECK-NEXT: [[AND2:%[0-9]+]]:_(s16) = G_AND [[TRUNC2]], [[C3]]
605     ; CHECK-NEXT: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR2]](s32)
606     ; CHECK-NEXT: [[AND3:%[0-9]+]]:_(s16) = G_AND [[TRUNC3]], [[C3]]
607     ; CHECK-NEXT: [[SHL1:%[0-9]+]]:_(s16) = G_SHL [[AND3]], [[C4]](s16)
608     ; CHECK-NEXT: [[OR1:%[0-9]+]]:_(s16) = G_OR [[AND2]], [[SHL1]]
609     ; CHECK-NEXT: [[C5:%[0-9]+]]:_(s16) = G_CONSTANT i16 0
610     ; CHECK-NEXT: [[AND4:%[0-9]+]]:_(s16) = G_AND [[C5]], [[C3]]
611     ; CHECK-NEXT: [[SHL2:%[0-9]+]]:_(s16) = G_SHL [[AND4]], [[C4]](s16)
612     ; CHECK-NEXT: [[OR2:%[0-9]+]]:_(s16) = G_OR [[AND4]], [[SHL2]]
613     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s16) = COPY [[OR2]](s16)
614     ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[OR]](s16)
615     ; CHECK-NEXT: [[ZEXT1:%[0-9]+]]:_(s32) = G_ZEXT [[OR1]](s16)
616     ; CHECK-NEXT: [[SHL3:%[0-9]+]]:_(s32) = G_SHL [[ZEXT1]], [[C1]](s32)
617     ; CHECK-NEXT: [[OR3:%[0-9]+]]:_(s32) = G_OR [[ZEXT]], [[SHL3]]
618     ; CHECK-NEXT: [[ZEXT2:%[0-9]+]]:_(s32) = G_ZEXT [[OR2]](s16)
619     ; CHECK-NEXT: [[ZEXT3:%[0-9]+]]:_(s32) = G_ZEXT [[COPY1]](s16)
620     ; CHECK-NEXT: [[SHL4:%[0-9]+]]:_(s32) = G_SHL [[ZEXT3]], [[C1]](s32)
621     ; CHECK-NEXT: [[OR4:%[0-9]+]]:_(s32) = G_OR [[ZEXT2]], [[SHL4]]
622     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[OR3]](s32), [[OR4]](s32)
623     ; CHECK-NEXT: [[C6:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
624     ; 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)
625     ; CHECK-NEXT: [[TRUNC4:%[0-9]+]]:_(s88) = G_TRUNC [[MV1]](s704)
626     ; CHECK-NEXT: S_ENDPGM 0, implicit [[TRUNC4]](s88)
627     %0:_(s32) = COPY $vgpr0
628     %1:_(s88) = G_ZEXT %0
629     S_ENDPGM 0, implicit %1
632 # The instruction count blows up for this and takes too long to
633 # generate checks. This fails on a G_MERGE_VALUES to s4160
635 # ---
636 # name: test_zext_s32_to_s65
637 # body: |
638 #   bb.0:
639 #     liveins: $vgpr0
641 #     %0:_(s32) = COPY $vgpr0
642 #     %1:_(s65) = G_ZEXT %0
643 #     S_ENDPGM 0, implicit %1
644 # ...
647 name: test_zext_s2_to_s112
648 body: |
649   bb.0:
650     liveins: $vgpr0
652     ; CHECK-LABEL: name: test_zext_s2_to_s112
653     ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
654     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 3
655     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
656     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[C]](s64)
657     ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
658     ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[UV]], [[C2]](s32)
659     ; CHECK-NEXT: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[UV1]], [[C2]](s32)
660     ; CHECK-NEXT: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[C1]](s64)
661     ; CHECK-NEXT: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[UV2]], [[C2]](s32)
662     ; CHECK-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
663     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[UV]], [[C3]]
664     ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[LSHR]], [[C3]]
665     ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C2]](s32)
666     ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]]
667     ; CHECK-NEXT: [[AND2:%[0-9]+]]:_(s32) = G_AND [[UV1]], [[C3]]
668     ; CHECK-NEXT: [[AND3:%[0-9]+]]:_(s32) = G_AND [[LSHR1]], [[C3]]
669     ; CHECK-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[AND3]], [[C2]](s32)
670     ; CHECK-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[AND2]], [[SHL1]]
671     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[OR]](s32), [[OR1]](s32)
672     ; CHECK-NEXT: [[AND4:%[0-9]+]]:_(s32) = G_AND [[UV2]], [[C3]]
673     ; CHECK-NEXT: [[AND5:%[0-9]+]]:_(s32) = G_AND [[LSHR2]], [[C3]]
674     ; CHECK-NEXT: [[SHL2:%[0-9]+]]:_(s32) = G_SHL [[AND5]], [[C2]](s32)
675     ; CHECK-NEXT: [[OR2:%[0-9]+]]:_(s32) = G_OR [[AND4]], [[SHL2]]
676     ; CHECK-NEXT: [[AND6:%[0-9]+]]:_(s32) = G_AND [[UV3]], [[C3]]
677     ; CHECK-NEXT: [[C4:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
678     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY [[C4]](s32)
679     ; CHECK-NEXT: [[SHL3:%[0-9]+]]:_(s32) = G_SHL [[COPY1]], [[C2]](s32)
680     ; CHECK-NEXT: [[OR3:%[0-9]+]]:_(s32) = G_OR [[AND6]], [[SHL3]]
681     ; CHECK-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[OR2]](s32), [[OR3]](s32)
682     ; CHECK-NEXT: [[LSHR3:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C2]](s32)
683     ; CHECK-NEXT: [[AND7:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C3]]
684     ; CHECK-NEXT: [[AND8:%[0-9]+]]:_(s32) = G_AND [[LSHR3]], [[C3]]
685     ; CHECK-NEXT: [[SHL4:%[0-9]+]]:_(s32) = G_SHL [[AND8]], [[C2]](s32)
686     ; CHECK-NEXT: [[OR4:%[0-9]+]]:_(s32) = G_OR [[AND7]], [[SHL4]]
687     ; CHECK-NEXT: [[SHL5:%[0-9]+]]:_(s32) = G_SHL [[C4]], [[C2]](s32)
688     ; CHECK-NEXT: [[OR5:%[0-9]+]]:_(s32) = G_OR [[C4]], [[SHL5]]
689     ; CHECK-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[OR4]](s32), [[OR5]](s32)
690     ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s64) = G_IMPLICIT_DEF
691     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY [[MV2]](s64)
692     ; CHECK-NEXT: [[EXTRACT:%[0-9]+]]:_(s48) = G_EXTRACT [[DEF]](s64), 0
693     ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(s64) = COPY [[MV]](s64)
694     ; CHECK-NEXT: [[EXTRACT1:%[0-9]+]]:_(s48) = G_EXTRACT [[MV1]](s64), 0
695     ; CHECK-NEXT: [[AND9:%[0-9]+]]:_(s64) = G_AND [[COPY2]], [[COPY3]]
696     ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[EXTRACT]](s48)
697     ; CHECK-NEXT: [[ANYEXT1:%[0-9]+]]:_(s64) = G_ANYEXT [[EXTRACT1]](s48)
698     ; CHECK-NEXT: [[AND10:%[0-9]+]]:_(s64) = G_AND [[ANYEXT]], [[ANYEXT1]]
699     ; CHECK-NEXT: [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[AND9]](s64)
700     ; CHECK-NEXT: [[LSHR4:%[0-9]+]]:_(s32) = G_LSHR [[UV4]], [[C2]](s32)
701     ; CHECK-NEXT: [[LSHR5:%[0-9]+]]:_(s32) = G_LSHR [[UV5]], [[C2]](s32)
702     ; CHECK-NEXT: [[UV6:%[0-9]+]]:_(s32), [[UV7:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[AND10]](s64)
703     ; CHECK-NEXT: [[LSHR6:%[0-9]+]]:_(s32) = G_LSHR [[UV6]], [[C2]](s32)
704     ; CHECK-NEXT: [[DEF1:%[0-9]+]]:_(s64) = G_IMPLICIT_DEF
705     ; CHECK-NEXT: [[UV8:%[0-9]+]]:_(s32), [[UV9:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[DEF1]](s64)
706     ; CHECK-NEXT: [[LSHR7:%[0-9]+]]:_(s32) = G_LSHR [[UV8]], [[C2]](s32)
707     ; CHECK-NEXT: [[AND11:%[0-9]+]]:_(s32) = G_AND [[UV4]], [[C3]]
708     ; CHECK-NEXT: [[AND12:%[0-9]+]]:_(s32) = G_AND [[LSHR4]], [[C3]]
709     ; CHECK-NEXT: [[SHL6:%[0-9]+]]:_(s32) = G_SHL [[AND12]], [[C2]](s32)
710     ; CHECK-NEXT: [[OR6:%[0-9]+]]:_(s32) = G_OR [[AND11]], [[SHL6]]
711     ; CHECK-NEXT: [[AND13:%[0-9]+]]:_(s32) = G_AND [[UV5]], [[C3]]
712     ; CHECK-NEXT: [[AND14:%[0-9]+]]:_(s32) = G_AND [[LSHR5]], [[C3]]
713     ; CHECK-NEXT: [[SHL7:%[0-9]+]]:_(s32) = G_SHL [[AND14]], [[C2]](s32)
714     ; CHECK-NEXT: [[OR7:%[0-9]+]]:_(s32) = G_OR [[AND13]], [[SHL7]]
715     ; CHECK-NEXT: [[MV3:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[OR6]](s32), [[OR7]](s32)
716     ; CHECK-NEXT: [[AND15:%[0-9]+]]:_(s32) = G_AND [[UV6]], [[C3]]
717     ; CHECK-NEXT: [[AND16:%[0-9]+]]:_(s32) = G_AND [[LSHR6]], [[C3]]
718     ; CHECK-NEXT: [[SHL8:%[0-9]+]]:_(s32) = G_SHL [[AND16]], [[C2]](s32)
719     ; CHECK-NEXT: [[OR8:%[0-9]+]]:_(s32) = G_OR [[AND15]], [[SHL8]]
720     ; CHECK-NEXT: [[AND17:%[0-9]+]]:_(s32) = G_AND [[UV7]], [[C3]]
721     ; CHECK-NEXT: [[OR9:%[0-9]+]]:_(s32) = G_OR [[AND17]], [[SHL3]]
722     ; CHECK-NEXT: [[MV4:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[OR8]](s32), [[OR9]](s32)
723     ; CHECK-NEXT: [[AND18:%[0-9]+]]:_(s32) = G_AND [[UV8]], [[C3]]
724     ; CHECK-NEXT: [[SHL9:%[0-9]+]]:_(s32) = G_SHL [[AND18]], [[C2]](s32)
725     ; CHECK-NEXT: [[OR10:%[0-9]+]]:_(s32) = G_OR [[COPY1]], [[SHL9]]
726     ; CHECK-NEXT: [[AND19:%[0-9]+]]:_(s32) = G_AND [[LSHR7]], [[C3]]
727     ; CHECK-NEXT: [[AND20:%[0-9]+]]:_(s32) = G_AND [[UV9]], [[C3]]
728     ; CHECK-NEXT: [[SHL10:%[0-9]+]]:_(s32) = G_SHL [[AND20]], [[C2]](s32)
729     ; CHECK-NEXT: [[OR11:%[0-9]+]]:_(s32) = G_OR [[AND19]], [[SHL10]]
730     ; CHECK-NEXT: [[MV5:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[OR10]](s32), [[OR11]](s32)
731     ; CHECK-NEXT: [[SHL11:%[0-9]+]]:_(s32) = G_SHL [[AND19]], [[C2]](s32)
732     ; CHECK-NEXT: [[OR12:%[0-9]+]]:_(s32) = G_OR [[AND18]], [[SHL11]]
733     ; CHECK-NEXT: [[OR13:%[0-9]+]]:_(s32) = G_OR [[AND20]], [[SHL9]]
734     ; CHECK-NEXT: [[MV6:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[OR12]](s32), [[OR13]](s32)
735     ; CHECK-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY [[OR11]](s32)
736     ; CHECK-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY [[OR12]](s32)
737     ; CHECK-NEXT: [[MV7:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)
738     ; CHECK-NEXT: [[OR14:%[0-9]+]]:_(s32) = G_OR [[AND20]], [[SHL3]]
739     ; CHECK-NEXT: [[OR15:%[0-9]+]]:_(s32) = G_OR [[COPY1]], [[SHL3]]
740     ; CHECK-NEXT: [[MV8:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[OR14]](s32), [[OR15]](s32)
741     ; CHECK-NEXT: [[MV9:%[0-9]+]]:_(s384) = G_MERGE_VALUES [[MV3]](s64), [[MV4]](s64), [[MV5]](s64), [[MV6]](s64), [[MV7]](s64), [[MV8]](s64)
742     ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s112) = G_TRUNC [[MV9]](s384)
743     ; CHECK-NEXT: S_ENDPGM 0, implicit [[TRUNC]](s112)
744     %0:_(s32) = COPY $vgpr0
745     %1:_(s2) = G_TRUNC %0
746     %2:_(s112) = G_ZEXT %1
747     S_ENDPGM 0, implicit %2
751 name: test_zext_s112_to_s128
752 body: |
753   bb.0:
754     liveins: $vgpr0_vgpr1_vgpr2_vgpr3
755     ; CHECK-LABEL: name: test_zext_s112_to_s128
756     ; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
757     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
758     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 281474976710655
759     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](s128)
760     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[UV]], [[C]]
761     ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s64) = G_AND [[UV1]], [[C1]]
762     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[AND]](s64), [[AND1]](s64)
763     ; CHECK-NEXT: S_ENDPGM 0, implicit [[MV]](s128)
764     %0:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
765     %1:_(s112) = G_TRUNC %0
766     %2:_(s128) = G_ZEXT %1
767     S_ENDPGM 0, implicit %2