1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -O0 -mtriple=amdgcn-mesa-mesa3d -mcpu=tahiti -run-pass=legalizer -global-isel-abort=0 %s -o - | FileCheck %s
5 name: extract_s32_merge_s64_s32_s32_offset0
9 ; CHECK-LABEL: name: extract_s32_merge_s64_s32_s32_offset0
10 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
11 ; CHECK: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
12 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY [[C]](s32)
13 ; CHECK: $vgpr0 = COPY [[COPY]](s32)
14 %0:_(s32) = G_CONSTANT i32 0
15 %1:_(s32) = G_CONSTANT i32 1
16 %2:_(s64) = G_MERGE_VALUES %0, %1
17 %3:_(s32) = G_EXTRACT %2, 0
22 name: extract_s32_merge_s64_s32_s32_offset32
26 ; CHECK-LABEL: name: extract_s32_merge_s64_s32_s32_offset32
27 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
28 ; CHECK: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
29 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY [[C1]](s32)
30 ; CHECK: $vgpr0 = COPY [[COPY]](s32)
31 %0:_(s32) = G_CONSTANT i32 0
32 %1:_(s32) = G_CONSTANT i32 1
33 %2:_(s64) = G_MERGE_VALUES %0, %1
34 %3:_(s32) = G_EXTRACT %2, 32
39 name: extract_s64_merge_s128_s64_s64_offset0
43 ; CHECK-LABEL: name: extract_s64_merge_s128_s64_s64_offset0
44 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
45 ; CHECK: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
46 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY [[C]](s64)
47 ; CHECK: $vgpr0_vgpr1 = COPY [[COPY]](s64)
48 %0:_(s64) = G_CONSTANT i64 0
49 %1:_(s64) = G_CONSTANT i64 1
50 %2:_(s128) = G_MERGE_VALUES %0, %1
51 %3:_(s64) = G_EXTRACT %2, 0
52 $vgpr0_vgpr1 = COPY %3
56 name: extract_s64_merge_s128_s64_s64_offset64
60 ; CHECK-LABEL: name: extract_s64_merge_s128_s64_s64_offset64
61 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
62 ; CHECK: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
63 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY [[C1]](s64)
64 ; CHECK: $vgpr0_vgpr1 = COPY [[COPY]](s64)
65 %0:_(s64) = G_CONSTANT i64 0
66 %1:_(s64) = G_CONSTANT i64 1
67 %2:_(s128) = G_MERGE_VALUES %0, %1
68 %3:_(s64) = G_EXTRACT %2, 64
69 $vgpr0_vgpr1 = COPY %3
73 name: extract_s32_merge_s128_s64_s64_offset0
77 ; CHECK-LABEL: name: extract_s32_merge_s128_s64_s64_offset0
78 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
79 ; CHECK: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
80 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[C]](s64), 0
81 ; CHECK: $vgpr0 = COPY [[EXTRACT]](s32)
82 %0:_(s64) = G_CONSTANT i64 0
83 %1:_(s64) = G_CONSTANT i64 1
84 %2:_(s128) = G_MERGE_VALUES %0, %1
85 %3:_(s32) = G_EXTRACT %2, 0
90 name: extract_s32_merge_s128_s64_s64_offset32
94 ; CHECK-LABEL: name: extract_s32_merge_s128_s64_s64_offset32
95 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
96 ; CHECK: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
97 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[C]](s64), 32
98 ; CHECK: $vgpr0 = COPY [[EXTRACT]](s32)
99 %0:_(s64) = G_CONSTANT i64 0
100 %1:_(s64) = G_CONSTANT i64 1
101 %2:_(s128) = G_MERGE_VALUES %0, %1
102 %3:_(s32) = G_EXTRACT %2, 32
107 name: extract_s32_merge_s128_s64_s64_offset64
111 ; CHECK-LABEL: name: extract_s32_merge_s128_s64_s64_offset64
112 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
113 ; CHECK: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
114 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[C1]](s64), 0
115 ; CHECK: $vgpr0 = COPY [[EXTRACT]](s32)
116 %0:_(s64) = G_CONSTANT i64 0
117 %1:_(s64) = G_CONSTANT i64 1
118 %2:_(s128) = G_MERGE_VALUES %0, %1
119 %3:_(s32) = G_EXTRACT %2, 64
124 name: extract_s32_merge_s128_s64_s64_offset96
128 ; CHECK-LABEL: name: extract_s32_merge_s128_s64_s64_offset96
129 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
130 ; CHECK: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
131 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[C1]](s64), 32
132 ; CHECK: $vgpr0 = COPY [[EXTRACT]](s32)
133 %0:_(s64) = G_CONSTANT i64 0
134 %1:_(s64) = G_CONSTANT i64 1
135 %2:_(s128) = G_MERGE_VALUES %0, %1
136 %3:_(s32) = G_EXTRACT %2, 96
140 # Destination size fits, but is skewed from the start of the register.
142 name: extract_s16_merge_s128_s64_s64_offset18
146 ; CHECK-LABEL: name: extract_s16_merge_s128_s64_s64_offset18
147 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
148 ; CHECK: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
149 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s16) = G_EXTRACT [[C]](s64), 18
150 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[EXTRACT]](s16)
151 ; CHECK: $vgpr0 = COPY [[ANYEXT]](s32)
152 %0:_(s64) = G_CONSTANT i64 0
153 %1:_(s64) = G_CONSTANT i64 1
154 %2:_(s128) = G_MERGE_VALUES %0, %1
155 %3:_(s16) = G_EXTRACT %2, 18
156 %4:_(s32) = G_ANYEXT %3
160 # Destination size fits, but is skewed from the start of the register.
162 name: extract_s16_merge_s128_s64_s64_offset82
166 ; CHECK-LABEL: name: extract_s16_merge_s128_s64_s64_offset82
167 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
168 ; CHECK: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
169 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s16) = G_EXTRACT [[C1]](s64), 18
170 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[EXTRACT]](s16)
171 ; CHECK: $vgpr0 = COPY [[ANYEXT]](s32)
172 %0:_(s64) = G_CONSTANT i64 0
173 %1:_(s64) = G_CONSTANT i64 1
174 %2:_(s128) = G_MERGE_VALUES %0, %1
175 %3:_(s16) = G_EXTRACT %2, 82
176 %4:_(s32) = G_ANYEXT %3
181 # Can't handle this since it spans two registers
183 name: extract_s64_merge_s128_s64_s64_offset32
187 ; CHECK-LABEL: name: extract_s64_merge_s128_s64_s64_offset32
188 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
189 ; CHECK: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
190 ; CHECK: [[MV:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[C]](s64), [[C1]](s64)
191 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s64) = G_EXTRACT [[MV]](s128), 32
192 ; CHECK: $vgpr0_vgpr1 = COPY [[EXTRACT]](s64)
193 %0:_(s64) = G_CONSTANT i64 0
194 %1:_(s64) = G_CONSTANT i64 1
195 %2:_(s128) = G_MERGE_VALUES %0, %1
196 %3:_(s64) = G_EXTRACT %2, 32
197 $vgpr0_vgpr1 = COPY %3
201 # Only the last bit spans to another register
203 name: extract_s16_merge_s32_s32_offset1
207 ; CHECK-LABEL: name: extract_s16_merge_s32_s32_offset1
208 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
209 ; CHECK: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
210 ; CHECK: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[C]](s32), [[C1]](s32)
211 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[MV]](s64), 1
212 ; CHECK: $vgpr0 = COPY [[EXTRACT]](s32)
213 %0:_(s32) = G_CONSTANT i32 0
214 %1:_(s32) = G_CONSTANT i32 1
215 %2:_(s64) = G_MERGE_VALUES %0, %1
216 %3:_(s32) = G_EXTRACT %2, 1
221 # Test with some merges with 3 operands
224 name: extract_s32_merge_s96_s32_s32_s32_offset0
228 ; CHECK-LABEL: name: extract_s32_merge_s96_s32_s32_s32_offset0
229 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
230 ; CHECK: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
231 ; CHECK: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
232 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY [[C]](s32)
233 ; CHECK: $vgpr0 = COPY [[COPY]](s32)
234 %0:_(s32) = G_CONSTANT i32 0
235 %1:_(s32) = G_CONSTANT i32 1
236 %2:_(s32) = G_CONSTANT i32 1
237 %3:_(s96) = G_MERGE_VALUES %0, %1, %2
238 %4:_(s32) = G_EXTRACT %3, 0
243 name: extract_s32_merge_s96_s32_s32_s32_offset64
247 ; CHECK-LABEL: name: extract_s32_merge_s96_s32_s32_s32_offset64
248 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
249 ; CHECK: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
250 ; CHECK: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
251 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY [[C2]](s32)
252 ; CHECK: $vgpr0 = COPY [[COPY]](s32)
253 %0:_(s32) = G_CONSTANT i32 0
254 %1:_(s32) = G_CONSTANT i32 1
255 %2:_(s32) = G_CONSTANT i32 1
256 %3:_(s96) = G_MERGE_VALUES %0, %1, %2
257 %4:_(s32) = G_EXTRACT %3, 64
262 name: extract_s64_merge_s96_s32_s32_s32_offset0
266 ; CHECK-LABEL: name: extract_s64_merge_s96_s32_s32_s32_offset0
267 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
268 ; CHECK: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
269 ; CHECK: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
270 ; CHECK: [[MV:%[0-9]+]]:_(s96) = G_MERGE_VALUES [[C]](s32), [[C1]](s32), [[C2]](s32)
271 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s64) = G_EXTRACT [[MV]](s96), 0
272 ; CHECK: $vgpr0_vgpr1 = COPY [[EXTRACT]](s64)
273 %0:_(s32) = G_CONSTANT i32 0
274 %1:_(s32) = G_CONSTANT i32 1
275 %2:_(s32) = G_CONSTANT i32 1
276 %3:_(s96) = G_MERGE_VALUES %0, %1, %2
277 %4:_(s64) = G_EXTRACT %3, 0
278 $vgpr0_vgpr1 = COPY %4
282 name: extract_s64_merge_s96_s32_s32_s32_offset32
286 ; CHECK-LABEL: name: extract_s64_merge_s96_s32_s32_s32_offset32
287 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
288 ; CHECK: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
289 ; CHECK: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
290 ; CHECK: [[MV:%[0-9]+]]:_(s96) = G_MERGE_VALUES [[C]](s32), [[C1]](s32), [[C2]](s32)
291 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s64) = G_EXTRACT [[MV]](s96), 32
292 ; CHECK: $vgpr0_vgpr1 = COPY [[EXTRACT]](s64)
293 %0:_(s32) = G_CONSTANT i32 0
294 %1:_(s32) = G_CONSTANT i32 1
295 %2:_(s32) = G_CONSTANT i32 1
296 %3:_(s96) = G_MERGE_VALUES %0, %1, %2
297 %4:_(s64) = G_EXTRACT %3, 32
298 $vgpr0_vgpr1 = COPY %4
301 # Test build_vector sources
303 name: extract_s64_build_vector_v2s64_s64_s64_offset0
307 ; CHECK-LABEL: name: extract_s64_build_vector_v2s64_s64_s64_offset0
308 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
309 ; CHECK: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
310 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY [[C]](s64)
311 ; CHECK: $vgpr0_vgpr1 = COPY [[COPY]](s64)
312 %0:_(s64) = G_CONSTANT i64 0
313 %1:_(s64) = G_CONSTANT i64 1
314 %2:_(<2 x s64>) = G_BUILD_VECTOR %0, %1
315 %3:_(s64) = G_EXTRACT %2, 0
316 $vgpr0_vgpr1 = COPY %3
320 name: extract_s64_build_vector_v2s64_s64_s64_offset64
324 ; CHECK-LABEL: name: extract_s64_build_vector_v2s64_s64_s64_offset64
325 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
326 ; CHECK: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
327 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY [[C1]](s64)
328 ; CHECK: $vgpr0_vgpr1 = COPY [[COPY]](s64)
329 %0:_(s64) = G_CONSTANT i64 0
330 %1:_(s64) = G_CONSTANT i64 1
331 %2:_(<2 x s64>) = G_BUILD_VECTOR %0, %1
332 %3:_(s64) = G_EXTRACT %2, 64
333 $vgpr0_vgpr1 = COPY %3
337 name: extract_s64_build_vector_v2s64_s64_s64_offset32
341 ; CHECK-LABEL: name: extract_s64_build_vector_v2s64_s64_s64_offset32
342 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
343 ; CHECK: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
344 ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C1]](s64)
345 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s64) = G_EXTRACT [[BUILD_VECTOR]](<2 x s64>), 32
346 ; CHECK: $vgpr0_vgpr1 = COPY [[EXTRACT]](s64)
347 %0:_(s64) = G_CONSTANT i64 0
348 %1:_(s64) = G_CONSTANT i64 1
349 %2:_(<2 x s64>) = G_BUILD_VECTOR %0, %1
350 %3:_(s64) = G_EXTRACT %2, 32
351 $vgpr0_vgpr1 = COPY %3
354 # Test extracting something smaller than the element size
356 name: extract_s32_build_vector_v2s64_s64_s64_offset64
360 ; CHECK-LABEL: name: extract_s32_build_vector_v2s64_s64_s64_offset64
361 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
362 ; CHECK: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
363 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[C1]](s64), 0
364 ; CHECK: $vgpr0 = COPY [[EXTRACT]](s32)
365 %0:_(s64) = G_CONSTANT i64 0
366 %1:_(s64) = G_CONSTANT i64 1
367 %2:_(<2 x s64>) = G_BUILD_VECTOR %0, %1
368 %3:_(s32) = G_EXTRACT %2, 64
373 # Test concat_vector sources
375 name: extract_v2s16_build_vector_v2s64_v2s16_v2s16_offset0
379 liveins: $vgpr0, $vgpr1
380 ; CHECK-LABEL: name: extract_v2s16_build_vector_v2s64_v2s16_v2s16_offset0
381 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
382 ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
383 ; CHECK: [[COPY2:%[0-9]+]]:_(<2 x s16>) = COPY [[COPY]](<2 x s16>)
384 ; CHECK: $vgpr0 = COPY [[COPY2]](<2 x s16>)
385 %0:_(<2 x s16>) = COPY $vgpr0
386 %1:_(<2 x s16>) = COPY $vgpr1
387 %2:_(<4 x s16>) = G_CONCAT_VECTORS %0, %1
388 %3:_(<2 x s16>) = G_EXTRACT %2, 0
393 name: extract_v2s16_build_vector_v2s64_v2s16_v2s16_offset32
397 liveins: $vgpr0, $vgpr1
398 ; CHECK-LABEL: name: extract_v2s16_build_vector_v2s64_v2s16_v2s16_offset32
399 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
400 ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
401 ; CHECK: [[COPY2:%[0-9]+]]:_(<2 x s16>) = COPY [[COPY1]](<2 x s16>)
402 ; CHECK: $vgpr0 = COPY [[COPY2]](<2 x s16>)
403 %0:_(<2 x s16>) = COPY $vgpr0
404 %1:_(<2 x s16>) = COPY $vgpr1
405 %2:_(<4 x s16>) = G_CONCAT_VECTORS %0, %1
406 %3:_(<2 x s16>) = G_EXTRACT %2, 32
410 # Test extracting only a single element, not a subvector
412 name: extract_s16_build_vector_v2s64_v2s16_v2s16_offset32
416 liveins: $vgpr0, $vgpr1
417 ; CHECK-LABEL: name: extract_s16_build_vector_v2s64_v2s16_v2s16_offset32
418 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
419 ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
420 ; CHECK: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>)
421 ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY [[BITCAST]](s32)
422 ; CHECK: $vgpr0 = COPY [[COPY2]](s32)
423 %0:_(<2 x s16>) = COPY $vgpr0
424 %1:_(<2 x s16>) = COPY $vgpr1
425 %2:_(<4 x s16>) = G_CONCAT_VECTORS %0, %1
426 %3:_(s16) = G_EXTRACT %2, 32
427 %4:_(s32) = G_ANYEXT %3
432 name: extract_s16_build_vector_v2s64_v2s16_v2s16_offset48
436 liveins: $vgpr0, $vgpr1
437 ; CHECK-LABEL: name: extract_s16_build_vector_v2s64_v2s16_v2s16_offset48
438 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
439 ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
440 ; CHECK: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>)
441 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
442 ; CHECK: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)
443 ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32)
444 ; CHECK: $vgpr0 = COPY [[COPY2]](s32)
445 %0:_(<2 x s16>) = COPY $vgpr0
446 %1:_(<2 x s16>) = COPY $vgpr1
447 %2:_(<4 x s16>) = G_CONCAT_VECTORS %0, %1
448 %3:_(s16) = G_EXTRACT %2, 48
449 %4:_(s32) = G_ANYEXT %3
453 # Test extracting less than an element
455 name: extract_s8_build_vector_v2s64_v2s16_v2s16_offset48
459 liveins: $vgpr0, $vgpr1
460 ; CHECK-LABEL: name: extract_s8_build_vector_v2s64_v2s16_v2s16_offset48
461 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
462 ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
463 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s8) = G_EXTRACT [[COPY1]](<2 x s16>), 16
464 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[EXTRACT]](s8)
465 ; CHECK: $vgpr0 = COPY [[ANYEXT]](s32)
466 %0:_(<2 x s16>) = COPY $vgpr0
467 %1:_(<2 x s16>) = COPY $vgpr1
468 %2:_(<4 x s16>) = G_CONCAT_VECTORS %0, %1
469 %3:_(s8) = G_EXTRACT %2, 48
470 %4:_(s32) = G_ANYEXT %3