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
5 name: extract_vector_elt_0_v2i32
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
20 name: extract_vector_elt_1_v2i32
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
35 name: extract_vector_elt_2_v2i32
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
50 name: extract_vector_elt_0_v3i32
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
65 name: extract_vector_elt_0_v4i32
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
81 name: extract_vector_elt_0_v5i32
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
98 name: extract_vector_elt_0_v6i32
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
115 name: extract_vector_elt_0_v7i32
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
132 name: extract_vector_elt_0_v8i32
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
149 name: extract_vector_elt_0_v16i32
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
166 name: extract_vector_elt_var_v2i32
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
183 name: extract_vector_elt_var_v8i32
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
201 name: extract_vector_elt_0_v2i8_i32
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
227 name: extract_vector_elt_0_v2i16_i32
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
245 name: extract_vector_elt_0_v2i1_i32
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
271 name: extract_vector_elt_0_v2i1_i1
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
299 name: extract_vector_elt_v2s8_varidx_i32
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
328 name: extract_vector_elt_v3s8_varidx_i32
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
359 name: extract_vector_elt_v4s8_varidx_i32
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
392 name: extract_vector_elt_v2s16_varidx_i32
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
412 name: extract_vector_elt_v2s16_idx0_i32
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
431 name: extract_vector_elt_v2s16_idx1_i32
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
450 name: extract_vector_elt_v2s16_idx2_i32
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
469 name: extract_vector_elt_v3s16_varidx_i32
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
500 name: extract_vector_elt_v3s16_idx0_i32
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
530 name: extract_vector_elt_v3s16_idx1_i32
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
560 name: extract_vector_elt_v3s16_idx2_i32
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
590 name: extract_vector_elt_v3s16_idx3_i32
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
610 name: extract_vector_elt_v4s16_varidx_i32
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
630 name: extract_vector_elt_v2s128_varidx_i32
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
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