brintos

brintos / llvm-project-archived public Read only

0
0
Text · 17.3 KiB · 9013410 Raw
414 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple aarch64-apple-ios  -run-pass=aarch64-prelegalizer-combiner %s -o - | FileCheck %s3 4# Check that we canonicalize shuffle_vector(Src1, Src2, mask(0,1,2,3))5# into concat_vector(Src1, Src2).6---7name: shuffle_vector_to_concat_vector_01238tracksRegLiveness: true9body:             |10  bb.1:11    liveins: $d0, $d112 13    ; CHECK-LABEL: name: shuffle_vector_to_concat_vector_012314    ; CHECK: liveins: $d0, $d115    ; CHECK-NEXT: {{  $}}16    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $d017    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $d118    ; CHECK-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s32>) = G_CONCAT_VECTORS [[COPY]](<2 x s32>), [[COPY1]](<2 x s32>)19    ; CHECK-NEXT: RET_ReallyLR implicit [[CONCAT_VECTORS]](<4 x s32>)20    %0:_(<2 x s32>) = COPY $d021    %1:_(<2 x s32>) = COPY $d122    %2:_(<4 x s32>) = G_SHUFFLE_VECTOR %0(<2 x s32>), %1(<2 x s32>), shufflemask(0, 1, 2, 3)23    RET_ReallyLR implicit %224...25# Check that we canonicalize shuffle_vector(Src1, Src2, mask(2,3,0,1,2,3))26# into concat_vector(Src2, Src1, Src2).27---28name: shuffle_vector_to_concat_vector_23012329tracksRegLiveness: true30body:             |31  bb.1:32    liveins: $d0, $d133 34    ; CHECK-LABEL: name: shuffle_vector_to_concat_vector_23012335    ; CHECK: liveins: $d0, $d136    ; CHECK-NEXT: {{  $}}37    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $d038    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $d139    ; CHECK-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<6 x s32>) = G_CONCAT_VECTORS [[COPY1]](<2 x s32>), [[COPY]](<2 x s32>), [[COPY1]](<2 x s32>)40    ; CHECK-NEXT: RET_ReallyLR implicit [[CONCAT_VECTORS]](<6 x s32>)41    %0:_(<2 x s32>) = COPY $d042    %1:_(<2 x s32>) = COPY $d143    %2:_(<6 x s32>) = G_SHUFFLE_VECTOR %0(<2 x s32>), %1(<2 x s32>), shufflemask(2,3,0,1,2,3)44    RET_ReallyLR implicit %245...46# Check that we canonicalize shuffle_vector(Src1, Src2, mask(2,undef,0,1,undef,3))47# into concat_vector(Src2, Src1, Src2).48---49name: shuffle_vector_to_concat_vector_2undef01undef350tracksRegLiveness: true51body:             |52  bb.1:53    liveins: $d0, $d154 55    ; CHECK-LABEL: name: shuffle_vector_to_concat_vector_2undef01undef356    ; CHECK: liveins: $d0, $d157    ; CHECK-NEXT: {{  $}}58    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $d059    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $d160    ; CHECK-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<6 x s32>) = G_CONCAT_VECTORS [[COPY1]](<2 x s32>), [[COPY]](<2 x s32>), [[COPY1]](<2 x s32>)61    ; CHECK-NEXT: RET_ReallyLR implicit [[CONCAT_VECTORS]](<6 x s32>)62    %0:_(<2 x s32>) = COPY $d063    %1:_(<2 x s32>) = COPY $d164    %2:_(<6 x s32>) = G_SHUFFLE_VECTOR %0(<2 x s32>), %1(<2 x s32>), shufflemask(2,-1,0,1,-1,3)65    RET_ReallyLR implicit %266...67# Check that we don't canonicalize shuffle_vector into concat_vectors68# when the sources get half mixed.69---70name: shuffle_vector_to_concat_vector_mixed_src_200123_neg71tracksRegLiveness: true72body:             |73  bb.1:74    liveins: $d0, $d175 76    ; CHECK-LABEL: name: shuffle_vector_to_concat_vector_mixed_src_200123_neg77    ; CHECK: liveins: $d0, $d178    ; CHECK-NEXT: {{  $}}79    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $d080    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $d181    ; CHECK-NEXT: [[SHUF:%[0-9]+]]:_(<6 x s32>) = G_SHUFFLE_VECTOR [[COPY]](<2 x s32>), [[COPY1]], shufflemask(2, 0, 0, 1, 2, 3)82    ; CHECK-NEXT: RET_ReallyLR implicit [[SHUF]](<6 x s32>)83    %0:_(<2 x s32>) = COPY $d084    %1:_(<2 x s32>) = COPY $d185    %2:_(<6 x s32>) = G_SHUFFLE_VECTOR %0(<2 x s32>), %1(<2 x s32>), shufflemask(2,0,0,1,2,3)86    RET_ReallyLR implicit %287...88# Check that we produce implicit_def while canonicalizing shuffle_vector(Src1, Src2, mask(2,undef,undef,undef,undef,1))89# into concat_vector(Src2, undef, Src1).90---91name: shuffle_vector_to_concat_vector_2undef192tracksRegLiveness: true93body:             |94  bb.1:95    liveins: $d0, $d196 97    ; CHECK-LABEL: name: shuffle_vector_to_concat_vector_2undef198    ; CHECK: liveins: $d0, $d199    ; CHECK-NEXT: {{  $}}100    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $d0101    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $d1102    ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(<2 x s32>) = G_IMPLICIT_DEF103    ; CHECK-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<6 x s32>) = G_CONCAT_VECTORS [[COPY1]](<2 x s32>), [[DEF]](<2 x s32>), [[COPY]](<2 x s32>)104    ; CHECK-NEXT: RET_ReallyLR implicit [[CONCAT_VECTORS]](<6 x s32>)105    %0:_(<2 x s32>) = COPY $d0106    %1:_(<2 x s32>) = COPY $d1107    %2:_(<6 x s32>) = G_SHUFFLE_VECTOR %0(<2 x s32>), %1(<2 x s32>), shufflemask(2,-1,-1,-1,-1,1)108    RET_ReallyLR implicit %2109...110# Check that we don't canonicalize shuffle_vector into concat_vectors111# if a source is flipped.112---113name: shuffle_vector_to_concat_vector_src_flipped_230132_neg114tracksRegLiveness: true115body:             |116  bb.1:117    liveins: $d0, $d1118 119    ; CHECK-LABEL: name: shuffle_vector_to_concat_vector_src_flipped_230132_neg120    ; CHECK: liveins: $d0, $d1121    ; CHECK-NEXT: {{  $}}122    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $d0123    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $d1124    ; CHECK-NEXT: [[SHUF:%[0-9]+]]:_(<6 x s32>) = G_SHUFFLE_VECTOR [[COPY]](<2 x s32>), [[COPY1]], shufflemask(2, 3, 0, 1, 3, 2)125    ; CHECK-NEXT: RET_ReallyLR implicit [[SHUF]](<6 x s32>)126    %0:_(<2 x s32>) = COPY $d0127    %1:_(<2 x s32>) = COPY $d1128    %2:_(<6 x s32>) = G_SHUFFLE_VECTOR %0(<2 x s32>), %1(<2 x s32>), shufflemask(2,3,0,1,3,2)129    RET_ReallyLR implicit %2130...131# Check that we don't canonicalize shuffle_vector into concat_vectors132# if a source is flipped and the other half is undef.133---134name: shuffle_vector_to_concat_vector_src_flipped_23013undef_neg135tracksRegLiveness: true136body:             |137  bb.1:138    liveins: $d0, $d1139 140    ; CHECK-LABEL: name: shuffle_vector_to_concat_vector_src_flipped_23013undef_neg141    ; CHECK: liveins: $d0, $d1142    ; CHECK-NEXT: {{  $}}143    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $d0144    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $d1145    ; CHECK-NEXT: [[SHUF:%[0-9]+]]:_(<6 x s32>) = G_SHUFFLE_VECTOR [[COPY]](<2 x s32>), [[COPY1]], shufflemask(2, 3, 0, 1, 3, undef)146    ; CHECK-NEXT: RET_ReallyLR implicit [[SHUF]](<6 x s32>)147    %0:_(<2 x s32>) = COPY $d0148    %1:_(<2 x s32>) = COPY $d1149    %2:_(<6 x s32>) = G_SHUFFLE_VECTOR %0(<2 x s32>), %1(<2 x s32>), shufflemask(2,3,0,1,3,-1)150    RET_ReallyLR implicit %2151...152 153# Check that we canonicalize shuffle_vector(Src1, Src2, mask(0,1,2,3,4,5,6,7))154# into concat_vector(Src1, Src2) with bigger vector type.155---156name: shuffle_vector_to_concat_vector_01234567157tracksRegLiveness: true158body:             |159  bb.1:160    liveins: $q0, $q1161 162    ; CHECK-LABEL: name: shuffle_vector_to_concat_vector_01234567163    ; CHECK: liveins: $q0, $q1164    ; CHECK-NEXT: {{  $}}165    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0166    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $q1167    ; CHECK-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<8 x s32>) = G_CONCAT_VECTORS [[COPY]](<4 x s32>), [[COPY1]](<4 x s32>)168    ; CHECK-NEXT: RET_ReallyLR implicit [[CONCAT_VECTORS]](<8 x s32>)169    %0:_(<4 x s32>) = COPY $q0170    %1:_(<4 x s32>) = COPY $q1171    %2:_(<8 x s32>) = G_SHUFFLE_VECTOR %0(<4 x s32>), %1(<4 x s32>), shufflemask(0, 1, 2, 3, 4, 5, 6, 7)172    RET_ReallyLR implicit %2173...174# Check that we canonicalize shuffle_vector(Src1, Src2, mask(4,5,6,7,0,1,2,3))175# into concat_vector(Src2, Src1, Src2) with bigger vector type.176---177name: shuffle_vector_to_concat_vector_45670123178tracksRegLiveness: true179body:             |180  bb.1:181    liveins: $q0, $q1182 183    ; CHECK-LABEL: name: shuffle_vector_to_concat_vector_45670123184    ; CHECK: liveins: $q0, $q1185    ; CHECK-NEXT: {{  $}}186    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0187    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $q1188    ; CHECK-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<12 x s32>) = G_CONCAT_VECTORS [[COPY1]](<4 x s32>), [[COPY]](<4 x s32>), [[COPY1]](<4 x s32>)189    ; CHECK-NEXT: RET_ReallyLR implicit [[CONCAT_VECTORS]](<12 x s32>)190    %0:_(<4 x s32>) = COPY $q0191    %1:_(<4 x s32>) = COPY $q1192    %2:_(<12 x s32>) = G_SHUFFLE_VECTOR %0(<4 x s32>), %1(<4 x s32>), shufflemask(4,5,6,7,0,1,2,3,4,5,6,7)193    RET_ReallyLR implicit %2194...195# Check that we canonicalize shuffle_vector(Src1, Src2, mask(4,5,undef,undef,0,1,2,3,undef,undef,6,7))196# into concat_vector(Src2, Src1, Src2) with bigger vector type.197---198name: shuffle_vector_to_concat_vector_45undefundef0123undefundef67199tracksRegLiveness: true200body:             |201  bb.1:202    liveins: $q0, $q1203 204    ; CHECK-LABEL: name: shuffle_vector_to_concat_vector_45undefundef0123undefundef67205    ; CHECK: liveins: $q0, $q1206    ; CHECK-NEXT: {{  $}}207    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0208    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $q1209    ; CHECK-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<12 x s32>) = G_CONCAT_VECTORS [[COPY1]](<4 x s32>), [[COPY]](<4 x s32>), [[COPY1]](<4 x s32>)210    ; CHECK-NEXT: RET_ReallyLR implicit [[CONCAT_VECTORS]](<12 x s32>)211    %0:_(<4 x s32>) = COPY $q0212    %1:_(<4 x s32>) = COPY $q1213    %2:_(<12 x s32>) = G_SHUFFLE_VECTOR %0(<4 x s32>), %1(<4 x s32>), shufflemask(4,5,-1,-1,0,1,2,3,-1,-1,6,7)214    RET_ReallyLR implicit %2215...216# Check that we don't canonicalize shuffle_vector into concat_vectors217# when the sources get half mixed with bigger vector type.218---219name: shuffle_vector_to_concat_vector_mixed_src_456000123_neg220tracksRegLiveness: true221body:             |222  bb.1:223    liveins: $q0, $q1224 225    ; CHECK-LABEL: name: shuffle_vector_to_concat_vector_mixed_src_456000123_neg226    ; CHECK: liveins: $q0, $q1227    ; CHECK-NEXT: {{  $}}228    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0229    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $q1230    ; CHECK-NEXT: [[SHUF:%[0-9]+]]:_(<8 x s32>) = G_SHUFFLE_VECTOR [[COPY]](<4 x s32>), [[COPY1]], shufflemask(4, 5, 6, 0, 0, 1, 2, 3)231    ; CHECK-NEXT: RET_ReallyLR implicit [[SHUF]](<8 x s32>)232    %0:_(<4 x s32>) = COPY $q0233    %1:_(<4 x s32>) = COPY $q1234    %2:_(<8 x s32>) = G_SHUFFLE_VECTOR %0(<4 x s32>), %1(<4 x s32>), shufflemask(4,5,6,0,0,1,2,3)235    RET_ReallyLR implicit %2236...237# Check that we produce implicit_def while canonicalizing shuffle_vector(Src1, Src2, mask(2,undef,undef,undef,undef,1))238# into concat_vector(Src2, undef, Src1) with bigger vector type.239---240name: shuffle_vector_to_concat_vector_45undefundefundefundefundefundefundefundef23241tracksRegLiveness: true242body:             |243  bb.1:244    liveins: $q0, $q1245 246    ; CHECK-LABEL: name: shuffle_vector_to_concat_vector_45undefundefundefundefundefundefundefundef23247    ; CHECK: liveins: $q0, $q1248    ; CHECK-NEXT: {{  $}}249    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0250    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $q1251    ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(<4 x s32>) = G_IMPLICIT_DEF252    ; CHECK-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<12 x s32>) = G_CONCAT_VECTORS [[COPY1]](<4 x s32>), [[DEF]](<4 x s32>), [[COPY]](<4 x s32>)253    ; CHECK-NEXT: RET_ReallyLR implicit [[CONCAT_VECTORS]](<12 x s32>)254    %0:_(<4 x s32>) = COPY $q0255    %1:_(<4 x s32>) = COPY $q1256    %2:_(<12 x s32>) = G_SHUFFLE_VECTOR %0(<4 x s32>), %1(<4 x s32>), shufflemask(4,5,-1,-1,-1,-1,-1,-1,-1,-1,2,3)257    RET_ReallyLR implicit %2258...259# Check that we don't canonicalize shuffle_vector into concat_vectors260# when we grab less than the full vectors.261---262name: shuffle_vector_to_concat_vector_4501_neg263tracksRegLiveness: true264body:             |265  bb.1:266    liveins: $q0, $q1267 268    ; CHECK-LABEL: name: shuffle_vector_to_concat_vector_4501_neg269    ; CHECK: liveins: $q0, $q1270    ; CHECK-NEXT: {{  $}}271    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0272    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $q1273    ; CHECK-NEXT: [[SHUF:%[0-9]+]]:_(<4 x s32>) = G_SHUFFLE_VECTOR [[COPY]](<4 x s32>), [[COPY1]], shufflemask(4, 5, 0, 1)274    ; CHECK-NEXT: RET_ReallyLR implicit [[SHUF]](<4 x s32>)275    %0:_(<4 x s32>) = COPY $q0276    %1:_(<4 x s32>) = COPY $q1277    %2:_(<4 x s32>) = G_SHUFFLE_VECTOR %0(<4 x s32>), %1(<4 x s32>), shufflemask(4,5,0,1)278    RET_ReallyLR implicit %2279...280# Check that we don't canonicalize shuffle_vector into concat_vectors281# if a source is flipped and the other half is undef with bigger vector.282---283name: shuffle_vector_to_concat_vector_src_flipped_4567012367undefundef_neg284tracksRegLiveness: true285body:             |286  bb.1:287    liveins: $q0, $q1288 289    ; CHECK-LABEL: name: shuffle_vector_to_concat_vector_src_flipped_4567012367undefundef_neg290    ; CHECK: liveins: $q0, $q1291    ; CHECK-NEXT: {{  $}}292    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0293    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $q1294    ; CHECK-NEXT: [[SHUF:%[0-9]+]]:_(<12 x s32>) = G_SHUFFLE_VECTOR [[COPY]](<4 x s32>), [[COPY1]], shufflemask(4, 5, 6, 7, 0, 1, 2, 3, 6, 7, undef, undef)295    ; CHECK-NEXT: RET_ReallyLR implicit [[SHUF]](<12 x s32>)296    %0:_(<4 x s32>) = COPY $q0297    %1:_(<4 x s32>) = COPY $q1298    %2:_(<12 x s32>) = G_SHUFFLE_VECTOR %0(<4 x s32>), %1(<4 x s32>), shufflemask(4,5,6,7,0,1,2,3,6,7,-1,-1)299    RET_ReallyLR implicit %2300...301# Check that we canonicalize shuffle_vector(Src1, Src2, mask(4,5,undef,undef,0,1,2,3,undef,undef,6,7))302# into concat_vector(Src2, Src1, Src2) with vector of pointers.303---304name: shuffle_vector_to_concat_vector_45undefundef0123undefundef67_ptr305tracksRegLiveness: true306body:             |307  bb.1:308    liveins: $q0_q1, $q2_q3309 310    ; CHECK-LABEL: name: shuffle_vector_to_concat_vector_45undefundef0123undefundef67_ptr311    ; CHECK: liveins: $q0_q1, $q2_q3312    ; CHECK-NEXT: {{  $}}313    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x p0>) = COPY $q0_q1314    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x p0>) = COPY $q2_q3315    ; CHECK-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<12 x p0>) = G_CONCAT_VECTORS [[COPY1]](<4 x p0>), [[COPY]](<4 x p0>), [[COPY1]](<4 x p0>)316    ; CHECK-NEXT: RET_ReallyLR implicit [[CONCAT_VECTORS]](<12 x p0>)317    %0:_(<4 x p0>) = COPY $q0_q1318    %1:_(<4 x p0>) = COPY $q2_q3319    %2:_(<12 x p0>) = G_SHUFFLE_VECTOR %0(<4 x p0>), %1(<4 x p0>), shufflemask(4,5,-1,-1,0,1,2,3,-1,-1,6,7)320    RET_ReallyLR implicit %2321...322# Check that we don't canonicalize shuffle_vector into concat_vectors323# when the sources get half mixed with vector of pointers.324---325name: shuffle_vector_to_concat_vector_mixed_src_456000123_neg_ptr326tracksRegLiveness: true327body:             |328  bb.1:329    liveins: $q0_q1, $q2_q3330 331    ; CHECK-LABEL: name: shuffle_vector_to_concat_vector_mixed_src_456000123_neg_ptr332    ; CHECK: liveins: $q0_q1, $q2_q3333    ; CHECK-NEXT: {{  $}}334    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x p0>) = COPY $q0_q1335    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x p0>) = COPY $q2_q3336    ; CHECK-NEXT: [[SHUF:%[0-9]+]]:_(<8 x p0>) = G_SHUFFLE_VECTOR [[COPY]](<4 x p0>), [[COPY1]], shufflemask(4, 5, 6, 0, 0, 1, 2, 3)337    ; CHECK-NEXT: RET_ReallyLR implicit [[SHUF]](<8 x p0>)338    %0:_(<4 x p0>) = COPY $q0_q1339    %1:_(<4 x p0>) = COPY $q2_q3340    %2:_(<8 x p0>) = G_SHUFFLE_VECTOR %0(<4 x p0>), %1(<4 x p0>), shufflemask(4,5,6,0,0,1,2,3)341    RET_ReallyLR implicit %2342...343 344# Check that shuffle_vector gets combined into concat_vectors then the345# concat_vectors gets combined into build_vector.346---347name: shuffle_vector_to_build_vector_ptr348tracksRegLiveness: true349body:             |350  bb.1:351    liveins: $x0, $x1, $x2, $x3352 353    ; CHECK-LABEL: name: shuffle_vector_to_build_vector_ptr354    ; CHECK: liveins: $x0, $x1, $x2, $x3355    ; CHECK-NEXT: {{  $}}356    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0357    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x1358    ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(p0) = COPY $x2359    ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(p0) = COPY $x3360    ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x p0>) = G_BUILD_VECTOR [[COPY]](p0), [[COPY1]](p0), [[COPY2]](p0), [[COPY3]](p0)361    ; CHECK-NEXT: RET_ReallyLR implicit [[BUILD_VECTOR]](<4 x p0>)362    %0:_(p0) = COPY $x0363    %1:_(p0) = COPY $x1364    %2:_(p0) = COPY $x2365    %3:_(p0) = COPY $x3366    %4:_(<2 x p0>) = G_BUILD_VECTOR %0(p0), %1367    %5:_(<2 x p0>) = G_BUILD_VECTOR %2(p0), %3368    %6:_(<4 x p0>) = G_SHUFFLE_VECTOR %4(<2 x p0>), %5(<2 x p0>), shufflemask(0,1,2,3)369    RET_ReallyLR implicit %6370...371 372# Check that shuffle_vector on scalars gets combined into build_vector.373---374name: shuffle_vector_on_scalars_to_build_vector_ptr375tracksRegLiveness: true376body:             |377  bb.1:378    liveins: $x0, $x1379 380    ; CHECK-LABEL: name: shuffle_vector_on_scalars_to_build_vector_ptr381    ; CHECK: liveins: $x0, $x1382    ; CHECK-NEXT: {{  $}}383    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0384    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x1385    ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x p0>) = G_BUILD_VECTOR [[COPY]](p0), [[COPY1]](p0), [[COPY]](p0), [[COPY1]](p0)386    ; CHECK-NEXT: RET_ReallyLR implicit [[BUILD_VECTOR]](<4 x p0>)387    %0:_(p0) = COPY $x0388    %1:_(p0) = COPY $x1389    %6:_(<4 x p0>) = G_BUILD_VECTOR %0, %1, %0, %1390    RET_ReallyLR implicit %6391...392 393# Check that shuffle_vector on scalars gets combined into build_vector,394# even if we swap the order of the operands.395---396name: shuffle_vector_on_scalars_to_build_vector_swap_ptr397tracksRegLiveness: true398body:             |399  bb.1:400    liveins: $x0, $x1401 402    ; CHECK-LABEL: name: shuffle_vector_on_scalars_to_build_vector_swap_ptr403    ; CHECK: liveins: $x0, $x1404    ; CHECK-NEXT: {{  $}}405    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0406    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x1407    ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x p0>) = G_BUILD_VECTOR [[COPY1]](p0), [[COPY]](p0)408    ; CHECK-NEXT: RET_ReallyLR implicit [[BUILD_VECTOR]](<2 x p0>)409    %0:_(p0) = COPY $x0410    %1:_(p0) = COPY $x1411    %6:_(<2 x p0>) = G_BUILD_VECTOR %1, %0412    RET_ReallyLR implicit %6413...414