432 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=aarch64 -run-pass=aarch64-postlegalizer-lowering -verify-machineinstrs %s -o - | FileCheck %s3 4---5name: splat_4xi326alignment: 47legalized: true8tracksRegLiveness: true9body: |10 bb.1.entry:11 liveins: $w012 13 ; CHECK-LABEL: name: splat_4xi3214 ; CHECK: liveins: $w015 ; CHECK-NEXT: {{ $}}16 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w017 ; CHECK-NEXT: [[DUP:%[0-9]+]]:_(<4 x s32>) = G_DUP [[COPY]](s32)18 ; CHECK-NEXT: $q0 = COPY [[DUP]](<4 x s32>)19 ; CHECK-NEXT: RET_ReallyLR implicit $q020 %0:_(s32) = COPY $w021 %2:_(<4 x s32>) = G_IMPLICIT_DEF22 %3:_(s64) = G_CONSTANT i64 023 %1:_(<4 x s32>) = G_INSERT_VECTOR_ELT %2, %0(s32), %3(s64)24 %4:_(<4 x s32>) = G_SHUFFLE_VECTOR %1(<4 x s32>), %2, shufflemask(0, 0, 0, 0)25 $q0 = COPY %4(<4 x s32>)26 RET_ReallyLR implicit $q027 28...29---30name: splat_2xi6431alignment: 432legalized: true33tracksRegLiveness: true34body: |35 bb.1.entry:36 liveins: $x037 38 ; CHECK-LABEL: name: splat_2xi6439 ; CHECK: liveins: $x040 ; CHECK-NEXT: {{ $}}41 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x042 ; CHECK-NEXT: [[DUP:%[0-9]+]]:_(<2 x s64>) = G_DUP [[COPY]](s64)43 ; CHECK-NEXT: $q0 = COPY [[DUP]](<2 x s64>)44 ; CHECK-NEXT: RET_ReallyLR implicit $q045 %0:_(s64) = COPY $x046 %2:_(<2 x s64>) = G_IMPLICIT_DEF47 %3:_(s64) = G_CONSTANT i64 048 %1:_(<2 x s64>) = G_INSERT_VECTOR_ELT %2, %0(s64), %3(s64)49 %4:_(<2 x s64>) = G_SHUFFLE_VECTOR %1(<2 x s64>), %2, shufflemask(0, 0)50 $q0 = COPY %4(<2 x s64>)51 RET_ReallyLR implicit $q052 53...54---55name: splat_2xi3256alignment: 457legalized: true58tracksRegLiveness: true59body: |60 bb.1.entry:61 liveins: $w062 63 ; CHECK-LABEL: name: splat_2xi3264 ; CHECK: liveins: $w065 ; CHECK-NEXT: {{ $}}66 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w067 ; CHECK-NEXT: [[DUP:%[0-9]+]]:_(<2 x s32>) = G_DUP [[COPY]](s32)68 ; CHECK-NEXT: $d0 = COPY [[DUP]](<2 x s32>)69 ; CHECK-NEXT: RET_ReallyLR implicit $d070 %0:_(s32) = COPY $w071 %2:_(<2 x s32>) = G_IMPLICIT_DEF72 %3:_(s64) = G_CONSTANT i64 073 %1:_(<2 x s32>) = G_INSERT_VECTOR_ELT %2, %0(s32), %3(s64)74 %4:_(<2 x s32>) = G_SHUFFLE_VECTOR %1(<2 x s32>), %2, shufflemask(0, 0)75 $d0 = COPY %4(<2 x s32>)76 RET_ReallyLR implicit $d077 78...79---80name: splat_4xf3281alignment: 482legalized: true83tracksRegLiveness: true84body: |85 bb.1.entry:86 liveins: $s087 88 ; CHECK-LABEL: name: splat_4xf3289 ; CHECK: liveins: $s090 ; CHECK-NEXT: {{ $}}91 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s092 ; CHECK-NEXT: [[DUP:%[0-9]+]]:_(<4 x s32>) = G_DUP [[COPY]](s32)93 ; CHECK-NEXT: $q0 = COPY [[DUP]](<4 x s32>)94 ; CHECK-NEXT: RET_ReallyLR implicit $q095 %0:_(s32) = COPY $s096 %2:_(<4 x s32>) = G_IMPLICIT_DEF97 %3:_(s64) = G_CONSTANT i64 098 %1:_(<4 x s32>) = G_INSERT_VECTOR_ELT %2, %0(s32), %3(s64)99 %4:_(<4 x s32>) = G_SHUFFLE_VECTOR %1(<4 x s32>), %2, shufflemask(0, 0, 0, 0)100 $q0 = COPY %4(<4 x s32>)101 RET_ReallyLR implicit $q0102 103...104---105name: splat_2xf64106alignment: 4107legalized: true108tracksRegLiveness: true109body: |110 bb.1.entry:111 liveins: $d0112 113 ; CHECK-LABEL: name: splat_2xf64114 ; CHECK: liveins: $d0115 ; CHECK-NEXT: {{ $}}116 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $d0117 ; CHECK-NEXT: [[DUP:%[0-9]+]]:_(<2 x s64>) = G_DUP [[COPY]](s64)118 ; CHECK-NEXT: $q0 = COPY [[DUP]](<2 x s64>)119 ; CHECK-NEXT: RET_ReallyLR implicit $q0120 %0:_(s64) = COPY $d0121 %2:_(<2 x s64>) = G_IMPLICIT_DEF122 %3:_(s64) = G_CONSTANT i64 0123 %1:_(<2 x s64>) = G_INSERT_VECTOR_ELT %2, %0(s64), %3(s64)124 %4:_(<2 x s64>) = G_SHUFFLE_VECTOR %1(<2 x s64>), %2, shufflemask(0, 0)125 $q0 = COPY %4(<2 x s64>)126 RET_ReallyLR implicit $q0127 128...129---130name: splat_2xf32131alignment: 4132legalized: true133tracksRegLiveness: true134body: |135 bb.1.entry:136 liveins: $s0137 138 ; CHECK-LABEL: name: splat_2xf32139 ; CHECK: liveins: $s0140 ; CHECK-NEXT: {{ $}}141 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0142 ; CHECK-NEXT: [[DUP:%[0-9]+]]:_(<2 x s32>) = G_DUP [[COPY]](s32)143 ; CHECK-NEXT: $d0 = COPY [[DUP]](<2 x s32>)144 ; CHECK-NEXT: RET_ReallyLR implicit $d0145 %0:_(s32) = COPY $s0146 %2:_(<2 x s32>) = G_IMPLICIT_DEF147 %3:_(s64) = G_CONSTANT i64 0148 %1:_(<2 x s32>) = G_INSERT_VECTOR_ELT %2, %0(s32), %3(s64)149 %4:_(<2 x s32>) = G_SHUFFLE_VECTOR %1(<2 x s32>), %2, shufflemask(0, 0)150 $d0 = COPY %4(<2 x s32>)151 RET_ReallyLR implicit $d0152 153...154---155name: splat_2xf64_copies156alignment: 4157legalized: true158tracksRegLiveness: true159body: |160 bb.1.entry:161 liveins: $d0162 163 ; This test is exactly the same as splat_2xf64, except it adds two copies.164 ; These copies shouldn't get in the way of matching the dup pattern.165 ; CHECK-LABEL: name: splat_2xf64_copies166 ; CHECK: liveins: $d0167 ; CHECK-NEXT: {{ $}}168 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $d0169 ; CHECK-NEXT: [[DUP:%[0-9]+]]:_(<2 x s64>) = G_DUP [[COPY]](s64)170 ; CHECK-NEXT: $q0 = COPY [[DUP]](<2 x s64>)171 ; CHECK-NEXT: RET_ReallyLR implicit $q0172 %0:_(s64) = COPY $d0173 %2:_(<2 x s64>) = G_IMPLICIT_DEF174 %6:_(<2 x s64>) = COPY %2175 %3:_(s64) = G_CONSTANT i64 0176 %1:_(<2 x s64>) = G_INSERT_VECTOR_ELT %6, %0(s64), %3(s64)177 %7:_(<2 x s64>) = COPY %1178 %4:_(<2 x s64>) = G_SHUFFLE_VECTOR %7(<2 x s64>), %2, shufflemask(0, 0)179 $q0 = COPY %4(<2 x s64>)180 RET_ReallyLR implicit $q0181 182...183---184name: not_all_zeros185alignment: 4186legalized: true187tracksRegLiveness: true188body: |189 bb.1.entry:190 liveins: $x0191 ; Make sure that we don't do the optimization when it's not all zeroes.192 ; CHECK-LABEL: name: not_all_zeros193 ; CHECK: liveins: $x0194 ; CHECK-NEXT: {{ $}}195 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0196 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(<2 x s64>) = G_IMPLICIT_DEF197 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0198 ; CHECK-NEXT: [[IVEC:%[0-9]+]]:_(<2 x s64>) = G_INSERT_VECTOR_ELT [[DEF]], [[COPY]](s64), [[C]](s64)199 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s64>) = COPY [[IVEC]](<2 x s64>)200 ; CHECK-NEXT: $q0 = COPY [[COPY1]](<2 x s64>)201 ; CHECK-NEXT: RET_ReallyLR implicit $q0202 %0:_(s64) = COPY $x0203 %2:_(<2 x s64>) = G_IMPLICIT_DEF204 %3:_(s64) = G_CONSTANT i64 0205 %1:_(<2 x s64>) = G_INSERT_VECTOR_ELT %2, %0(s64), %3(s64)206 %4:_(<2 x s64>) = G_SHUFFLE_VECTOR %1(<2 x s64>), %2, shufflemask(0, 1)207 $q0 = COPY %4(<2 x s64>)208 RET_ReallyLR implicit $q0209 210...211---212name: all_undef213alignment: 4214legalized: true215tracksRegLiveness: true216body: |217 bb.1.entry:218 liveins: $x0219 ; If all the elements are undefined, we consider it a splat. In this case,220 ; we can choose 0 as our index.221 ; We should get a G_DUP here.222 ; CHECK-LABEL: name: all_undef223 ; CHECK: liveins: $x0224 ; CHECK-NEXT: {{ $}}225 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0226 ; CHECK-NEXT: [[DUP:%[0-9]+]]:_(<2 x s64>) = G_DUP [[COPY]](s64)227 ; CHECK-NEXT: $q0 = COPY [[DUP]](<2 x s64>)228 ; CHECK-NEXT: RET_ReallyLR implicit $q0229 %0:_(s64) = COPY $x0230 %2:_(<2 x s64>) = G_IMPLICIT_DEF231 %3:_(s64) = G_CONSTANT i64 0232 %1:_(<2 x s64>) = G_INSERT_VECTOR_ELT %2, %0(s64), %3(s64)233 %4:_(<2 x s64>) = G_SHUFFLE_VECTOR %1(<2 x s64>), %2, shufflemask(-1, -1)234 $q0 = COPY %4(<2 x s64>)235 RET_ReallyLR implicit $q0236 237...238---239name: one_undef240alignment: 4241legalized: true242tracksRegLiveness: true243body: |244 bb.1.entry:245 liveins: $s0246 ; Make sure we can skip past undef values.247 ; We should get a G_DUP here.248 ; CHECK-LABEL: name: one_undef249 ; CHECK: liveins: $s0250 ; CHECK-NEXT: {{ $}}251 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0252 ; CHECK-NEXT: [[DUP:%[0-9]+]]:_(<4 x s32>) = G_DUP [[COPY]](s32)253 ; CHECK-NEXT: $q0 = COPY [[DUP]](<4 x s32>)254 ; CHECK-NEXT: RET_ReallyLR implicit $q0255 %0:_(s32) = COPY $s0256 %2:_(<4 x s32>) = G_IMPLICIT_DEF257 %3:_(s64) = G_CONSTANT i64 0258 %1:_(<4 x s32>) = G_INSERT_VECTOR_ELT %2, %0(s32), %3(s64)259 %4:_(<4 x s32>) = G_SHUFFLE_VECTOR %1(<4 x s32>), %2, shufflemask(0, -1, 0, 0)260 $q0 = COPY %4(<4 x s32>)261 RET_ReallyLR implicit $q0262 263...264---265name: not_all_zeros_with_undefs266alignment: 4267legalized: true268tracksRegLiveness: true269body: |270 bb.1.entry:271 liveins: $s0272 ; CHECK-LABEL: name: not_all_zeros_with_undefs273 ; CHECK: liveins: $s0274 ; CHECK-NEXT: {{ $}}275 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0276 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(<4 x s32>) = G_IMPLICIT_DEF277 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0278 ; CHECK-NEXT: [[IVEC:%[0-9]+]]:_(<4 x s32>) = G_INSERT_VECTOR_ELT [[DEF]], [[COPY]](s32), [[C]](s64)279 ; CHECK-NEXT: [[SHUF:%[0-9]+]]:_(<4 x s32>) = G_SHUFFLE_VECTOR [[IVEC]](<4 x s32>), [[DEF]], shufflemask(undef, 0, 0, 3)280 ; CHECK-NEXT: $q0 = COPY [[SHUF]](<4 x s32>)281 ; CHECK-NEXT: RET_ReallyLR implicit $q0282 %0:_(s32) = COPY $s0283 %2:_(<4 x s32>) = G_IMPLICIT_DEF284 %3:_(s64) = G_CONSTANT i64 0285 %1:_(<4 x s32>) = G_INSERT_VECTOR_ELT %2, %0(s32), %3(s64)286 %4:_(<4 x s32>) = G_SHUFFLE_VECTOR %1(<4 x s32>), %2, shufflemask(-1, 0, 0, 3)287 $q0 = COPY %4(<4 x s32>)288 RET_ReallyLR implicit $q0289 290...291---292name: splat_4xi16293alignment: 4294legalized: true295tracksRegLiveness: true296body: |297 bb.1.entry:298 liveins: $h0299 ; CHECK-LABEL: name: splat_4xi16300 ; CHECK: liveins: $h0301 ; CHECK-NEXT: {{ $}}302 ; CHECK-NEXT: %copy:_(s16) = COPY $h0303 ; CHECK-NEXT: %splat:_(<4 x s16>) = G_DUP %copy(s16)304 ; CHECK-NEXT: $d0 = COPY %splat(<4 x s16>)305 ; CHECK-NEXT: RET_ReallyLR implicit $d0306 %copy:_(s16) = COPY $h0307 %undef:_(<4 x s16>) = G_IMPLICIT_DEF308 %cst:_(s64) = G_CONSTANT i64 0309 %ins:_(<4 x s16>) = G_INSERT_VECTOR_ELT %undef, %copy(s16), %cst(s64)310 %splat:_(<4 x s16>) = G_SHUFFLE_VECTOR %ins(<4 x s16>), %undef, shufflemask(0, 0, 0, 0)311 $d0 = COPY %splat(<4 x s16>)312 RET_ReallyLR implicit $d0313 314...315---316name: splat_8xi8317alignment: 4318legalized: true319tracksRegLiveness: true320body: |321 bb.1.entry:322 liveins: $w0323 ; CHECK-LABEL: name: splat_8xi8324 ; CHECK: liveins: $w0325 ; CHECK-NEXT: {{ $}}326 ; CHECK-NEXT: %copy:_(s32) = COPY $w0327 ; CHECK-NEXT: %splat:_(<8 x s8>) = G_DUP %copy(s32)328 ; CHECK-NEXT: $d0 = COPY %splat(<8 x s8>)329 ; CHECK-NEXT: RET_ReallyLR implicit $d0330 %copy:_(s32) = COPY $w0331 %undef:_(<8 x s8>) = G_IMPLICIT_DEF332 %cst:_(s64) = G_CONSTANT i64 0333 %ins:_(<8 x s8>) = G_INSERT_VECTOR_ELT %undef, %copy(s32), %cst(s64)334 %splat:_(<8 x s8>) = G_SHUFFLE_VECTOR %ins(<8 x s8>), %undef, shufflemask(0, 0, 0, 0, 0, 0, 0, 0)335 $d0 = COPY %splat(<8 x s8>)336 RET_ReallyLR implicit $d0337 338...339---340name: build_vector341alignment: 4342legalized: true343tracksRegLiveness: true344body: |345 bb.1.entry:346 liveins: $w0, $w1, $w2, $w3347 ; The G_SHUFFLE_VECTOR is fed by a G_BUILD_VECTOR, and the 0th input348 ; operand is not a constant. We should get a G_DUP.349 ; CHECK-LABEL: name: build_vector350 ; CHECK: liveins: $w0, $w1, $w2, $w3351 ; CHECK-NEXT: {{ $}}352 ; CHECK-NEXT: %lane:_(s32) = COPY $w0353 ; CHECK-NEXT: %b:_(s32) = COPY $w1354 ; CHECK-NEXT: %c:_(s32) = COPY $w2355 ; CHECK-NEXT: %d:_(s32) = COPY $w3356 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(<4 x s32>) = G_IMPLICIT_DEF357 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0358 ; CHECK-NEXT: [[IVEC:%[0-9]+]]:_(<4 x s32>) = G_INSERT_VECTOR_ELT [[DEF]], %lane(s32), [[C]](s64)359 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1360 ; CHECK-NEXT: [[IVEC1:%[0-9]+]]:_(<4 x s32>) = G_INSERT_VECTOR_ELT [[IVEC]], %b(s32), [[C1]](s64)361 ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 2362 ; CHECK-NEXT: [[IVEC2:%[0-9]+]]:_(<4 x s32>) = G_INSERT_VECTOR_ELT [[IVEC1]], %c(s32), [[C2]](s64)363 ; CHECK-NEXT: [[C3:%[0-9]+]]:_(s64) = G_CONSTANT i64 3364 ; CHECK-NEXT: [[IVEC3:%[0-9]+]]:_(<4 x s32>) = G_INSERT_VECTOR_ELT [[IVEC2]], %d(s32), [[C3]](s64)365 ; CHECK-NEXT: %buildvec:_(<4 x s32>) = COPY [[IVEC3]](<4 x s32>)366 ; CHECK-NEXT: [[C4:%[0-9]+]]:_(s64) = G_CONSTANT i64 0367 ; CHECK-NEXT: %shuf:_(<4 x s32>) = G_DUPLANE32 %buildvec, [[C4]](s64)368 ; CHECK-NEXT: $q0 = COPY %shuf(<4 x s32>)369 ; CHECK-NEXT: RET_ReallyLR implicit $q0370 %lane:_(s32) = COPY $w0371 %b:_(s32) = COPY $w1372 %c:_(s32) = COPY $w2373 %d:_(s32) = COPY $w3374 %undef:_(<4 x s32>) = G_IMPLICIT_DEF375 %buildvec:_(<4 x s32>) = G_BUILD_VECTOR %lane, %b, %c, %d376 %shuf:_(<4 x s32>) = G_SHUFFLE_VECTOR %buildvec(<4 x s32>), %undef, shufflemask(0, 0, 0, 0)377 $q0 = COPY %shuf(<4 x s32>)378 RET_ReallyLR implicit $q0379 380...381---382name: build_vector_rhs383alignment: 4384legalized: true385tracksRegLiveness: true386body: |387 bb.1.entry:388 liveins: $w0, $w1, $w2, $w3, $w4389 ; The G_SHUFFLE_VECTOR is fed by a G_BUILD_VECTOR, and the 0th input390 ; operand is not a constant. We should get a G_DUP.391 ; CHECK-LABEL: name: build_vector_rhs392 ; CHECK: liveins: $w0, $w1, $w2, $w3, $w4393 ; CHECK-NEXT: {{ $}}394 ; CHECK-NEXT: %lane_0:_(s32) = COPY $w0395 ; CHECK-NEXT: %lane_1:_(s32) = COPY $w1396 ; CHECK-NEXT: %b:_(s32) = COPY $w2397 ; CHECK-NEXT: %c:_(s32) = COPY $w3398 ; CHECK-NEXT: %d:_(s32) = COPY $w4399 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(<4 x s32>) = G_IMPLICIT_DEF400 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0401 ; CHECK-NEXT: [[IVEC:%[0-9]+]]:_(<4 x s32>) = G_INSERT_VECTOR_ELT [[DEF]], %lane_0(s32), [[C]](s64)402 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1403 ; CHECK-NEXT: [[IVEC1:%[0-9]+]]:_(<4 x s32>) = G_INSERT_VECTOR_ELT [[IVEC]], %b(s32), [[C1]](s64)404 ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 2405 ; CHECK-NEXT: [[IVEC2:%[0-9]+]]:_(<4 x s32>) = G_INSERT_VECTOR_ELT [[IVEC1]], %c(s32), [[C2]](s64)406 ; CHECK-NEXT: [[C3:%[0-9]+]]:_(s64) = G_CONSTANT i64 3407 ; CHECK-NEXT: [[IVEC3:%[0-9]+]]:_(<4 x s32>) = G_INSERT_VECTOR_ELT [[IVEC2]], %d(s32), [[C3]](s64)408 ; CHECK-NEXT: %buildvec0:_(<4 x s32>) = COPY [[IVEC3]](<4 x s32>)409 ; CHECK-NEXT: [[DEF1:%[0-9]+]]:_(<4 x s32>) = G_IMPLICIT_DEF410 ; CHECK-NEXT: [[C4:%[0-9]+]]:_(s64) = G_CONSTANT i64 0411 ; CHECK-NEXT: [[IVEC4:%[0-9]+]]:_(<4 x s32>) = G_INSERT_VECTOR_ELT [[DEF1]], %lane_1(s32), [[C4]](s64)412 ; CHECK-NEXT: [[C5:%[0-9]+]]:_(s64) = G_CONSTANT i64 1413 ; CHECK-NEXT: [[IVEC5:%[0-9]+]]:_(<4 x s32>) = G_INSERT_VECTOR_ELT [[IVEC4]], %b(s32), [[C5]](s64)414 ; CHECK-NEXT: [[C6:%[0-9]+]]:_(s64) = G_CONSTANT i64 2415 ; CHECK-NEXT: [[IVEC6:%[0-9]+]]:_(<4 x s32>) = G_INSERT_VECTOR_ELT [[IVEC5]], %c(s32), [[C6]](s64)416 ; CHECK-NEXT: [[C7:%[0-9]+]]:_(s64) = G_CONSTANT i64 3417 ; CHECK-NEXT: [[IVEC7:%[0-9]+]]:_(<4 x s32>) = G_INSERT_VECTOR_ELT [[IVEC6]], %d(s32), [[C7]](s64)418 ; CHECK-NEXT: %buildvec1:_(<4 x s32>) = COPY [[IVEC7]](<4 x s32>)419 ; CHECK-NEXT: %shuf:_(<4 x s32>) = G_SHUFFLE_VECTOR %buildvec0(<4 x s32>), %buildvec1, shufflemask(4, 4, 4, 4)420 ; CHECK-NEXT: $q0 = COPY %shuf(<4 x s32>)421 ; CHECK-NEXT: RET_ReallyLR implicit $q0422 %lane_0:_(s32) = COPY $w0423 %lane_1:_(s32) = COPY $w1424 %b:_(s32) = COPY $w2425 %c:_(s32) = COPY $w3426 %d:_(s32) = COPY $w4427 %buildvec0:_(<4 x s32>) = G_BUILD_VECTOR %lane_0(s32), %b(s32), %c(s32), %d(s32)428 %buildvec1:_(<4 x s32>) = G_BUILD_VECTOR %lane_1(s32), %b(s32), %c(s32), %d(s32)429 %shuf:_(<4 x s32>) = G_SHUFFLE_VECTOR %buildvec0(<4 x s32>), %buildvec1, shufflemask(4, 4, 4, 4)430 $q0 = COPY %shuf(<4 x s32>)431 RET_ReallyLR implicit $q0432