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