Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / GlobalISel / legalize-sext.mir
blob847ffc8aadc073bb20dcf4b143259caef0ad794f
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -O0 -mtriple=amdgcn-mesa-mesa3d -mcpu=fiji -run-pass=legalizer %s -o - | FileCheck %s
4 ---
5 name: test_sext_s32_to_s64
6 body: |
7   bb.0:
8     liveins: $vgpr0
10     ; CHECK-LABEL: name: test_sext_s32_to_s64
11     ; CHECK: liveins: $vgpr0
12     ; CHECK-NEXT: {{  $}}
13     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
14     ; CHECK-NEXT: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[COPY]](s32)
15     ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[SEXT]](s64)
16     %0:_(s32) = COPY $vgpr0
17     %1:_(s64) = G_SEXT %0
18     $vgpr0_vgpr1 = COPY %1
19 ...
21 ---
22 name: test_sext_s16_to_s64
23 body: |
24   bb.0:
25     liveins: $vgpr0
27     ; CHECK-LABEL: name: test_sext_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: [[SEXT_INREG:%[0-9]+]]:_(s64) = G_SEXT_INREG [[ANYEXT]], 16
33     ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[SEXT_INREG]](s64)
34     %0:_(s32) = COPY $vgpr0
35     %1:_(s16) = G_TRUNC %0
36     %2:_(s64) = G_SEXT %1
37     $vgpr0_vgpr1 = COPY %2
38 ...
40 ---
41 name: test_sext_s16_to_s32
42 body: |
43   bb.0:
44     liveins: $vgpr0
46     ; CHECK-LABEL: name: test_sext_s16_to_s32
47     ; CHECK: liveins: $vgpr0
48     ; CHECK-NEXT: {{  $}}
49     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
50     ; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY]], 16
51     ; CHECK-NEXT: $vgpr0 = COPY [[SEXT_INREG]](s32)
52     %0:_(s32) = COPY $vgpr0
53     %1:_(s16) = G_TRUNC %0
54     %2:_(s32) = G_SEXT %1
55     $vgpr0 = COPY %2
56 ...
58 ---
59 name: test_sext_s24_to_s32
60 body: |
61   bb.0:
62     liveins: $vgpr0
64     ; CHECK-LABEL: name: test_sext_s24_to_s32
65     ; CHECK: liveins: $vgpr0
66     ; CHECK-NEXT: {{  $}}
67     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
68     ; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY]], 24
69     ; CHECK-NEXT: $vgpr0 = COPY [[SEXT_INREG]](s32)
70     %0:_(s32) = COPY $vgpr0
71     %1:_(s24) = G_TRUNC %0
72     %2:_(s32) = G_SEXT %1
73     $vgpr0 = COPY %2
74 ...
76 ---
77 name: test_sext_i1_to_s32
78 body: |
79   bb.0:
80     liveins: $vgpr0
82     ; CHECK-LABEL: name: test_sext_i1_to_s32
83     ; CHECK: liveins: $vgpr0
84     ; CHECK-NEXT: {{  $}}
85     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
86     ; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY]], 1
87     ; CHECK-NEXT: $vgpr0 = COPY [[SEXT_INREG]](s32)
88     %0:_(s32) = COPY $vgpr0
89     %1:_(s1) = G_TRUNC %0
90     %2:_(s32) = G_SEXT %1
91     $vgpr0 = COPY %2
92 ...
94 ---
95 name: test_sext_v2s16_to_v2s32
96 body: |
97   bb.0:
98     liveins: $vgpr0
100     ; CHECK-LABEL: name: test_sext_v2s16_to_v2s32
101     ; CHECK: liveins: $vgpr0
102     ; CHECK-NEXT: {{  $}}
103     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
104     ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>)
105     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
106     ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)
107     ; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[BITCAST]], 16
108     ; CHECK-NEXT: [[SEXT_INREG1:%[0-9]+]]:_(s32) = G_SEXT_INREG [[LSHR]], 16
109     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[SEXT_INREG]](s32), [[SEXT_INREG1]](s32)
110     ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>)
111     %0:_(<2 x s16>) = COPY $vgpr0
112     %1:_(<2 x s32>) = G_SEXT %0
113     $vgpr0_vgpr1 = COPY %1
117 name: test_sext_v3s16_to_v3s32
118 body: |
119   bb.0:
120     liveins: $vgpr0_vgpr1
122     ; CHECK-LABEL: name: test_sext_v3s16_to_v3s32
123     ; CHECK: liveins: $vgpr0_vgpr1
124     ; CHECK-NEXT: {{  $}}
125     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr0_vgpr1
126     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>)
127     ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[UV]](<2 x s16>)
128     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
129     ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)
130     ; CHECK-NEXT: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[UV1]](<2 x s16>)
131     ; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[BITCAST]], 16
132     ; CHECK-NEXT: [[SEXT_INREG1:%[0-9]+]]:_(s32) = G_SEXT_INREG [[LSHR]], 16
133     ; CHECK-NEXT: [[SEXT_INREG2:%[0-9]+]]:_(s32) = G_SEXT_INREG [[BITCAST1]], 16
134     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[SEXT_INREG]](s32), [[SEXT_INREG1]](s32), [[SEXT_INREG2]](s32)
135     ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2 = COPY [[BUILD_VECTOR]](<3 x s32>)
136     %0:_(<4 x s16>) = COPY $vgpr0_vgpr1
137     %1:_(<3 x s16>) = G_EXTRACT %0, 0
138     %2:_(<3 x s32>) = G_SEXT %1
139     $vgpr0_vgpr1_vgpr2 = COPY %2
143 name: test_sext_v4s16_to_v4s32
144 body: |
145   bb.0:
146     liveins: $vgpr0_vgpr1
148     ; CHECK-LABEL: name: test_sext_v4s16_to_v4s32
149     ; CHECK: liveins: $vgpr0_vgpr1
150     ; CHECK-NEXT: {{  $}}
151     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr0_vgpr1
152     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>)
153     ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[UV]](<2 x s16>)
154     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
155     ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)
156     ; CHECK-NEXT: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[UV1]](<2 x s16>)
157     ; CHECK-NEXT: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32)
158     ; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[BITCAST]], 16
159     ; CHECK-NEXT: [[SEXT_INREG1:%[0-9]+]]:_(s32) = G_SEXT_INREG [[LSHR]], 16
160     ; CHECK-NEXT: [[SEXT_INREG2:%[0-9]+]]:_(s32) = G_SEXT_INREG [[BITCAST1]], 16
161     ; CHECK-NEXT: [[SEXT_INREG3:%[0-9]+]]:_(s32) = G_SEXT_INREG [[LSHR1]], 16
162     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[SEXT_INREG]](s32), [[SEXT_INREG1]](s32), [[SEXT_INREG2]](s32), [[SEXT_INREG3]](s32)
163     ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<4 x s32>)
164     %0:_(<4 x s16>) = COPY $vgpr0_vgpr1
165     %1:_(<4 x s32>) = G_SEXT %0
166     $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %1
170 name: test_sext_v2s32_to_v2s64
171 body: |
172   bb.0:
173     liveins: $vgpr0_vgpr1
175     ; CHECK-LABEL: name: test_sext_v2s32_to_v2s64
176     ; CHECK: liveins: $vgpr0_vgpr1
177     ; CHECK-NEXT: {{  $}}
178     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
179     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
180     ; CHECK-NEXT: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[UV]](s32)
181     ; CHECK-NEXT: [[SEXT1:%[0-9]+]]:_(s64) = G_SEXT [[UV1]](s32)
182     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[SEXT]](s64), [[SEXT1]](s64)
183     ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<2 x s64>)
184     %0:_(<2 x s32>) = COPY $vgpr0_vgpr1
185     %1:_(<2 x s64>) = G_SEXT %0
186     $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %1
190 name: test_sext_v3s32_to_v3s64
191 body: |
192   bb.0:
193     liveins: $vgpr0_vgpr1_vgpr2
195     ; CHECK-LABEL: name: test_sext_v3s32_to_v3s64
196     ; CHECK: liveins: $vgpr0_vgpr1_vgpr2
197     ; CHECK-NEXT: {{  $}}
198     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2
199     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<3 x s32>)
200     ; CHECK-NEXT: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[UV]](s32)
201     ; CHECK-NEXT: [[SEXT1:%[0-9]+]]:_(s64) = G_SEXT [[UV1]](s32)
202     ; CHECK-NEXT: [[SEXT2:%[0-9]+]]:_(s64) = G_SEXT [[UV2]](s32)
203     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[SEXT]](s64), [[SEXT1]](s64), [[SEXT2]](s64)
204     ; CHECK-NEXT: S_NOP 0, implicit [[BUILD_VECTOR]](<3 x s64>)
205     %0:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2
206     %1:_(<3 x s64>) = G_SEXT %0
207     S_NOP 0, implicit %1
212 name: test_sext_v4s32_to_v4s64
213 body: |
214   bb.0:
215     liveins: $vgpr0_vgpr1_vgpr2_vgpr3
217     ; CHECK-LABEL: name: test_sext_v4s32_to_v4s64
218     ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3
219     ; CHECK-NEXT: {{  $}}
220     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
221     ; 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>)
222     ; CHECK-NEXT: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[UV]](s32)
223     ; CHECK-NEXT: [[SEXT1:%[0-9]+]]:_(s64) = G_SEXT [[UV1]](s32)
224     ; CHECK-NEXT: [[SEXT2:%[0-9]+]]:_(s64) = G_SEXT [[UV2]](s32)
225     ; CHECK-NEXT: [[SEXT3:%[0-9]+]]:_(s64) = G_SEXT [[UV3]](s32)
226     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[SEXT]](s64), [[SEXT1]](s64), [[SEXT2]](s64), [[SEXT3]](s64)
227     ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 = COPY [[BUILD_VECTOR]](<4 x s64>)
228     %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
229     %1:_(<4 x s64>) = G_SEXT %0
230     $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 = COPY %1
234 name: test_sext_s8_to_s16
235 body: |
236   bb.0:
237     liveins: $vgpr0
239     ; CHECK-LABEL: name: test_sext_s8_to_s16
240     ; CHECK: liveins: $vgpr0
241     ; CHECK-NEXT: {{  $}}
242     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
243     ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
244     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 8
245     ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s16) = G_SHL [[TRUNC]], [[C]](s16)
246     ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s16) = G_ASHR [[SHL]], [[C]](s16)
247     ; CHECK-NEXT: S_ENDPGM 0, implicit [[ASHR]](s16)
248     %0:_(s32) = COPY $vgpr0
249     %1:_(s8) = G_TRUNC %0
250     %2:_(s16) = G_SEXT %1
251     S_ENDPGM 0, implicit %2
255 name: test_sext_s8_to_s24
256 body: |
257   bb.0:
258     liveins: $vgpr0
260     ; CHECK-LABEL: name: test_sext_s8_to_s24
261     ; CHECK: liveins: $vgpr0
262     ; CHECK-NEXT: {{  $}}
263     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
264     ; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY]], 8
265     ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s24) = G_TRUNC [[SEXT_INREG]](s32)
266     ; CHECK-NEXT: S_ENDPGM 0, implicit [[TRUNC]](s24)
267     %0:_(s32) = COPY $vgpr0
268     %1:_(s8) = G_TRUNC %0
269     %2:_(s24) = G_SEXT %1
270     S_ENDPGM 0, implicit %2
274 name: test_sext_s7_to_s32
275 body: |
276   bb.0:
277     liveins: $vgpr0
279     ; CHECK-LABEL: name: test_sext_s7_to_s32
280     ; CHECK: liveins: $vgpr0
281     ; CHECK-NEXT: {{  $}}
282     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
283     ; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY]], 7
284     ; CHECK-NEXT: S_ENDPGM 0, implicit [[SEXT_INREG]](s32)
285     %0:_(s32) = COPY $vgpr0
286     %1:_(s7) = G_TRUNC %0
287     %2:_(s32) = G_SEXT %1
288     S_ENDPGM 0, implicit %2
292 name: test_sext_s8_to_s32
293 body: |
294   bb.0:
295     liveins: $vgpr0
297     ; CHECK-LABEL: name: test_sext_s8_to_s32
298     ; CHECK: liveins: $vgpr0
299     ; CHECK-NEXT: {{  $}}
300     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
301     ; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY]], 8
302     ; CHECK-NEXT: S_ENDPGM 0, implicit [[SEXT_INREG]](s32)
303     %0:_(s32) = COPY $vgpr0
304     %1:_(s8) = G_TRUNC %0
305     %2:_(s32) = G_SEXT %1
306     S_ENDPGM 0, implicit %2
310 name: test_sext_s32_to_s96
311 body: |
312   bb.0:
313     liveins: $vgpr0
315     ; CHECK-LABEL: name: test_sext_s32_to_s96
316     ; CHECK: liveins: $vgpr0
317     ; CHECK-NEXT: {{  $}}
318     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
319     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 31
320     ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[COPY]], [[C]](s32)
321     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[ASHR]](s32)
322     ; CHECK-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[ASHR]](s32), [[ASHR]](s32)
323     ; CHECK-NEXT: [[MV2:%[0-9]+]]:_(s192) = G_MERGE_VALUES [[MV]](s64), [[MV1]](s64), [[MV1]](s64)
324     ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s96) = G_TRUNC [[MV2]](s192)
325     ; CHECK-NEXT: S_ENDPGM 0, implicit [[TRUNC]](s96)
326     %0:_(s32) = COPY $vgpr0
327     %1:_(s96) = G_SEXT %0
328     S_ENDPGM 0, implicit %1
332 name: test_sext_s32_to_s128
333 body: |
334   bb.0:
335     liveins: $vgpr0
337     ; CHECK-LABEL: name: test_sext_s32_to_s128
338     ; CHECK: liveins: $vgpr0
339     ; CHECK-NEXT: {{  $}}
340     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
341     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 31
342     ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[COPY]], [[C]](s32)
343     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[ASHR]](s32)
344     ; CHECK-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[ASHR]](s32), [[ASHR]](s32)
345     ; CHECK-NEXT: [[MV2:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[MV]](s64), [[MV1]](s64)
346     ; CHECK-NEXT: S_ENDPGM 0, implicit [[MV2]](s128)
347     %0:_(s32) = COPY $vgpr0
348     %1:_(s128) = G_SEXT %0
349     S_ENDPGM 0, implicit %1
353 name: test_sext_s32_to_s160
354 body: |
355   bb.0:
356     liveins: $vgpr0
358     ; CHECK-LABEL: name: test_sext_s32_to_s160
359     ; CHECK: liveins: $vgpr0
360     ; CHECK-NEXT: {{  $}}
361     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
362     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 31
363     ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[COPY]], [[C]](s32)
364     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[ASHR]](s32)
365     ; CHECK-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[ASHR]](s32), [[ASHR]](s32)
366     ; CHECK-NEXT: [[MV2:%[0-9]+]]:_(s320) = G_MERGE_VALUES [[MV]](s64), [[MV1]](s64), [[MV1]](s64), [[MV1]](s64), [[MV1]](s64)
367     ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s160) = G_TRUNC [[MV2]](s320)
368     ; CHECK-NEXT: S_ENDPGM 0, implicit [[TRUNC]](s160)
369     %0:_(s32) = COPY $vgpr0
370     %1:_(s160) = G_SEXT %0
371     S_ENDPGM 0, implicit %1
375 name: test_sext_s32_to_s192
376 body: |
377   bb.0:
378     liveins: $vgpr0
380     ; CHECK-LABEL: name: test_sext_s32_to_s192
381     ; CHECK: liveins: $vgpr0
382     ; CHECK-NEXT: {{  $}}
383     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
384     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 31
385     ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[COPY]], [[C]](s32)
386     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[ASHR]](s32)
387     ; CHECK-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[ASHR]](s32), [[ASHR]](s32)
388     ; CHECK-NEXT: [[MV2:%[0-9]+]]:_(s192) = G_MERGE_VALUES [[MV]](s64), [[MV1]](s64), [[MV1]](s64)
389     ; CHECK-NEXT: S_ENDPGM 0, implicit [[MV2]](s192)
390     %0:_(s32) = COPY $vgpr0
391     %1:_(s192) = G_SEXT %0
392     S_ENDPGM 0, implicit %1
396 name: test_sext_s32_to_s224
397 body: |
398   bb.0:
399     liveins: $vgpr0
401     ; CHECK-LABEL: name: test_sext_s32_to_s224
402     ; CHECK: liveins: $vgpr0
403     ; CHECK-NEXT: {{  $}}
404     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
405     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 31
406     ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[COPY]], [[C]](s32)
407     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[ASHR]](s32)
408     ; CHECK-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[ASHR]](s32), [[ASHR]](s32)
409     ; CHECK-NEXT: [[MV2:%[0-9]+]]:_(s448) = G_MERGE_VALUES [[MV]](s64), [[MV1]](s64), [[MV1]](s64), [[MV1]](s64), [[MV1]](s64), [[MV1]](s64), [[MV1]](s64)
410     ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s224) = G_TRUNC [[MV2]](s448)
411     ; CHECK-NEXT: S_ENDPGM 0, implicit [[TRUNC]](s224)
412     %0:_(s32) = COPY $vgpr0
413     %1:_(s224) = G_SEXT %0
414     S_ENDPGM 0, implicit %1
418 name: test_sext_s32_to_s256
419 body: |
420   bb.0:
421     liveins: $vgpr0
423     ; CHECK-LABEL: name: test_sext_s32_to_s256
424     ; CHECK: liveins: $vgpr0
425     ; CHECK-NEXT: {{  $}}
426     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
427     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 31
428     ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[COPY]], [[C]](s32)
429     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[ASHR]](s32)
430     ; CHECK-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[ASHR]](s32), [[ASHR]](s32)
431     ; CHECK-NEXT: [[MV2:%[0-9]+]]:_(s256) = G_MERGE_VALUES [[MV]](s64), [[MV1]](s64), [[MV1]](s64), [[MV1]](s64)
432     ; CHECK-NEXT: S_ENDPGM 0, implicit [[MV2]](s256)
433     %0:_(s32) = COPY $vgpr0
434     %1:_(s256) = G_SEXT %0
435     S_ENDPGM 0, implicit %1
439 name: test_sext_s32_to_s512
440 body: |
441   bb.0:
442     liveins: $vgpr0
444     ; CHECK-LABEL: name: test_sext_s32_to_s512
445     ; CHECK: liveins: $vgpr0
446     ; CHECK-NEXT: {{  $}}
447     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
448     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 31
449     ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[COPY]], [[C]](s32)
450     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[ASHR]](s32)
451     ; CHECK-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[ASHR]](s32), [[ASHR]](s32)
452     ; CHECK-NEXT: [[MV2:%[0-9]+]]:_(s512) = G_MERGE_VALUES [[MV]](s64), [[MV1]](s64), [[MV1]](s64), [[MV1]](s64), [[MV1]](s64), [[MV1]](s64), [[MV1]](s64), [[MV1]](s64)
453     ; CHECK-NEXT: S_ENDPGM 0, implicit [[MV2]](s512)
454     %0:_(s32) = COPY $vgpr0
455     %1:_(s512) = G_SEXT %0
456     S_ENDPGM 0, implicit %1
460 name: test_sext_s32_to_s992
461 body: |
462   bb.0:
463     liveins: $vgpr0
465     ; CHECK-LABEL: name: test_sext_s32_to_s992
466     ; CHECK: liveins: $vgpr0
467     ; CHECK-NEXT: {{  $}}
468     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
469     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 31
470     ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[COPY]], [[C]](s32)
471     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[ASHR]](s32)
472     ; CHECK-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[ASHR]](s32), [[ASHR]](s32)
473     ; CHECK-NEXT: [[MV2:%[0-9]+]]:_(s448) = G_MERGE_VALUES [[MV]](s64), [[MV1]](s64), [[MV1]](s64), [[MV1]](s64), [[MV1]](s64), [[MV1]](s64), [[MV1]](s64)
474     ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s224) = G_TRUNC [[MV2]](s448)
475     ; CHECK-NEXT: S_ENDPGM 0, implicit [[TRUNC]](s224)
476     %0:_(s32) = COPY $vgpr0
477     %1:_(s224) = G_SEXT %0
478     S_ENDPGM 0, implicit %1
483 name: test_sext_s32_to_s1024
484 body: |
485   bb.0:
486     liveins: $vgpr0
488     ; CHECK-LABEL: name: test_sext_s32_to_s1024
489     ; CHECK: liveins: $vgpr0
490     ; CHECK-NEXT: {{  $}}
491     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
492     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 31
493     ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[COPY]], [[C]](s32)
494     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[ASHR]](s32)
495     ; CHECK-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[ASHR]](s32), [[ASHR]](s32)
496     ; CHECK-NEXT: [[MV2:%[0-9]+]]:_(s1024) = G_MERGE_VALUES [[MV]](s64), [[MV1]](s64), [[MV1]](s64), [[MV1]](s64), [[MV1]](s64), [[MV1]](s64), [[MV1]](s64), [[MV1]](s64), [[MV1]](s64), [[MV1]](s64), [[MV1]](s64), [[MV1]](s64), [[MV1]](s64), [[MV1]](s64), [[MV1]](s64), [[MV1]](s64)
497     ; CHECK-NEXT: S_ENDPGM 0, implicit [[MV2]](s1024)
498     %0:_(s32) = COPY $vgpr0
499     %1:_(s1024) = G_SEXT %0
500     S_ENDPGM 0, implicit %1
504 name: test_sext_s64_to_s128
505 body: |
506   bb.0:
507     liveins: $vgpr0_vgpr1
509     ; CHECK-LABEL: name: test_sext_s64_to_s128
510     ; CHECK: liveins: $vgpr0_vgpr1
511     ; CHECK-NEXT: {{  $}}
512     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
513     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 63
514     ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s64) = G_ASHR [[COPY]], [[C]](s32)
515     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[COPY]](s64), [[ASHR]](s64)
516     ; CHECK-NEXT: S_ENDPGM 0, implicit [[MV]](s128)
517     %0:_(s64) = COPY $vgpr0_vgpr1
518     %1:_(s128) = G_SEXT %0
519     S_ENDPGM 0, implicit %1
523 name: test_sext_s64_to_s192
524 body: |
525   bb.0:
526     liveins: $vgpr0_vgpr1
528     ; CHECK-LABEL: name: test_sext_s64_to_s192
529     ; CHECK: liveins: $vgpr0_vgpr1
530     ; CHECK-NEXT: {{  $}}
531     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
532     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 63
533     ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s64) = G_ASHR [[COPY]], [[C]](s32)
534     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s192) = G_MERGE_VALUES [[COPY]](s64), [[ASHR]](s64), [[ASHR]](s64)
535     ; CHECK-NEXT: S_ENDPGM 0, implicit [[MV]](s192)
536     %0:_(s64) = COPY $vgpr0_vgpr1
537     %1:_(s192) = G_SEXT %0
538     S_ENDPGM 0, implicit %1
542 name: test_sext_s64_to_s256
543 body: |
544   bb.0:
545     liveins: $vgpr0_vgpr1
547     ; CHECK-LABEL: name: test_sext_s64_to_s256
548     ; CHECK: liveins: $vgpr0_vgpr1
549     ; CHECK-NEXT: {{  $}}
550     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
551     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 63
552     ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s64) = G_ASHR [[COPY]], [[C]](s32)
553     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s256) = G_MERGE_VALUES [[COPY]](s64), [[ASHR]](s64), [[ASHR]](s64), [[ASHR]](s64)
554     ; CHECK-NEXT: S_ENDPGM 0, implicit [[MV]](s256)
555     %0:_(s64) = COPY $vgpr0_vgpr1
556     %1:_(s256) = G_SEXT %0
557     S_ENDPGM 0, implicit %1
561 name: test_sext_s64_to_s512
562 body: |
563   bb.0:
564     liveins: $vgpr0_vgpr1
566     ; CHECK-LABEL: name: test_sext_s64_to_s512
567     ; CHECK: liveins: $vgpr0_vgpr1
568     ; CHECK-NEXT: {{  $}}
569     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
570     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 63
571     ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s64) = G_ASHR [[COPY]], [[C]](s32)
572     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s512) = G_MERGE_VALUES [[COPY]](s64), [[ASHR]](s64), [[ASHR]](s64), [[ASHR]](s64), [[ASHR]](s64), [[ASHR]](s64), [[ASHR]](s64), [[ASHR]](s64)
573     ; CHECK-NEXT: S_ENDPGM 0, implicit [[MV]](s512)
574     %0:_(s64) = COPY $vgpr0_vgpr1
575     %1:_(s512) = G_SEXT %0
576     S_ENDPGM 0, implicit %1
580 name: test_sext_s64_to_s1024
581 body: |
582   bb.0:
583     liveins: $vgpr0_vgpr1
585     ; CHECK-LABEL: name: test_sext_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]+]]:_(s32) = G_CONSTANT i32 63
590     ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s64) = G_ASHR [[COPY]], [[C]](s32)
591     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s1024) = G_MERGE_VALUES [[COPY]](s64), [[ASHR]](s64), [[ASHR]](s64), [[ASHR]](s64), [[ASHR]](s64), [[ASHR]](s64), [[ASHR]](s64), [[ASHR]](s64), [[ASHR]](s64), [[ASHR]](s64), [[ASHR]](s64), [[ASHR]](s64), [[ASHR]](s64), [[ASHR]](s64), [[ASHR]](s64), [[ASHR]](s64)
592     ; CHECK-NEXT: S_ENDPGM 0, implicit [[MV]](s1024)
593     %0:_(s64) = COPY $vgpr0_vgpr1
594     %1:_(s1024) = G_SEXT %0
595     S_ENDPGM 0, implicit %1
599 name: test_sext_s96_to_s128
600 body: |
601   bb.0:
602     liveins: $vgpr0_vgpr1_vgpr2
604     ; CHECK-LABEL: name: test_sext_s96_to_s128
605     ; CHECK: liveins: $vgpr0_vgpr1_vgpr2
606     ; CHECK-NEXT: {{  $}}
607     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s96) = COPY $vgpr0_vgpr1_vgpr2
608     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](s96)
609     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 31
610     ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[UV2]], [[C]](s32)
611     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[UV]](s32), [[UV1]](s32)
612     ; CHECK-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[UV2]](s32), [[ASHR]](s32)
613     ; CHECK-NEXT: [[MV2:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[MV]](s64), [[MV1]](s64)
614     ; CHECK-NEXT: S_ENDPGM 0, implicit [[MV2]](s128)
615     %0:_(s96) = COPY $vgpr0_vgpr1_vgpr2
616     %1:_(s128) = G_SEXT %0
617     S_ENDPGM 0, implicit %1
621 name: test_sext_s128_to_s256
622 body: |
623   bb.0:
624     liveins: $vgpr0_vgpr1_vgpr2_vgpr3
626     ; CHECK-LABEL: name: test_sext_s128_to_s256
627     ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3
628     ; CHECK-NEXT: {{  $}}
629     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
630     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](s128)
631     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 63
632     ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s64) = G_ASHR [[UV1]], [[C]](s32)
633     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s256) = G_MERGE_VALUES [[UV]](s64), [[UV1]](s64), [[ASHR]](s64), [[ASHR]](s64)
634     ; CHECK-NEXT: S_ENDPGM 0, implicit [[MV]](s256)
635     %0:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
636     %1:_(s256) = G_SEXT %0
637     S_ENDPGM 0, implicit %1
641 name: test_sext_s32_to_s88
642 body: |
643   bb.0:
644     liveins: $vgpr0
646     ; CHECK-LABEL: name: test_sext_s32_to_s88
647     ; CHECK: liveins: $vgpr0
648     ; CHECK-NEXT: {{  $}}
649     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
650     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 8
651     ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C]](s32)
652     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
653     ; CHECK-NEXT: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C1]](s32)
654     ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 24
655     ; CHECK-NEXT: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C2]](s32)
656     ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR2]](s32)
657     ; CHECK-NEXT: [[C3:%[0-9]+]]:_(s16) = G_CONSTANT i16 8
658     ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s16) = G_SHL [[TRUNC]], [[C3]](s16)
659     ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s16) = G_ASHR [[SHL]], [[C3]](s16)
660     ; CHECK-NEXT: [[C4:%[0-9]+]]:_(s16) = G_CONSTANT i16 7
661     ; CHECK-NEXT: [[ASHR1:%[0-9]+]]:_(s16) = G_ASHR [[ASHR]], [[C4]](s16)
662     ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
663     ; CHECK-NEXT: [[C5:%[0-9]+]]:_(s16) = G_CONSTANT i16 255
664     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s16) = G_AND [[TRUNC1]], [[C5]]
665     ; CHECK-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR]](s32)
666     ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s16) = G_AND [[TRUNC2]], [[C5]]
667     ; CHECK-NEXT: [[SHL1:%[0-9]+]]:_(s16) = G_SHL [[AND1]], [[C3]](s16)
668     ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s16) = G_OR [[AND]], [[SHL1]]
669     ; CHECK-NEXT: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR1]](s32)
670     ; CHECK-NEXT: [[AND2:%[0-9]+]]:_(s16) = G_AND [[TRUNC3]], [[C5]]
671     ; CHECK-NEXT: [[TRUNC4:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR2]](s32)
672     ; CHECK-NEXT: [[AND3:%[0-9]+]]:_(s16) = G_AND [[TRUNC4]], [[C5]]
673     ; CHECK-NEXT: [[SHL2:%[0-9]+]]:_(s16) = G_SHL [[AND3]], [[C3]](s16)
674     ; CHECK-NEXT: [[OR1:%[0-9]+]]:_(s16) = G_OR [[AND2]], [[SHL2]]
675     ; CHECK-NEXT: [[AND4:%[0-9]+]]:_(s16) = G_AND [[ASHR1]], [[C5]]
676     ; CHECK-NEXT: [[AND5:%[0-9]+]]:_(s16) = G_AND [[ASHR1]], [[C5]]
677     ; CHECK-NEXT: [[SHL3:%[0-9]+]]:_(s16) = G_SHL [[AND5]], [[C3]](s16)
678     ; CHECK-NEXT: [[OR2:%[0-9]+]]:_(s16) = G_OR [[AND4]], [[SHL3]]
679     ; CHECK-NEXT: [[AND6:%[0-9]+]]:_(s16) = G_AND [[ASHR1]], [[C5]]
680     ; CHECK-NEXT: [[AND7:%[0-9]+]]:_(s16) = G_AND [[ASHR1]], [[C5]]
681     ; CHECK-NEXT: [[SHL4:%[0-9]+]]:_(s16) = G_SHL [[AND7]], [[C3]](s16)
682     ; CHECK-NEXT: [[OR3:%[0-9]+]]:_(s16) = G_OR [[AND6]], [[SHL4]]
683     ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[OR]](s16)
684     ; CHECK-NEXT: [[ZEXT1:%[0-9]+]]:_(s32) = G_ZEXT [[OR1]](s16)
685     ; CHECK-NEXT: [[SHL5:%[0-9]+]]:_(s32) = G_SHL [[ZEXT1]], [[C1]](s32)
686     ; CHECK-NEXT: [[OR4:%[0-9]+]]:_(s32) = G_OR [[ZEXT]], [[SHL5]]
687     ; CHECK-NEXT: [[ZEXT2:%[0-9]+]]:_(s32) = G_ZEXT [[OR2]](s16)
688     ; CHECK-NEXT: [[ZEXT3:%[0-9]+]]:_(s32) = G_ZEXT [[OR3]](s16)
689     ; CHECK-NEXT: [[SHL6:%[0-9]+]]:_(s32) = G_SHL [[ZEXT3]], [[C1]](s32)
690     ; CHECK-NEXT: [[OR5:%[0-9]+]]:_(s32) = G_OR [[ZEXT2]], [[SHL6]]
691     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[OR4]](s32), [[OR5]](s32)
692     ; CHECK-NEXT: [[AND8:%[0-9]+]]:_(s16) = G_AND [[ASHR1]], [[C5]]
693     ; CHECK-NEXT: [[AND9:%[0-9]+]]:_(s16) = G_AND [[ASHR1]], [[C5]]
694     ; CHECK-NEXT: [[SHL7:%[0-9]+]]:_(s16) = G_SHL [[AND9]], [[C3]](s16)
695     ; CHECK-NEXT: [[OR6:%[0-9]+]]:_(s16) = G_OR [[AND8]], [[SHL7]]
696     ; CHECK-NEXT: [[AND10:%[0-9]+]]:_(s16) = G_AND [[ASHR1]], [[C5]]
697     ; CHECK-NEXT: [[AND11:%[0-9]+]]:_(s16) = G_AND [[ASHR1]], [[C5]]
698     ; CHECK-NEXT: [[SHL8:%[0-9]+]]:_(s16) = G_SHL [[AND11]], [[C3]](s16)
699     ; CHECK-NEXT: [[OR7:%[0-9]+]]:_(s16) = G_OR [[AND10]], [[SHL8]]
700     ; CHECK-NEXT: [[AND12:%[0-9]+]]:_(s16) = G_AND [[ASHR1]], [[C5]]
701     ; CHECK-NEXT: [[AND13:%[0-9]+]]:_(s16) = G_AND [[ASHR1]], [[C5]]
702     ; CHECK-NEXT: [[SHL9:%[0-9]+]]:_(s16) = G_SHL [[AND13]], [[C3]](s16)
703     ; CHECK-NEXT: [[OR8:%[0-9]+]]:_(s16) = G_OR [[AND12]], [[SHL9]]
704     ; CHECK-NEXT: [[AND14:%[0-9]+]]:_(s16) = G_AND [[ASHR1]], [[C5]]
705     ; CHECK-NEXT: [[AND15:%[0-9]+]]:_(s16) = G_AND [[ASHR1]], [[C5]]
706     ; CHECK-NEXT: [[SHL10:%[0-9]+]]:_(s16) = G_SHL [[AND15]], [[C3]](s16)
707     ; CHECK-NEXT: [[OR9:%[0-9]+]]:_(s16) = G_OR [[AND14]], [[SHL10]]
708     ; CHECK-NEXT: [[ZEXT4:%[0-9]+]]:_(s32) = G_ZEXT [[OR6]](s16)
709     ; CHECK-NEXT: [[ZEXT5:%[0-9]+]]:_(s32) = G_ZEXT [[OR7]](s16)
710     ; CHECK-NEXT: [[SHL11:%[0-9]+]]:_(s32) = G_SHL [[ZEXT5]], [[C1]](s32)
711     ; CHECK-NEXT: [[OR10:%[0-9]+]]:_(s32) = G_OR [[ZEXT4]], [[SHL11]]
712     ; CHECK-NEXT: [[ZEXT6:%[0-9]+]]:_(s32) = G_ZEXT [[OR8]](s16)
713     ; CHECK-NEXT: [[ZEXT7:%[0-9]+]]:_(s32) = G_ZEXT [[OR9]](s16)
714     ; CHECK-NEXT: [[SHL12:%[0-9]+]]:_(s32) = G_SHL [[ZEXT7]], [[C1]](s32)
715     ; CHECK-NEXT: [[OR11:%[0-9]+]]:_(s32) = G_OR [[ZEXT6]], [[SHL12]]
716     ; CHECK-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[OR10]](s32), [[OR11]](s32)
717     ; CHECK-NEXT: [[MV2:%[0-9]+]]:_(s704) = G_MERGE_VALUES [[MV]](s64), [[MV1]](s64), [[MV1]](s64), [[MV1]](s64), [[MV1]](s64), [[MV1]](s64), [[MV1]](s64), [[MV1]](s64), [[MV1]](s64), [[MV1]](s64), [[MV1]](s64)
718     ; CHECK-NEXT: [[TRUNC5:%[0-9]+]]:_(s88) = G_TRUNC [[MV2]](s704)
719     ; CHECK-NEXT: S_ENDPGM 0, implicit [[TRUNC5]](s88)
720     %0:_(s32) = COPY $vgpr0
721     %1:_(s88) = G_SEXT %0
722     S_ENDPGM 0, implicit %1
725 # The instruction count blows up for this and takes too long to
726 # generate checks. This fails on a G_MERGE_VALUES to s4160
728 # ---
729 # name: test_sext_s32_to_s65
730 # body: |
731 #   bb.0:
732 #     liveins: $vgpr0
734 #     %0:_(s32) = COPY $vgpr0
735 #     %1:_(s65) = G_SEXT %0
736 #     S_ENDPGM 0, implicit %1
737 # ...
740 # This requires fixing a bug in merge/unmerge legalization.
741 # ---
742 # name: test_sext_s2_to_s112
743 # body: |
744 #   bb.0:
745 #     liveins: $vgpr0
747 #     %0:_(s32) = COPY $vgpr0
748 #     %1:_(s2) = G_TRUNC %0
749 #     %2:_(s112) = G_SEXT %1
750 #     S_ENDPGM 0, implicit %2
751 # ...
754 name: test_sext_s112_to_s128
755 body: |
756   bb.0:
757     liveins: $vgpr0_vgpr1_vgpr2_vgpr3
758     ; CHECK-LABEL: name: test_sext_s112_to_s128
759     ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3
760     ; CHECK-NEXT: {{  $}}
761     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
762     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](s128)
763     ; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s64) = G_SEXT_INREG [[UV1]], 48
764     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[UV]](s64), [[SEXT_INREG]](s64)
765     ; CHECK-NEXT: S_ENDPGM 0, implicit [[MV]](s128)
766     %0:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
767     %1:_(s112) = G_TRUNC %0
768     %2:_(s128) = G_SEXT %1
769     S_ENDPGM 0, implicit %2