464 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -O0 -mtriple=amdgcn-mesa-mesa3d -mcpu=tahiti -run-pass=legalizer -global-isel-abort=0 %s -o - | FileCheck %s3 4---5name: extract_s32_merge_s64_s32_s32_offset06 7body: |8 bb.0:9 ; CHECK-LABEL: name: extract_s32_merge_s64_s32_s32_offset010 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 011 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY [[C]](s32)12 ; CHECK-NEXT: $vgpr0 = COPY [[COPY]](s32)13 %0:_(s32) = G_CONSTANT i32 014 %1:_(s32) = G_CONSTANT i32 115 %2:_(s64) = G_MERGE_VALUES %0, %116 %3:_(s32) = G_EXTRACT %2, 017 $vgpr0 = COPY %318...19 20---21name: extract_s32_merge_s64_s32_s32_offset3222 23body: |24 bb.0:25 ; CHECK-LABEL: name: extract_s32_merge_s64_s32_s32_offset3226 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 127 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY [[C]](s32)28 ; CHECK-NEXT: $vgpr0 = COPY [[COPY]](s32)29 %0:_(s32) = G_CONSTANT i32 030 %1:_(s32) = G_CONSTANT i32 131 %2:_(s64) = G_MERGE_VALUES %0, %132 %3:_(s32) = G_EXTRACT %2, 3233 $vgpr0 = COPY %334...35 36---37name: extract_s64_merge_s128_s64_s64_offset038 39body: |40 bb.0:41 ; CHECK-LABEL: name: extract_s64_merge_s128_s64_s64_offset042 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 043 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY [[C]](s64)44 ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[COPY]](s64)45 %0:_(s64) = G_CONSTANT i64 046 %1:_(s64) = G_CONSTANT i64 147 %2:_(s128) = G_MERGE_VALUES %0, %148 %3:_(s64) = G_EXTRACT %2, 049 $vgpr0_vgpr1 = COPY %350...51 52---53name: extract_s64_merge_s128_s64_s64_offset6454 55body: |56 bb.0:57 ; CHECK-LABEL: name: extract_s64_merge_s128_s64_s64_offset6458 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 159 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY [[C]](s64)60 ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[COPY]](s64)61 %0:_(s64) = G_CONSTANT i64 062 %1:_(s64) = G_CONSTANT i64 163 %2:_(s128) = G_MERGE_VALUES %0, %164 %3:_(s64) = G_EXTRACT %2, 6465 $vgpr0_vgpr1 = COPY %366...67 68---69name: extract_s32_merge_s128_s64_s64_offset070 71body: |72 bb.0:73 ; CHECK-LABEL: name: extract_s32_merge_s128_s64_s64_offset074 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 075 ; CHECK-NEXT: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[C]](s64), 076 ; CHECK-NEXT: $vgpr0 = COPY [[EXTRACT]](s32)77 %0:_(s64) = G_CONSTANT i64 078 %1:_(s64) = G_CONSTANT i64 179 %2:_(s128) = G_MERGE_VALUES %0, %180 %3:_(s32) = G_EXTRACT %2, 081 $vgpr0 = COPY %382...83 84---85name: extract_s32_merge_s128_s64_s64_offset3286 87body: |88 bb.0:89 ; CHECK-LABEL: name: extract_s32_merge_s128_s64_s64_offset3290 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 091 ; CHECK-NEXT: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[C]](s64), 3292 ; CHECK-NEXT: $vgpr0 = COPY [[EXTRACT]](s32)93 %0:_(s64) = G_CONSTANT i64 094 %1:_(s64) = G_CONSTANT i64 195 %2:_(s128) = G_MERGE_VALUES %0, %196 %3:_(s32) = G_EXTRACT %2, 3297 $vgpr0 = COPY %398...99 100---101name: extract_s32_merge_s128_s64_s64_offset64102 103body: |104 bb.0:105 ; CHECK-LABEL: name: extract_s32_merge_s128_s64_s64_offset64106 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1107 ; CHECK-NEXT: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[C]](s64), 0108 ; CHECK-NEXT: $vgpr0 = COPY [[EXTRACT]](s32)109 %0:_(s64) = G_CONSTANT i64 0110 %1:_(s64) = G_CONSTANT i64 1111 %2:_(s128) = G_MERGE_VALUES %0, %1112 %3:_(s32) = G_EXTRACT %2, 64113 $vgpr0 = COPY %3114...115 116---117name: extract_s32_merge_s128_s64_s64_offset96118 119body: |120 bb.0:121 ; CHECK-LABEL: name: extract_s32_merge_s128_s64_s64_offset96122 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1123 ; CHECK-NEXT: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[C]](s64), 32124 ; CHECK-NEXT: $vgpr0 = COPY [[EXTRACT]](s32)125 %0:_(s64) = G_CONSTANT i64 0126 %1:_(s64) = G_CONSTANT i64 1127 %2:_(s128) = G_MERGE_VALUES %0, %1128 %3:_(s32) = G_EXTRACT %2, 96129 $vgpr0 = COPY %3130...131 132# Destination size fits, but is skewed from the start of the register.133---134name: extract_s16_merge_s128_s64_s64_offset18135 136body: |137 bb.0:138 ; CHECK-LABEL: name: extract_s16_merge_s128_s64_s64_offset18139 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0140 ; CHECK-NEXT: [[EXTRACT:%[0-9]+]]:_(s16) = G_EXTRACT [[C]](s64), 18141 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[EXTRACT]](s16)142 ; CHECK-NEXT: $vgpr0 = COPY [[ANYEXT]](s32)143 %0:_(s64) = G_CONSTANT i64 0144 %1:_(s64) = G_CONSTANT i64 1145 %2:_(s128) = G_MERGE_VALUES %0, %1146 %3:_(s16) = G_EXTRACT %2, 18147 %4:_(s32) = G_ANYEXT %3148 $vgpr0 = COPY %4149...150 151# Destination size fits, but is skewed from the start of the register.152---153name: extract_s16_merge_s128_s64_s64_offset82154 155body: |156 bb.0:157 ; CHECK-LABEL: name: extract_s16_merge_s128_s64_s64_offset82158 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1159 ; CHECK-NEXT: [[EXTRACT:%[0-9]+]]:_(s16) = G_EXTRACT [[C]](s64), 18160 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[EXTRACT]](s16)161 ; CHECK-NEXT: $vgpr0 = COPY [[ANYEXT]](s32)162 %0:_(s64) = G_CONSTANT i64 0163 %1:_(s64) = G_CONSTANT i64 1164 %2:_(s128) = G_MERGE_VALUES %0, %1165 %3:_(s16) = G_EXTRACT %2, 82166 %4:_(s32) = G_ANYEXT %3167 $vgpr0 = COPY %4168...169 170 171# Can't handle this since it spans two registers172---173name: extract_s64_merge_s128_s64_s64_offset32174 175body: |176 bb.0:177 ; CHECK-LABEL: name: extract_s64_merge_s128_s64_s64_offset32178 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0179 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1180 ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[C]](s64), [[C1]](s64)181 ; CHECK-NEXT: [[EXTRACT:%[0-9]+]]:_(s64) = G_EXTRACT [[MV]](s128), 32182 ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[EXTRACT]](s64)183 %0:_(s64) = G_CONSTANT i64 0184 %1:_(s64) = G_CONSTANT i64 1185 %2:_(s128) = G_MERGE_VALUES %0, %1186 %3:_(s64) = G_EXTRACT %2, 32187 $vgpr0_vgpr1 = COPY %3188...189 190 191# Only the last bit spans to another register192---193name: extract_s16_merge_s32_s32_offset1194 195body: |196 bb.0:197 ; CHECK-LABEL: name: extract_s16_merge_s32_s32_offset1198 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0199 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1200 ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[C]](s32), [[C1]](s32)201 ; CHECK-NEXT: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[MV]](s64), 1202 ; CHECK-NEXT: $vgpr0 = COPY [[EXTRACT]](s32)203 %0:_(s32) = G_CONSTANT i32 0204 %1:_(s32) = G_CONSTANT i32 1205 %2:_(s64) = G_MERGE_VALUES %0, %1206 %3:_(s32) = G_EXTRACT %2, 1207 $vgpr0 = COPY %3208...209 210 211# Test with some merges with 3 operands212 213---214name: extract_s32_merge_s96_s32_s32_s32_offset0215 216body: |217 bb.0:218 ; CHECK-LABEL: name: extract_s32_merge_s96_s32_s32_s32_offset0219 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0220 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY [[C]](s32)221 ; CHECK-NEXT: $vgpr0 = COPY [[COPY]](s32)222 %0:_(s32) = G_CONSTANT i32 0223 %1:_(s32) = G_CONSTANT i32 1224 %2:_(s32) = G_CONSTANT i32 1225 %3:_(s96) = G_MERGE_VALUES %0, %1, %2226 %4:_(s32) = G_EXTRACT %3, 0227 $vgpr0 = COPY %4228...229 230---231name: extract_s32_merge_s96_s32_s32_s32_offset64232 233body: |234 bb.0:235 ; CHECK-LABEL: name: extract_s32_merge_s96_s32_s32_s32_offset64236 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1237 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY [[C]](s32)238 ; CHECK-NEXT: $vgpr0 = COPY [[COPY]](s32)239 %0:_(s32) = G_CONSTANT i32 0240 %1:_(s32) = G_CONSTANT i32 1241 %2:_(s32) = G_CONSTANT i32 1242 %3:_(s96) = G_MERGE_VALUES %0, %1, %2243 %4:_(s32) = G_EXTRACT %3, 64244 $vgpr0 = COPY %4245...246 247---248name: extract_s64_merge_s96_s32_s32_s32_offset0249 250body: |251 bb.0:252 ; CHECK-LABEL: name: extract_s64_merge_s96_s32_s32_s32_offset0253 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0254 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1255 ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 1256 ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s96) = G_MERGE_VALUES [[C]](s32), [[C1]](s32), [[C2]](s32)257 ; CHECK-NEXT: [[EXTRACT:%[0-9]+]]:_(s64) = G_EXTRACT [[MV]](s96), 0258 ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[EXTRACT]](s64)259 %0:_(s32) = G_CONSTANT i32 0260 %1:_(s32) = G_CONSTANT i32 1261 %2:_(s32) = G_CONSTANT i32 1262 %3:_(s96) = G_MERGE_VALUES %0, %1, %2263 %4:_(s64) = G_EXTRACT %3, 0264 $vgpr0_vgpr1 = COPY %4265...266 267---268name: extract_s64_merge_s96_s32_s32_s32_offset32269 270body: |271 bb.0:272 ; CHECK-LABEL: name: extract_s64_merge_s96_s32_s32_s32_offset32273 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0274 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1275 ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 1276 ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s96) = G_MERGE_VALUES [[C]](s32), [[C1]](s32), [[C2]](s32)277 ; CHECK-NEXT: [[EXTRACT:%[0-9]+]]:_(s64) = G_EXTRACT [[MV]](s96), 32278 ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[EXTRACT]](s64)279 %0:_(s32) = G_CONSTANT i32 0280 %1:_(s32) = G_CONSTANT i32 1281 %2:_(s32) = G_CONSTANT i32 1282 %3:_(s96) = G_MERGE_VALUES %0, %1, %2283 %4:_(s64) = G_EXTRACT %3, 32284 $vgpr0_vgpr1 = COPY %4285...286 287# Test build_vector sources288---289name: extract_s64_build_vector_v2s64_s64_s64_offset0290 291body: |292 bb.0:293 ; CHECK-LABEL: name: extract_s64_build_vector_v2s64_s64_s64_offset0294 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0295 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY [[C]](s64)296 ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[COPY]](s64)297 %0:_(s64) = G_CONSTANT i64 0298 %1:_(s64) = G_CONSTANT i64 1299 %2:_(<2 x s64>) = G_BUILD_VECTOR %0, %1300 %3:_(s64) = G_EXTRACT %2, 0301 $vgpr0_vgpr1 = COPY %3302...303 304---305name: extract_s64_build_vector_v2s64_s64_s64_offset64306 307body: |308 bb.0:309 ; CHECK-LABEL: name: extract_s64_build_vector_v2s64_s64_s64_offset64310 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1311 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY [[C]](s64)312 ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[COPY]](s64)313 %0:_(s64) = G_CONSTANT i64 0314 %1:_(s64) = G_CONSTANT i64 1315 %2:_(<2 x s64>) = G_BUILD_VECTOR %0, %1316 %3:_(s64) = G_EXTRACT %2, 64317 $vgpr0_vgpr1 = COPY %3318...319 320---321name: extract_s64_build_vector_v2s64_s64_s64_offset32322 323body: |324 bb.0:325 ; CHECK-LABEL: name: extract_s64_build_vector_v2s64_s64_s64_offset32326 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0327 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1328 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C1]](s64)329 ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(s128) = G_BITCAST [[BUILD_VECTOR]](<2 x s64>)330 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[BITCAST]](s128)331 ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 32332 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR [[UV]], [[C2]](s32)333 ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[UV1]], [[C2]](s32)334 ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR [[LSHR]], [[SHL]]335 ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[OR]](s64)336 %0:_(s64) = G_CONSTANT i64 0337 %1:_(s64) = G_CONSTANT i64 1338 %2:_(<2 x s64>) = G_BUILD_VECTOR %0, %1339 %3:_(s64) = G_EXTRACT %2, 32340 $vgpr0_vgpr1 = COPY %3341...342 343# Test extracting something smaller than the element size344---345name: extract_s32_build_vector_v2s64_s64_s64_offset64346 347body: |348 bb.0:349 ; CHECK-LABEL: name: extract_s32_build_vector_v2s64_s64_s64_offset64350 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1351 ; CHECK-NEXT: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[C]](s64), 0352 ; CHECK-NEXT: $vgpr0 = COPY [[EXTRACT]](s32)353 %0:_(s64) = G_CONSTANT i64 0354 %1:_(s64) = G_CONSTANT i64 1355 %2:_(<2 x s64>) = G_BUILD_VECTOR %0, %1356 %3:_(s32) = G_EXTRACT %2, 64357 $vgpr0 = COPY %3358 359...360 361# Test concat_vector sources362---363name: extract_v2s16_build_vector_v2s64_v2s16_v2s16_offset0364 365body: |366 bb.0:367 liveins: $vgpr0, $vgpr1368 ; CHECK-LABEL: name: extract_v2s16_build_vector_v2s64_v2s16_v2s16_offset0369 ; CHECK: liveins: $vgpr0, $vgpr1370 ; CHECK-NEXT: {{ $}}371 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0372 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY [[COPY]](<2 x s16>)373 ; CHECK-NEXT: $vgpr0 = COPY [[COPY1]](<2 x s16>)374 %0:_(<2 x s16>) = COPY $vgpr0375 %1:_(<2 x s16>) = COPY $vgpr1376 %2:_(<4 x s16>) = G_CONCAT_VECTORS %0, %1377 %3:_(<2 x s16>) = G_EXTRACT %2, 0378 $vgpr0 = COPY %3379...380 381---382name: extract_v2s16_build_vector_v2s64_v2s16_v2s16_offset32383 384body: |385 bb.0:386 liveins: $vgpr0, $vgpr1387 ; CHECK-LABEL: name: extract_v2s16_build_vector_v2s64_v2s16_v2s16_offset32388 ; CHECK: liveins: $vgpr0, $vgpr1389 ; CHECK-NEXT: {{ $}}390 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1391 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY [[COPY]](<2 x s16>)392 ; CHECK-NEXT: $vgpr0 = COPY [[COPY1]](<2 x s16>)393 %0:_(<2 x s16>) = COPY $vgpr0394 %1:_(<2 x s16>) = COPY $vgpr1395 %2:_(<4 x s16>) = G_CONCAT_VECTORS %0, %1396 %3:_(<2 x s16>) = G_EXTRACT %2, 32397 $vgpr0 = COPY %3398...399 400# Test extracting only a single element, not a subvector401---402name: extract_s16_build_vector_v2s64_v2s16_v2s16_offset32403 404body: |405 bb.0:406 liveins: $vgpr0, $vgpr1407 ; CHECK-LABEL: name: extract_s16_build_vector_v2s64_v2s16_v2s16_offset32408 ; CHECK: liveins: $vgpr0, $vgpr1409 ; CHECK-NEXT: {{ $}}410 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1411 ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>)412 ; CHECK-NEXT: $vgpr0 = COPY [[BITCAST]](s32)413 %0:_(<2 x s16>) = COPY $vgpr0414 %1:_(<2 x s16>) = COPY $vgpr1415 %2:_(<4 x s16>) = G_CONCAT_VECTORS %0, %1416 %3:_(s16) = G_EXTRACT %2, 32417 %4:_(s32) = G_ANYEXT %3418 $vgpr0 = COPY %4419...420 421---422name: extract_s16_build_vector_v2s64_v2s16_v2s16_offset48423 424body: |425 bb.0:426 liveins: $vgpr0, $vgpr1427 ; CHECK-LABEL: name: extract_s16_build_vector_v2s64_v2s16_v2s16_offset48428 ; CHECK: liveins: $vgpr0, $vgpr1429 ; CHECK-NEXT: {{ $}}430 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1431 ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>)432 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16433 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)434 ; CHECK-NEXT: $vgpr0 = COPY [[LSHR]](s32)435 %0:_(<2 x s16>) = COPY $vgpr0436 %1:_(<2 x s16>) = COPY $vgpr1437 %2:_(<4 x s16>) = G_CONCAT_VECTORS %0, %1438 %3:_(s16) = G_EXTRACT %2, 48439 %4:_(s32) = G_ANYEXT %3440 $vgpr0 = COPY %4441...442 443# Test extracting less than an element444---445name: extract_s8_build_vector_v2s64_v2s16_v2s16_offset48446 447body: |448 bb.0:449 liveins: $vgpr0, $vgpr1450 ; CHECK-LABEL: name: extract_s8_build_vector_v2s64_v2s16_v2s16_offset48451 ; CHECK: liveins: $vgpr0, $vgpr1452 ; CHECK-NEXT: {{ $}}453 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1454 ; CHECK-NEXT: [[EXTRACT:%[0-9]+]]:_(s8) = G_EXTRACT [[COPY]](<2 x s16>), 16455 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[EXTRACT]](s8)456 ; CHECK-NEXT: $vgpr0 = COPY [[ANYEXT]](s32)457 %0:_(<2 x s16>) = COPY $vgpr0458 %1:_(<2 x s16>) = COPY $vgpr1459 %2:_(<4 x s16>) = G_CONCAT_VECTORS %0, %1460 %3:_(s8) = G_EXTRACT %2, 48461 %4:_(s32) = G_ANYEXT %3462 $vgpr0 = COPY %4463...464