[llvm-objdump] - Remove one overload of reportError. NFCI.
[llvm-complete.git] / test / CodeGen / AMDGPU / GlobalISel / legalize-extract-vector-elt.mir
blob79326961285866819dbfe6ecec8520d62442aaab
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 %s -o - | FileCheck %s
4 ---
5 name: extract_vector_elt_0_v2i32
7 body: |
8   bb.0:
9     liveins: $vgpr0_vgpr1
10     ; CHECK-LABEL: name: extract_vector_elt_0_v2i32
11     ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
12     ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](<2 x s32>), 0
13     ; CHECK: $vgpr0 = COPY [[EXTRACT]](s32)
14     %0:_(<2 x s32>) = COPY $vgpr0_vgpr1
15     %1:_(s32) = G_CONSTANT i32 0
16     %2:_(s32) = G_EXTRACT_VECTOR_ELT %0, %1
17     $vgpr0 = COPY %2
18 ...
19 ---
20 name: extract_vector_elt_1_v2i32
22 body: |
23   bb.0:
24     liveins: $vgpr0_vgpr1
25     ; CHECK-LABEL: name: extract_vector_elt_1_v2i32
26     ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
27     ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](<2 x s32>), 32
28     ; CHECK: $vgpr0 = COPY [[EXTRACT]](s32)
29     %0:_(<2 x s32>) = COPY $vgpr0_vgpr1
30     %1:_(s32) = G_CONSTANT i32 1
31     %2:_(s32) = G_EXTRACT_VECTOR_ELT %0, %1
32     $vgpr0 = COPY %2
33 ...
34 ---
35 name: extract_vector_elt_2_v2i32
37 body: |
38   bb.0:
39     liveins: $vgpr0_vgpr1
40     ; CHECK-LABEL: name: extract_vector_elt_2_v2i32
41     ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
42     ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](<2 x s32>), 32
43     ; CHECK: $vgpr0 = COPY [[EXTRACT]](s32)
44     %0:_(<2 x s32>) = COPY $vgpr0_vgpr1
45     %1:_(s32) = G_CONSTANT i32 1
46     %2:_(s32) = G_EXTRACT_VECTOR_ELT %0, %1
47     $vgpr0 = COPY %2
48 ...
49 ---
50 name: extract_vector_elt_0_v3i32
52 body: |
53   bb.0:
54     liveins: $vgpr0_vgpr1_vgpr2
55     ; CHECK-LABEL: name: extract_vector_elt_0_v3i32
56     ; CHECK: [[COPY:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2
57     ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](<3 x s32>), 0
58     ; CHECK: $vgpr0 = COPY [[EXTRACT]](s32)
59     %0:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2
60     %1:_(s32) = G_CONSTANT i32 0
61     %2:_(s32) = G_EXTRACT_VECTOR_ELT %0, %1
62     $vgpr0 = COPY %2
63 ...
64 ---
65 name: extract_vector_elt_0_v4i32
67 body: |
68   bb.0:
69     liveins: $vgpr0_vgpr1_vgpr2_vgpr3
70     ; CHECK-LABEL: name: extract_vector_elt_0_v4i32
71     ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
72     ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](<4 x s32>), 0
73     ; CHECK: $vgpr0 = COPY [[EXTRACT]](s32)
74     %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
75     %1:_(s32) = G_CONSTANT i32 0
76     %2:_(s32) = G_EXTRACT_VECTOR_ELT %0, %1
77     $vgpr0 = COPY %2
78 ...
80 ---
81 name: extract_vector_elt_0_v5i32
83 body: |
84   bb.0:
85     liveins: $vgpr0
86     ; CHECK-LABEL: name: extract_vector_elt_0_v5i32
87     ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
88     ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY [[COPY]](s32)
89     ; CHECK: $vgpr0 = COPY [[COPY1]](s32)
90     %0:_(s32) = COPY $vgpr0
91     %1:_(<5 x s32>) = G_BUILD_VECTOR %0, %0, %0, %0, %0
92     %2:_(s32) = G_CONSTANT i32 0
93     %3:_(s32) = G_EXTRACT_VECTOR_ELT %1, %2
94     $vgpr0 = COPY %3
95 ...
97 ---
98 name: extract_vector_elt_0_v6i32
100 body: |
101   bb.0:
102     liveins: $vgpr0
103     ; CHECK-LABEL: name: extract_vector_elt_0_v6i32
104     ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
105     ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY [[COPY]](s32)
106     ; CHECK: $vgpr0 = COPY [[COPY1]](s32)
107     %0:_(s32) = COPY $vgpr0
108     %1:_(<6 x s32>) = G_BUILD_VECTOR %0, %0, %0, %0, %0, %0
109     %2:_(s32) = G_CONSTANT i32 0
110     %3:_(s32) = G_EXTRACT_VECTOR_ELT %1, %2
111     $vgpr0 = COPY %3
115 name: extract_vector_elt_0_v7i32
117 body: |
118   bb.0:
119     liveins: $vgpr0
120     ; CHECK-LABEL: name: extract_vector_elt_0_v7i32
121     ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
122     ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY [[COPY]](s32)
123     ; CHECK: $vgpr0 = COPY [[COPY1]](s32)
124     %0:_(s32) = COPY $vgpr0
125     %1:_(<7 x s32>) = G_BUILD_VECTOR %0, %0, %0, %0, %0, %0, %0
126     %2:_(s32) = G_CONSTANT i32 0
127     %3:_(s32) = G_EXTRACT_VECTOR_ELT %1, %2
128     $vgpr0 = COPY %3
132 name: extract_vector_elt_0_v8i32
134 body: |
135   bb.0:
136     liveins: $vgpr0
137     ; CHECK-LABEL: name: extract_vector_elt_0_v8i32
138     ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
139     ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY [[COPY]](s32)
140     ; CHECK: $vgpr0 = COPY [[COPY1]](s32)
141     %0:_(s32) = COPY $vgpr0
142     %1:_(<8 x s32>) = G_BUILD_VECTOR %0, %0, %0, %0, %0, %0, %0, %0
143     %2:_(s32) = G_CONSTANT i32 0
144     %3:_(s32) = G_EXTRACT_VECTOR_ELT %1, %2
145     $vgpr0 = COPY %3
149 name: extract_vector_elt_0_v16i32
151 body: |
152   bb.0:
153     liveins: $vgpr0
154     ; CHECK-LABEL: name: extract_vector_elt_0_v16i32
155     ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
156     ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY [[COPY]](s32)
157     ; CHECK: $vgpr0 = COPY [[COPY1]](s32)
158     %0:_(s32) = COPY $vgpr0
159     %1:_(<16 x s32>) = G_BUILD_VECTOR %0, %0, %0, %0, %0, %0, %0, %0, %0, %0, %0, %0, %0, %0, %0, %0
160     %2:_(s32) = G_CONSTANT i32 0
161     %3:_(s32) = G_EXTRACT_VECTOR_ELT %1, %2
162     $vgpr0 = COPY %3
166 name: extract_vector_elt_var_v2i32
168 body: |
169   bb.0:
170     liveins: $vgpr0_vgpr1, $vgpr2
171     ; CHECK-LABEL: name: extract_vector_elt_var_v2i32
172     ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
173     ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr2
174     ; CHECK: [[EVEC:%[0-9]+]]:_(s32) = G_EXTRACT_VECTOR_ELT [[COPY]](<2 x s32>), [[COPY1]](s32)
175     ; CHECK: $vgpr0 = COPY [[EVEC]](s32)
176     %0:_(<2 x s32>) = COPY $vgpr0_vgpr1
177     %1:_(s32) = COPY $vgpr2
178     %2:_(s32) = G_EXTRACT_VECTOR_ELT %0, %1
179     $vgpr0 = COPY %2
183 name: extract_vector_elt_var_v8i32
185 body: |
186   bb.0:
187     liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
188     ; CHECK-LABEL: name: extract_vector_elt_var_v8i32
189     ; CHECK: [[COPY:%[0-9]+]]:_(<8 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
190     ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr2
191     ; CHECK: [[EVEC:%[0-9]+]]:_(s32) = G_EXTRACT_VECTOR_ELT [[COPY]](<8 x s32>), [[COPY1]](s32)
192     ; CHECK: $vgpr0 = COPY [[EVEC]](s32)
193     %0:_(<8 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
194     %1:_(s32) = COPY $vgpr2
195     %2:_(s32) = G_EXTRACT_VECTOR_ELT %0, %1
196     $vgpr0 = COPY %2
201 name: extract_vector_elt_0_v2i8_i32
203 body: |
204   bb.0:
206     ; CHECK-LABEL: name: extract_vector_elt_0_v2i8_i32
207     ; CHECK: [[DEF:%[0-9]+]]:_(<2 x s32>) = G_IMPLICIT_DEF
208     ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY [[DEF]](<2 x s32>)
209     ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 24
210     ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
211     ; CHECK: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[UV]], [[C]](s32)
212     ; CHECK: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[UV1]], [[C]](s32)
213     ; CHECK: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C]](s32)
214     ; CHECK: [[ASHR1:%[0-9]+]]:_(s32) = G_ASHR [[SHL1]], [[C]](s32)
215     ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[ASHR]](s32), [[ASHR1]](s32)
216     ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[BUILD_VECTOR]](<2 x s32>), 0
217     ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY [[EXTRACT]](s32)
218     ; CHECK: $vgpr0 = COPY [[COPY1]](s32)
219     %0:_(<2 x s8>) = G_IMPLICIT_DEF
220     %1:_(s32) = G_CONSTANT i32 0
221     %2:_(s8) = G_EXTRACT_VECTOR_ELT %0, %1
222     %3:_(s32) = G_ANYEXT %2
223     $vgpr0 = COPY %3
227 name: extract_vector_elt_0_v2i16_i32
229 body: |
230   bb.0:
232     ; CHECK-LABEL: name: extract_vector_elt_0_v2i16_i32
233     ; CHECK: [[DEF:%[0-9]+]]:_(<2 x s16>) = G_IMPLICIT_DEF
234     ; CHECK: [[EXTRACT:%[0-9]+]]:_(s16) = G_EXTRACT [[DEF]](<2 x s16>), 0
235     ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[EXTRACT]](s16)
236     ; CHECK: $vgpr0 = COPY [[ANYEXT]](s32)
237     %0:_(<2 x s16>) = G_IMPLICIT_DEF
238     %1:_(s32) = G_CONSTANT i32 0
239     %2:_(s16) = G_EXTRACT_VECTOR_ELT %0, %1
240     %3:_(s32) = G_ANYEXT %2
241     $vgpr0 = COPY %3
245 name: extract_vector_elt_0_v2i1_i32
247 body: |
248   bb.0:
250     ; CHECK-LABEL: name: extract_vector_elt_0_v2i1_i32
251     ; CHECK: [[DEF:%[0-9]+]]:_(<2 x s32>) = G_IMPLICIT_DEF
252     ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY [[DEF]](<2 x s32>)
253     ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 31
254     ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
255     ; CHECK: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[UV]], [[C]](s32)
256     ; CHECK: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[UV1]], [[C]](s32)
257     ; CHECK: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C]](s32)
258     ; CHECK: [[ASHR1:%[0-9]+]]:_(s32) = G_ASHR [[SHL1]], [[C]](s32)
259     ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[ASHR]](s32), [[ASHR1]](s32)
260     ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[BUILD_VECTOR]](<2 x s32>), 0
261     ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY [[EXTRACT]](s32)
262     ; CHECK: $vgpr0 = COPY [[COPY1]](s32)
263     %0:_(<2 x s1>) = G_IMPLICIT_DEF
264     %1:_(s32) = G_CONSTANT i32 0
265     %2:_(s1) = G_EXTRACT_VECTOR_ELT %0, %1
266     %3:_(s32) = G_ANYEXT %2
267     $vgpr0 = COPY %3
271 name: extract_vector_elt_0_v2i1_i1
273 body: |
274   bb.0:
276     ; CHECK-LABEL: name: extract_vector_elt_0_v2i1_i1
277     ; CHECK: [[DEF:%[0-9]+]]:_(<2 x s32>) = G_IMPLICIT_DEF
278     ; CHECK: [[C:%[0-9]+]]:_(s1) = G_CONSTANT i1 false
279     ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY [[DEF]](<2 x s32>)
280     ; CHECK: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 31
281     ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
282     ; CHECK: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[UV]], [[C1]](s32)
283     ; CHECK: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[UV1]], [[C1]](s32)
284     ; CHECK: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C1]](s32)
285     ; CHECK: [[ASHR1:%[0-9]+]]:_(s32) = G_ASHR [[SHL1]], [[C1]](s32)
286     ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[ASHR]](s32), [[ASHR1]](s32)
287     ; CHECK: [[SEXT:%[0-9]+]]:_(s32) = G_SEXT [[C]](s1)
288     ; CHECK: [[EVEC:%[0-9]+]]:_(s32) = G_EXTRACT_VECTOR_ELT [[BUILD_VECTOR]](<2 x s32>), [[SEXT]](s32)
289     ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY [[EVEC]](s32)
290     ; CHECK: $vgpr0 = COPY [[COPY1]](s32)
291     %0:_(<2 x s1>) = G_IMPLICIT_DEF
292     %1:_(s1) = G_CONSTANT i1 false
293     %2:_(s1) = G_EXTRACT_VECTOR_ELT %0, %1
294     %3:_(s32) = G_ANYEXT %2
295     $vgpr0 = COPY %3
299 name: extract_vector_elt_v2s8_varidx_i32
301 body: |
302   bb.0:
303     liveins: $vgpr0_vgpr1, $vgpr2
305     ; CHECK-LABEL: name: extract_vector_elt_v2s8_varidx_i32
306     ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
307     ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr2
308     ; CHECK: [[COPY2:%[0-9]+]]:_(<2 x s32>) = COPY [[COPY]](<2 x s32>)
309     ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 24
310     ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY2]](<2 x s32>)
311     ; CHECK: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[UV]], [[C]](s32)
312     ; CHECK: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[UV1]], [[C]](s32)
313     ; CHECK: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C]](s32)
314     ; CHECK: [[ASHR1:%[0-9]+]]:_(s32) = G_ASHR [[SHL1]], [[C]](s32)
315     ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[ASHR]](s32), [[ASHR1]](s32)
316     ; CHECK: [[EVEC:%[0-9]+]]:_(s32) = G_EXTRACT_VECTOR_ELT [[BUILD_VECTOR]](<2 x s32>), [[COPY1]](s32)
317     ; CHECK: [[COPY3:%[0-9]+]]:_(s32) = COPY [[EVEC]](s32)
318     ; CHECK: $vgpr0 = COPY [[COPY3]](s32)
319     %0:_(<2 x s32>) = COPY $vgpr0_vgpr1
320     %1:_(s32) = COPY $vgpr2
321     %2:_(<2 x s8>) = G_TRUNC %0
322     %3:_(s8) = G_EXTRACT_VECTOR_ELT %2, %1
323     %4:_(s32) = G_ANYEXT %3
324     $vgpr0 = COPY %4
328 name: extract_vector_elt_v3s8_varidx_i32
330 body: |
331   bb.0:
332     liveins: $vgpr0_vgpr1_vgpr2, $vgpr3
334     ; CHECK-LABEL: name: extract_vector_elt_v3s8_varidx_i32
335     ; CHECK: [[COPY:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2
336     ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr3
337     ; CHECK: [[COPY2:%[0-9]+]]:_(<3 x s32>) = COPY [[COPY]](<3 x s32>)
338     ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 24
339     ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY2]](<3 x s32>)
340     ; CHECK: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[UV]], [[C]](s32)
341     ; CHECK: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[UV1]], [[C]](s32)
342     ; CHECK: [[SHL2:%[0-9]+]]:_(s32) = G_SHL [[UV2]], [[C]](s32)
343     ; CHECK: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C]](s32)
344     ; CHECK: [[ASHR1:%[0-9]+]]:_(s32) = G_ASHR [[SHL1]], [[C]](s32)
345     ; CHECK: [[ASHR2:%[0-9]+]]:_(s32) = G_ASHR [[SHL2]], [[C]](s32)
346     ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[ASHR]](s32), [[ASHR1]](s32), [[ASHR2]](s32)
347     ; CHECK: [[EVEC:%[0-9]+]]:_(s32) = G_EXTRACT_VECTOR_ELT [[BUILD_VECTOR]](<3 x s32>), [[COPY1]](s32)
348     ; CHECK: [[COPY3:%[0-9]+]]:_(s32) = COPY [[EVEC]](s32)
349     ; CHECK: $vgpr0 = COPY [[COPY3]](s32)
350     %0:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2
351     %1:_(s32) = COPY $vgpr3
352     %2:_(<3 x s8>) = G_TRUNC %0
353     %3:_(s8) = G_EXTRACT_VECTOR_ELT %2, %1
354     %4:_(s32) = G_ANYEXT %3
355     $vgpr0 = COPY %4
359 name: extract_vector_elt_v4s8_varidx_i32
361 body: |
362   bb.0:
363     liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4
365     ; CHECK-LABEL: name: extract_vector_elt_v4s8_varidx_i32
366     ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
367     ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr4
368     ; CHECK: [[COPY2:%[0-9]+]]:_(<4 x s32>) = COPY [[COPY]](<4 x s32>)
369     ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 24
370     ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY2]](<4 x s32>)
371     ; CHECK: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[UV]], [[C]](s32)
372     ; CHECK: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[UV1]], [[C]](s32)
373     ; CHECK: [[SHL2:%[0-9]+]]:_(s32) = G_SHL [[UV2]], [[C]](s32)
374     ; CHECK: [[SHL3:%[0-9]+]]:_(s32) = G_SHL [[UV3]], [[C]](s32)
375     ; CHECK: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C]](s32)
376     ; CHECK: [[ASHR1:%[0-9]+]]:_(s32) = G_ASHR [[SHL1]], [[C]](s32)
377     ; CHECK: [[ASHR2:%[0-9]+]]:_(s32) = G_ASHR [[SHL2]], [[C]](s32)
378     ; CHECK: [[ASHR3:%[0-9]+]]:_(s32) = G_ASHR [[SHL3]], [[C]](s32)
379     ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[ASHR]](s32), [[ASHR1]](s32), [[ASHR2]](s32), [[ASHR3]](s32)
380     ; CHECK: [[EVEC:%[0-9]+]]:_(s32) = G_EXTRACT_VECTOR_ELT [[BUILD_VECTOR]](<4 x s32>), [[COPY1]](s32)
381     ; CHECK: [[COPY3:%[0-9]+]]:_(s32) = COPY [[EVEC]](s32)
382     ; CHECK: $vgpr0 = COPY [[COPY3]](s32)
383     %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
384     %1:_(s32) = COPY $vgpr4
385     %2:_(<4 x s8>) = G_TRUNC %0
386     %3:_(s8) = G_EXTRACT_VECTOR_ELT %2, %1
387     %4:_(s32) = G_ANYEXT %3
388     $vgpr0 = COPY %4
392 name: extract_vector_elt_v2s16_varidx_i32
394 body: |
395   bb.0:
396     liveins: $vgpr0, $vgpr1
398     ; CHECK-LABEL: name: extract_vector_elt_v2s16_varidx_i32
399     ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
400     ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
401     ; CHECK: [[EVEC:%[0-9]+]]:_(s16) = G_EXTRACT_VECTOR_ELT [[COPY]](<2 x s16>), [[COPY1]](s32)
402     ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[EVEC]](s16)
403     ; CHECK: $vgpr0 = COPY [[ANYEXT]](s32)
404     %0:_(<2 x s16>) = COPY $vgpr0
405     %1:_(s32) = COPY $vgpr1
406     %2:_(s16) = G_EXTRACT_VECTOR_ELT %0, %1
407     %3:_(s32) = G_ANYEXT %2
408     $vgpr0 = COPY %3
412 name: extract_vector_elt_v2s16_idx0_i32
414 body: |
415   bb.0:
416     liveins: $vgpr0
418     ; CHECK-LABEL: name: extract_vector_elt_v2s16_idx0_i32
419     ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
420     ; CHECK: [[EXTRACT:%[0-9]+]]:_(s16) = G_EXTRACT [[COPY]](<2 x s16>), 0
421     ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[EXTRACT]](s16)
422     ; CHECK: $vgpr0 = COPY [[ANYEXT]](s32)
423     %0:_(<2 x s16>) = COPY $vgpr0
424     %1:_(s32) = G_CONSTANT i32 0
425     %2:_(s16) = G_EXTRACT_VECTOR_ELT %0, %1
426     %3:_(s32) = G_ANYEXT %2
427     $vgpr0 = COPY %3
431 name: extract_vector_elt_v2s16_idx1_i32
433 body: |
434   bb.0:
435     liveins: $vgpr0
437     ; CHECK-LABEL: name: extract_vector_elt_v2s16_idx1_i32
438     ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
439     ; CHECK: [[EXTRACT:%[0-9]+]]:_(s16) = G_EXTRACT [[COPY]](<2 x s16>), 16
440     ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[EXTRACT]](s16)
441     ; CHECK: $vgpr0 = COPY [[ANYEXT]](s32)
442     %0:_(<2 x s16>) = COPY $vgpr0
443     %1:_(s32) = G_CONSTANT i32 1
444     %2:_(s16) = G_EXTRACT_VECTOR_ELT %0, %1
445     %3:_(s32) = G_ANYEXT %2
446     $vgpr0 = COPY %3
450 name: extract_vector_elt_v2s16_idx2_i32
452 body: |
453   bb.0:
454     liveins: $vgpr0
456     ; CHECK-LABEL: name: extract_vector_elt_v2s16_idx2_i32
457     ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
458     ; CHECK: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
459     ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY [[DEF]](s32)
460     ; CHECK: $vgpr0 = COPY [[COPY1]](s32)
461     %0:_(<2 x s16>) = COPY $vgpr0
462     %1:_(s32) = G_CONSTANT i32 2
463     %2:_(s16) = G_EXTRACT_VECTOR_ELT %0, %1
464     %3:_(s32) = G_ANYEXT %2
465     $vgpr0 = COPY %3
469 name: extract_vector_elt_v3s16_varidx_i32
471 body: |
472   bb.0:
473     liveins: $vgpr0_vgpr1_vgpr2, $vgpr3
475     ; CHECK-LABEL: name: extract_vector_elt_v3s16_varidx_i32
476     ; CHECK: [[COPY:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2
477     ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr3
478     ; CHECK: [[COPY2:%[0-9]+]]:_(<3 x s32>) = COPY [[COPY]](<3 x s32>)
479     ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
480     ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY2]](<3 x s32>)
481     ; CHECK: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[UV]], [[C]](s32)
482     ; CHECK: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[UV1]], [[C]](s32)
483     ; CHECK: [[SHL2:%[0-9]+]]:_(s32) = G_SHL [[UV2]], [[C]](s32)
484     ; CHECK: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C]](s32)
485     ; CHECK: [[ASHR1:%[0-9]+]]:_(s32) = G_ASHR [[SHL1]], [[C]](s32)
486     ; CHECK: [[ASHR2:%[0-9]+]]:_(s32) = G_ASHR [[SHL2]], [[C]](s32)
487     ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[ASHR]](s32), [[ASHR1]](s32), [[ASHR2]](s32)
488     ; CHECK: [[EVEC:%[0-9]+]]:_(s32) = G_EXTRACT_VECTOR_ELT [[BUILD_VECTOR]](<3 x s32>), [[COPY1]](s32)
489     ; CHECK: [[COPY3:%[0-9]+]]:_(s32) = COPY [[EVEC]](s32)
490     ; CHECK: $vgpr0 = COPY [[COPY3]](s32)
491     %0:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2
492     %1:_(s32) = COPY $vgpr3
493     %2:_(<3 x s16>) = G_TRUNC %0
494     %3:_(s16) = G_EXTRACT_VECTOR_ELT %2, %1
495     %4:_(s32) = G_ANYEXT %3
496     $vgpr0 = COPY %4
500 name: extract_vector_elt_v3s16_idx0_i32
502 body: |
503   bb.0:
504     liveins: $vgpr0_vgpr1_vgpr2
506     ; CHECK-LABEL: name: extract_vector_elt_v3s16_idx0_i32
507     ; CHECK: [[COPY:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2
508     ; CHECK: [[COPY1:%[0-9]+]]:_(<3 x s32>) = COPY [[COPY]](<3 x s32>)
509     ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
510     ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<3 x s32>)
511     ; CHECK: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[UV]], [[C]](s32)
512     ; CHECK: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[UV1]], [[C]](s32)
513     ; CHECK: [[SHL2:%[0-9]+]]:_(s32) = G_SHL [[UV2]], [[C]](s32)
514     ; CHECK: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C]](s32)
515     ; CHECK: [[ASHR1:%[0-9]+]]:_(s32) = G_ASHR [[SHL1]], [[C]](s32)
516     ; CHECK: [[ASHR2:%[0-9]+]]:_(s32) = G_ASHR [[SHL2]], [[C]](s32)
517     ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[ASHR]](s32), [[ASHR1]](s32), [[ASHR2]](s32)
518     ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[BUILD_VECTOR]](<3 x s32>), 0
519     ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY [[EXTRACT]](s32)
520     ; CHECK: $vgpr0 = COPY [[COPY2]](s32)
521     %0:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2
522     %1:_(s32) = G_CONSTANT i32 0
523     %2:_(<3 x s16>) = G_TRUNC %0
524     %3:_(s16) = G_EXTRACT_VECTOR_ELT %2, %1
525     %4:_(s32) = G_ANYEXT %3
526     $vgpr0 = COPY %4
530 name: extract_vector_elt_v3s16_idx1_i32
532 body: |
533   bb.0:
534     liveins: $vgpr0_vgpr1_vgpr2
536     ; CHECK-LABEL: name: extract_vector_elt_v3s16_idx1_i32
537     ; CHECK: [[COPY:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2
538     ; CHECK: [[COPY1:%[0-9]+]]:_(<3 x s32>) = COPY [[COPY]](<3 x s32>)
539     ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
540     ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<3 x s32>)
541     ; CHECK: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[UV]], [[C]](s32)
542     ; CHECK: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[UV1]], [[C]](s32)
543     ; CHECK: [[SHL2:%[0-9]+]]:_(s32) = G_SHL [[UV2]], [[C]](s32)
544     ; CHECK: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C]](s32)
545     ; CHECK: [[ASHR1:%[0-9]+]]:_(s32) = G_ASHR [[SHL1]], [[C]](s32)
546     ; CHECK: [[ASHR2:%[0-9]+]]:_(s32) = G_ASHR [[SHL2]], [[C]](s32)
547     ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[ASHR]](s32), [[ASHR1]](s32), [[ASHR2]](s32)
548     ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[BUILD_VECTOR]](<3 x s32>), 32
549     ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY [[EXTRACT]](s32)
550     ; CHECK: $vgpr0 = COPY [[COPY2]](s32)
551     %0:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2
552     %1:_(s32) = G_CONSTANT i32 1
553     %2:_(<3 x s16>) = G_TRUNC %0
554     %3:_(s16) = G_EXTRACT_VECTOR_ELT %2, %1
555     %4:_(s32) = G_ANYEXT %3
556     $vgpr0 = COPY %4
560 name: extract_vector_elt_v3s16_idx2_i32
562 body: |
563   bb.0:
564     liveins: $vgpr0_vgpr1_vgpr2
566     ; CHECK-LABEL: name: extract_vector_elt_v3s16_idx2_i32
567     ; CHECK: [[COPY:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2
568     ; CHECK: [[COPY1:%[0-9]+]]:_(<3 x s32>) = COPY [[COPY]](<3 x s32>)
569     ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
570     ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<3 x s32>)
571     ; CHECK: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[UV]], [[C]](s32)
572     ; CHECK: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[UV1]], [[C]](s32)
573     ; CHECK: [[SHL2:%[0-9]+]]:_(s32) = G_SHL [[UV2]], [[C]](s32)
574     ; CHECK: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C]](s32)
575     ; CHECK: [[ASHR1:%[0-9]+]]:_(s32) = G_ASHR [[SHL1]], [[C]](s32)
576     ; CHECK: [[ASHR2:%[0-9]+]]:_(s32) = G_ASHR [[SHL2]], [[C]](s32)
577     ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[ASHR]](s32), [[ASHR1]](s32), [[ASHR2]](s32)
578     ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[BUILD_VECTOR]](<3 x s32>), 64
579     ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY [[EXTRACT]](s32)
580     ; CHECK: $vgpr0 = COPY [[COPY2]](s32)
581     %0:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2
582     %1:_(s32) = G_CONSTANT i32 2
583     %2:_(<3 x s16>) = G_TRUNC %0
584     %3:_(s16) = G_EXTRACT_VECTOR_ELT %2, %1
585     %4:_(s32) = G_ANYEXT %3
586     $vgpr0 = COPY %4
590 name: extract_vector_elt_v3s16_idx3_i32
592 body: |
593   bb.0:
594     liveins: $vgpr0_vgpr1_vgpr2
596     ; CHECK-LABEL: name: extract_vector_elt_v3s16_idx3_i32
597     ; CHECK: [[COPY:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2
598     ; CHECK: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
599     ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY [[DEF]](s32)
600     ; CHECK: $vgpr0 = COPY [[COPY1]](s32)
601     %0:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2
602     %1:_(s32) = G_CONSTANT i32 3
603     %2:_(<3 x s16>) = G_TRUNC %0
604     %3:_(s16) = G_EXTRACT_VECTOR_ELT %2, %1
605     %4:_(s32) = G_ANYEXT %3
606     $vgpr0 = COPY %4
610 name: extract_vector_elt_v4s16_varidx_i32
612 body: |
613   bb.0:
614     liveins: $vgpr0_vgpr1, $vgpr2
616     ; CHECK-LABEL: name: extract_vector_elt_v4s16_varidx_i32
617     ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr0_vgpr1
618     ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr2
619     ; CHECK: [[EVEC:%[0-9]+]]:_(s16) = G_EXTRACT_VECTOR_ELT [[COPY]](<4 x s16>), [[COPY1]](s32)
620     ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[EVEC]](s16)
621     ; CHECK: $vgpr0 = COPY [[ANYEXT]](s32)
622     %0:_(<4 x s16>) = COPY $vgpr0_vgpr1
623     %1:_(s32) = COPY $vgpr2
624     %2:_(s16) = G_EXTRACT_VECTOR_ELT %0, %1
625     %3:_(s32) = G_ANYEXT %2
626     $vgpr0 = COPY %3
630 name: extract_vector_elt_v2s128_varidx_i32
632 body: |
633   bb.0:
634     liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7, $vgpr8
636     ; CHECK-LABEL: name: extract_vector_elt_v2s128_varidx_i32
637     ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s128>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
638     ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr8
639     ; CHECK: [[EVEC:%[0-9]+]]:_(s128) = G_EXTRACT_VECTOR_ELT [[COPY]](<2 x s128>), [[COPY1]](s32)
640     ; CHECK: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[EVEC]](s128)
641     %0:_(<2 x s128>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
642     %1:_(s32) = COPY $vgpr8
643     %2:_(s128) = G_EXTRACT_VECTOR_ELT %0, %1
644     $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %2
648 name: extract_vector_elt_v2i32_varidx_i64
650 body: |
651   bb.0:
652     liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
654     ; CHECK-LABEL: name: extract_vector_elt_v2i32_varidx_i64
655     ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
656     ; CHECK: [[COPY1:%[0-9]+]]:_(s64) = COPY $vgpr2_vgpr3
657     ; CHECK: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64)
658     ; CHECK: [[EVEC:%[0-9]+]]:_(s32) = G_EXTRACT_VECTOR_ELT [[COPY]](<2 x s32>), [[TRUNC]](s32)
659     ; CHECK: $vgpr0 = COPY [[EVEC]](s32)
660     %0:_(<2 x s32>) = COPY $vgpr0_vgpr1
661     %1:_(s64) = COPY $vgpr2_vgpr3
662     %2:_(s32) = G_EXTRACT_VECTOR_ELT %0, %1
663     $vgpr0 = COPY %2