brintos

brintos / llvm-project-archived public Read only

0
0
Text · 14.7 KiB · b72abbf Raw
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