662 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -o - -mtriple=aarch64 -run-pass=aarch64-prelegalizer-combiner -verify-machineinstrs %s | FileCheck %s3---4name: extract_from_build_vector5alignment: 46tracksRegLiveness: true7liveins:8 - { reg: '$x0' }9 - { reg: '$x1' }10frameInfo:11 maxAlignment: 112 maxCallFrameSize: 013machineFunctionInfo: {}14body: |15 bb.0:16 liveins: $x0, $x117 18 ; CHECK-LABEL: name: extract_from_build_vector19 ; CHECK: liveins: $x0, $x120 ; CHECK-NEXT: {{ $}}21 ; CHECK-NEXT: %arg1:_(s64) = COPY $x022 ; CHECK-NEXT: $x0 = COPY %arg1(s64)23 ; CHECK-NEXT: RET_ReallyLR implicit $x024 %arg1:_(s64) = COPY $x025 %arg2:_(s64) = COPY $x126 %zero:_(s64) = G_CONSTANT i64 027 %bv:_(<2 x s64>) = G_BUILD_VECTOR %arg1(s64), %arg2(s64)28 %extract:_(s64) = G_EXTRACT_VECTOR_ELT %bv(<2 x s64>), %zero(s64)29 $x0 = COPY %extract(s64)30 RET_ReallyLR implicit $x031 32...33---34name: extract_from_trunc_build_vector35alignment: 436tracksRegLiveness: true37liveins:38 - { reg: '$x0' }39 - { reg: '$x1' }40frameInfo:41 maxAlignment: 142 maxCallFrameSize: 043machineFunctionInfo: {}44body: |45 bb.0:46 liveins: $x0, $x147 48 ; CHECK-LABEL: name: extract_from_trunc_build_vector49 ; CHECK: liveins: $x0, $x150 ; CHECK-NEXT: {{ $}}51 ; CHECK-NEXT: %arg1:_(s64) = COPY $x052 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC %arg1(s64)53 ; CHECK-NEXT: %zext:_(s64) = G_ZEXT [[TRUNC]](s32)54 ; CHECK-NEXT: $x0 = COPY %zext(s64)55 ; CHECK-NEXT: RET_ReallyLR implicit $x056 %arg1:_(s64) = COPY $x057 %arg2:_(s64) = COPY $x158 %zero:_(s64) = G_CONSTANT i64 059 %bv:_(<2 x s64>) = G_BUILD_VECTOR %arg1(s64), %arg2(s64)60 %truncbv:_(<2 x s32>) = G_TRUNC %bv61 %extract:_(s32) = G_EXTRACT_VECTOR_ELT %truncbv(<2 x s32>), %zero(s64)62 %zext:_(s64) = G_ZEXT %extract63 $x0 = COPY %zext(s64)64 RET_ReallyLR implicit $x065 66...67---68name: extract_from_build_vector_idx169alignment: 470tracksRegLiveness: true71liveins:72 - { reg: '$x0' }73 - { reg: '$x1' }74frameInfo:75 maxAlignment: 176 maxCallFrameSize: 077machineFunctionInfo: {}78body: |79 bb.0:80 liveins: $x0, $x181 82 ; CHECK-LABEL: name: extract_from_build_vector_idx183 ; CHECK: liveins: $x0, $x184 ; CHECK-NEXT: {{ $}}85 ; CHECK-NEXT: %arg2:_(s64) = COPY $x186 ; CHECK-NEXT: $x0 = COPY %arg2(s64)87 ; CHECK-NEXT: RET_ReallyLR implicit $x088 %arg1:_(s64) = COPY $x089 %arg2:_(s64) = COPY $x190 %one:_(s64) = G_CONSTANT i64 191 %bv:_(<2 x s64>) = G_BUILD_VECTOR %arg1(s64), %arg2(s64)92 %extract:_(s64) = G_EXTRACT_VECTOR_ELT %bv(<2 x s64>), %one(s64)93 $x0 = COPY %extract(s64)94 RET_ReallyLR implicit $x095 96...97---98name: extract_from_build_vector_idx_invalid99alignment: 4100tracksRegLiveness: true101liveins:102 - { reg: '$x0' }103 - { reg: '$x1' }104frameInfo:105 maxAlignment: 1106 maxCallFrameSize: 0107machineFunctionInfo: {}108body: |109 bb.0:110 liveins: $x0, $x1111 112 ; CHECK-LABEL: name: extract_from_build_vector_idx_invalid113 ; CHECK: liveins: $x0, $x1114 ; CHECK-NEXT: {{ $}}115 ; CHECK-NEXT: %extract:_(s64) = G_IMPLICIT_DEF116 ; CHECK-NEXT: $x0 = COPY %extract(s64)117 ; CHECK-NEXT: RET_ReallyLR implicit $x0118 %arg1:_(s64) = COPY $x0119 %arg2:_(s64) = COPY $x1120 %idx:_(s64) = G_CONSTANT i64 4121 %bv:_(<2 x s64>) = G_BUILD_VECTOR %arg1(s64), %arg2(s64)122 %extract:_(s64) = G_EXTRACT_VECTOR_ELT %bv(<2 x s64>), %idx(s64)123 $x0 = COPY %extract(s64)124 RET_ReallyLR implicit $x0125 126...127---128name: extract_from_build_vector_trunc129alignment: 4130tracksRegLiveness: true131liveins:132 - { reg: '$x0' }133 - { reg: '$x1' }134frameInfo:135 maxAlignment: 1136 maxCallFrameSize: 0137machineFunctionInfo: {}138body: |139 bb.0:140 liveins: $x0, $x1141 142 ; CHECK-LABEL: name: extract_from_build_vector_trunc143 ; CHECK: liveins: $x0, $x1144 ; CHECK-NEXT: {{ $}}145 ; CHECK-NEXT: %arg1:_(s64) = COPY $x0146 ; CHECK-NEXT: %extract:_(s32) = G_TRUNC %arg1(s64)147 ; CHECK-NEXT: $w0 = COPY %extract(s32)148 ; CHECK-NEXT: RET_ReallyLR implicit $w0149 %arg1:_(s64) = COPY $x0150 %arg2:_(s64) = COPY $x1151 %zero:_(s64) = G_CONSTANT i64 0152 %bv:_(<2 x s32>) = G_BUILD_VECTOR_TRUNC %arg1(s64), %arg2(s64)153 %extract:_(s32) = G_EXTRACT_VECTOR_ELT %bv(<2 x s32>), %zero(s64)154 $w0 = COPY %extract(s32)155 RET_ReallyLR implicit $w0156 157...158---159name: extract_from_build_vector_multiple_uses160alignment: 4161tracksRegLiveness: true162liveins:163 - { reg: '$x0' }164 - { reg: '$x1' }165frameInfo:166 maxAlignment: 1167 maxCallFrameSize: 0168machineFunctionInfo: {}169body: |170 bb.0:171 liveins: $x0, $x1172 173 ; CHECK-LABEL: name: extract_from_build_vector_multiple_uses174 ; CHECK: liveins: $x0, $x1175 ; CHECK-NEXT: {{ $}}176 ; CHECK-NEXT: %arg1:_(s64) = COPY $x0177 ; CHECK-NEXT: %arg2:_(s64) = COPY $x1178 ; CHECK-NEXT: %bv:_(<2 x s64>) = G_BUILD_VECTOR %arg1(s64), %arg2(s64)179 ; CHECK-NEXT: $x0 = COPY %arg1(s64)180 ; CHECK-NEXT: $q0 = COPY %bv(<2 x s64>)181 ; CHECK-NEXT: RET_ReallyLR implicit $x0182 %arg1:_(s64) = COPY $x0183 %arg2:_(s64) = COPY $x1184 %zero:_(s64) = G_CONSTANT i64 0185 %bv:_(<2 x s64>) = G_BUILD_VECTOR %arg1(s64), %arg2(s64)186 %extract:_(s64) = G_EXTRACT_VECTOR_ELT %bv(<2 x s64>), %zero(s64)187 $x0 = COPY %extract(s64)188 $q0 = COPY %bv(<2 x s64>)189 RET_ReallyLR implicit $x0190 191...192---193# This test checks that this combine runs after the insertvec->build_vector194name: extract_from_insert195tracksRegLiveness: true196liveins:197 - { reg: '$x0' }198 - { reg: '$x1' }199frameInfo:200 maxAlignment: 1201body: |202 bb.1:203 liveins: $x0, $x1204 ; CHECK-LABEL: name: extract_from_insert205 ; CHECK: liveins: $x0, $x1206 ; CHECK-NEXT: {{ $}}207 ; CHECK-NEXT: %arg1:_(s64) = COPY $x0208 ; CHECK-NEXT: $x0 = COPY %arg1(s64)209 ; CHECK-NEXT: RET_ReallyLR implicit $x0210 %arg1:_(s64) = COPY $x0211 %arg2:_(s64) = COPY $x1212 %undef:_(<2 x s64>) = G_IMPLICIT_DEF213 %zero:_(s64) = G_CONSTANT i64 0214 %one:_(s64) = G_CONSTANT i64 1215 %ins1:_(<2 x s64>) = G_INSERT_VECTOR_ELT %undef, %arg1(s64), %zero(s64)216 %ins2:_(<2 x s64>) = G_INSERT_VECTOR_ELT %ins1, %arg2(s64), %one(s64)217 %extract:_(s64) = G_EXTRACT_VECTOR_ELT %ins2(<2 x s64>), %zero(s64)218 $x0 = COPY %extract(s64)219 RET_ReallyLR implicit $x0220 221...222---223# This test checks that this combine runs after the insertvec->build_vector224name: extract_from_insert2225tracksRegLiveness: true226liveins:227 - { reg: '$x0' }228 - { reg: '$x1' }229frameInfo:230 maxAlignment: 1231body: |232 bb.1:233 liveins: $q0, $x0, $x1234 ; CHECK-LABEL: name: extract_from_insert2235 ; CHECK: liveins: $q0, $x0, $x1236 ; CHECK-NEXT: {{ $}}237 ; CHECK-NEXT: %arg1:_(s64) = COPY $x0238 ; CHECK-NEXT: %arg2:_(s64) = COPY $x1239 ; CHECK-NEXT: %ins2:_(<2 x s64>) = G_BUILD_VECTOR %arg1(s64), %arg2(s64)240 ; CHECK-NEXT: $q0 = COPY %ins2(<2 x s64>)241 ; CHECK-NEXT: RET_ReallyLR implicit $q0242 %arg0:_(<2 x s64>) = COPY $q0243 %arg1:_(s64) = COPY $x0244 %arg2:_(s64) = COPY $x1245 %zero:_(s64) = G_CONSTANT i64 0246 %one:_(s64) = G_CONSTANT i64 1247 %ins1:_(<2 x s64>) = G_INSERT_VECTOR_ELT %arg0, %arg1(s64), %zero(s64)248 %ins2:_(<2 x s64>) = G_INSERT_VECTOR_ELT %ins1, %arg2(s64), %one(s64)249 $q0 = COPY %ins2(<2 x s64>)250 RET_ReallyLR implicit $q0251 252...253---254name: extract_from_idx_negative255alignment: 4256liveins:257 - { reg: '$x0' }258 - { reg: '$x1' }259frameInfo:260 maxAlignment: 1261body: |262 bb.1:263 liveins: $x0, $x1264 ; CHECK-LABEL: name: extract_from_idx_negative265 ; CHECK: liveins: $x0, $x1266 ; CHECK-NEXT: {{ $}}267 ; CHECK-NEXT: %extract:_(s64) = G_IMPLICIT_DEF268 ; CHECK-NEXT: $x0 = COPY %extract(s64)269 ; CHECK-NEXT: RET_ReallyLR implicit $x0270 %vec:_(<2 x s64>) = COPY $q0271 %idx:_(s64) = G_CONSTANT i64 -2272 %extract:_(s64) = G_EXTRACT_VECTOR_ELT %vec(<2 x s64>), %idx(s64)273 $x0 = COPY %extract(s64)274 RET_ReallyLR implicit $x0275 276...277---278name: extract_from_vector_undef279alignment: 4280liveins:281 - { reg: '$x0' }282 - { reg: '$x1' }283frameInfo:284 maxAlignment: 1285body: |286 bb.1:287 liveins: $x0, $x1288 ; CHECK-LABEL: name: extract_from_vector_undef289 ; CHECK: liveins: $x0, $x1290 ; CHECK-NEXT: {{ $}}291 ; CHECK-NEXT: %extract:_(s64) = G_IMPLICIT_DEF292 ; CHECK-NEXT: $x0 = COPY %extract(s64)293 ; CHECK-NEXT: RET_ReallyLR implicit $x0294 %vec:_(<2 x s64>) = G_IMPLICIT_DEF295 %idx:_(s64) = G_CONSTANT i64 -2296 %extract:_(s64) = G_EXTRACT_VECTOR_ELT %vec(<2 x s64>), %idx(s64)297 $x0 = COPY %extract(s64)298 RET_ReallyLR implicit $x0299 300...301---302name: extract_from_index_undef303alignment: 4304liveins:305 - { reg: '$x0' }306 - { reg: '$x1' }307frameInfo:308 maxAlignment: 1309body: |310 bb.1:311 ; CHECK-LABEL: name: extract_from_index_undef312 ; CHECK: %extract:_(s64) = G_IMPLICIT_DEF313 ; CHECK-NEXT: $x0 = COPY %extract(s64)314 ; CHECK-NEXT: RET_ReallyLR implicit $x0315 %vec:_(<2 x s64>) = COPY $q0316 %idx:_(s64) = G_IMPLICIT_DEF317 %extract:_(s64) = G_EXTRACT_VECTOR_ELT %vec(<2 x s64>), %idx(s64)318 $x0 = COPY %extract(s64)319 RET_ReallyLR implicit $x0320 321...322---323name: extract_from_index_too_large324alignment: 4325liveins:326 - { reg: '$x0' }327 - { reg: '$x1' }328frameInfo:329 maxAlignment: 1330body: |331 bb.1:332 liveins: $x0, $x1333 ; CHECK-LABEL: name: extract_from_index_too_large334 ; CHECK: liveins: $x0, $x1335 ; CHECK-NEXT: {{ $}}336 ; CHECK-NEXT: %extract:_(s64) = G_IMPLICIT_DEF337 ; CHECK-NEXT: $x0 = COPY %extract(s64)338 ; CHECK-NEXT: RET_ReallyLR implicit $x0339 %vec:_(<2 x s64>) = COPY $q0340 %idx:_(s64) = G_CONSTANT i64 3000341 %extract:_(s64) = G_EXTRACT_VECTOR_ELT %vec(<2 x s64>), %idx(s64)342 $x0 = COPY %extract(s64)343 RET_ReallyLR implicit $x0344 345...346---347name: extract_with_freeze348alignment: 4349liveins:350 - { reg: '$x0' }351 - { reg: '$x1' }352frameInfo:353 maxAlignment: 1354body: |355 bb.1:356 liveins: $x0, $x1357 ; CHECK-LABEL: name: extract_with_freeze358 ; CHECK: liveins: $x0, $x1359 ; CHECK-NEXT: {{ $}}360 ; CHECK-NEXT: %vec:_(<2 x s64>) = COPY $q0361 ; CHECK-NEXT: %idx:_(s64) = COPY $x1362 ; CHECK-NEXT: %fvec:_(<2 x s64>) = G_FREEZE %vec363 ; CHECK-NEXT: %extract:_(s64) = G_EXTRACT_VECTOR_ELT %fvec(<2 x s64>), %idx(s64)364 ; CHECK-NEXT: $x0 = COPY %extract(s64)365 ; CHECK-NEXT: RET_ReallyLR implicit $x0366 %vec:_(<2 x s64>) = COPY $q0367 %idx:_(s64) = COPY $x1368 %fvec:_(<2 x s64>) = G_FREEZE %vec369 %extract:_(s64) = G_EXTRACT_VECTOR_ELT %fvec(<2 x s64>), %idx(s64)370 $x0 = COPY %extract(s64)371 RET_ReallyLR implicit $x0372 373...374---375name: extract_from_insert_symmetry376alignment: 4377liveins:378 - { reg: '$x0' }379 - { reg: '$x1' }380frameInfo:381 maxAlignment: 1382body: |383 bb.1:384 liveins: $x0, $x1385 ; CHECK-LABEL: name: extract_from_insert_symmetry386 ; CHECK: liveins: $x0, $x1387 ; CHECK-NEXT: {{ $}}388 ; CHECK-NEXT: %element:_(s64) = COPY $x1389 ; CHECK-NEXT: $x0 = COPY %element(s64)390 ; CHECK-NEXT: RET_ReallyLR implicit $x0391 %vec:_(<2 x s64>) = COPY $q0392 %idx:_(s64) = COPY $x1393 %element:_(s64) = COPY $x1394 %invec:_(<2 x s64>) = G_INSERT_VECTOR_ELT %vec(<2 x s64>), %element(s64), %idx(s64)395 %extract:_(s64) = G_EXTRACT_VECTOR_ELT %invec(<2 x s64>), %idx(s64)396 $x0 = COPY %extract(s64)397 RET_ReallyLR implicit $x0398 399...400---401name: extract_from_insert_with_different_consts402alignment: 4403liveins:404 - { reg: '$x0' }405 - { reg: '$x1' }406frameInfo:407 maxAlignment: 1408body: |409 bb.1:410 liveins: $x0, $x1411 ; CHECK-LABEL: name: extract_from_insert_with_different_consts412 ; CHECK: liveins: $x0, $x1413 ; CHECK-NEXT: {{ $}}414 ; CHECK-NEXT: %vec:_(<2 x s64>) = COPY $q0415 ; CHECK-NEXT: %idx2:_(s64) = G_CONSTANT i64 1416 ; CHECK-NEXT: %extract:_(s64) = G_EXTRACT_VECTOR_ELT %vec(<2 x s64>), %idx2(s64)417 ; CHECK-NEXT: $x0 = COPY %extract(s64)418 ; CHECK-NEXT: RET_ReallyLR implicit $x0419 %vec:_(<2 x s64>) = COPY $q0420 %idx:_(s64) = G_CONSTANT i64 0421 %idx2:_(s64) = G_CONSTANT i64 1422 %element:_(s64) = COPY $x1423 %invec:_(<2 x s64>) = G_INSERT_VECTOR_ELT %vec(<2 x s64>), %element(s64), %idx(s64)424 %extract:_(s64) = G_EXTRACT_VECTOR_ELT %invec(<2 x s64>), %idx2(s64)425 $x0 = COPY %extract(s64)426 RET_ReallyLR implicit $x0427 428...429---430name: extract_from_build_vector_non_const431alignment: 4432liveins:433 - { reg: '$x0' }434 - { reg: '$x1' }435frameInfo:436 maxAlignment: 1437body: |438 bb.1:439 liveins: $x0, $x1440 ; CHECK-LABEL: name: extract_from_build_vector_non_const441 ; CHECK: liveins: $x0, $x1442 ; CHECK-NEXT: {{ $}}443 ; CHECK-NEXT: %idx:_(s64) = COPY $x0444 ; CHECK-NEXT: %arg1:_(s64) = COPY $x0445 ; CHECK-NEXT: %arg2:_(s64) = COPY $x1446 ; CHECK-NEXT: %bv:_(<2 x s64>) = G_BUILD_VECTOR %arg1(s64), %arg2(s64)447 ; CHECK-NEXT: %extract:_(s64) = G_EXTRACT_VECTOR_ELT %bv(<2 x s64>), %idx(s64)448 ; CHECK-NEXT: $x0 = COPY %extract(s64)449 ; CHECK-NEXT: RET_ReallyLR implicit $x0450 %vec:_(<2 x s64>) = COPY $q0451 %idx:_(s64) = COPY $x0452 %arg1:_(s64) = COPY $x0453 %arg2:_(s64) = COPY $x1454 %bv:_(<2 x s64>) = G_BUILD_VECTOR %arg1(s64), %arg2(s64)455 %extract:_(s64) = G_EXTRACT_VECTOR_ELT %bv(<2 x s64>), %idx(s64)456 $x0 = COPY %extract(s64)457 RET_ReallyLR implicit $x0458 459...460---461name: extract_from_build_vector_const462alignment: 4463liveins:464 - { reg: '$x0' }465 - { reg: '$x1' }466frameInfo:467 maxAlignment: 1468body: |469 bb.1:470 liveins: $x0, $x1471 ; CHECK-LABEL: name: extract_from_build_vector_const472 ; CHECK: liveins: $x0, $x1473 ; CHECK-NEXT: {{ $}}474 ; CHECK-NEXT: %arg1:_(s64) = COPY $x0475 ; CHECK-NEXT: $x0 = COPY %arg1(s64)476 ; CHECK-NEXT: RET_ReallyLR implicit $x0477 %vec:_(<2 x s64>) = COPY $q0478 %idx:_(s64) = G_CONSTANT i64 0479 %arg1:_(s64) = COPY $x0480 %arg2:_(s64) = COPY $x1481 %bv:_(<2 x s64>) = G_BUILD_VECTOR %arg1(s64), %arg2(s64)482 %extract:_(s64) = G_EXTRACT_VECTOR_ELT %bv(<2 x s64>), %idx(s64)483 $x0 = COPY %extract(s64)484 RET_ReallyLR implicit $x0485 486...487---488name: extract_from_build_vector_trunc_const2489alignment: 4490liveins:491 - { reg: '$x0' }492 - { reg: '$x1' }493frameInfo:494 maxAlignment: 1495body: |496 bb.1:497 liveins: $x0, $x1498 ; CHECK-LABEL: name: extract_from_build_vector_trunc_const2499 ; CHECK: liveins: $x0, $x1500 ; CHECK-NEXT: {{ $}}501 ; CHECK-NEXT: %arg1:_(s64) = COPY $x0502 ; CHECK-NEXT: %extract:_(s32) = G_TRUNC %arg1(s64)503 ; CHECK-NEXT: $w0 = COPY %extract(s32)504 ; CHECK-NEXT: RET_ReallyLR implicit $x0505 %vec:_(<2 x s64>) = COPY $q0506 %arg1:_(s64) = COPY $x0507 %arg2:_(s64) = COPY $x1508 %arg3:_(s64) = COPY $x0509 %arg4:_(s64) = COPY $x1510 %idx:_(s64) = G_CONSTANT i64 0511 %bv:_(<4 x s32>) = G_BUILD_VECTOR_TRUNC %arg1(s64), %arg2(s64), %arg3(s64), %arg4(s64)512 %extract:_(s32) = G_EXTRACT_VECTOR_ELT %bv(<4 x s32>), %idx(s64)513 $w0 = COPY %extract(s32)514 RET_ReallyLR implicit $x0515...516---517name: extract_from_build_vector_trunc2518alignment: 4519liveins:520 - { reg: '$x0' }521 - { reg: '$x1' }522frameInfo:523 maxAlignment: 1524body: |525 bb.1:526 liveins: $x0, $x1527 ; CHECK-LABEL: name: extract_from_build_vector_trunc2528 ; CHECK: liveins: $x0, $x1529 ; CHECK-NEXT: {{ $}}530 ; CHECK-NEXT: %arg1:_(s64) = COPY $x0531 ; CHECK-NEXT: %arg2:_(s64) = COPY $x1532 ; CHECK-NEXT: %idx:_(s64) = COPY $x0533 ; CHECK-NEXT: %bv:_(<2 x s32>) = G_BUILD_VECTOR_TRUNC %arg1(s64), %arg2(s64)534 ; CHECK-NEXT: %extract:_(s32) = G_EXTRACT_VECTOR_ELT %bv(<2 x s32>), %idx(s64)535 ; CHECK-NEXT: $w0 = COPY %extract(s32)536 ; CHECK-NEXT: RET_ReallyLR implicit $x0537 %arg1:_(s64) = COPY $x0538 %arg2:_(s64) = COPY $x1539 %idx:_(s64) = COPY $x0540 %bv:_(<2 x s32>) = G_BUILD_VECTOR_TRUNC %arg1(s64), %arg2(s64)541 %extract:_(s32) = G_EXTRACT_VECTOR_ELT %bv(<2 x s32>), %idx(s64)542 $w0 = COPY %extract(s32)543 RET_ReallyLR implicit $x0544...545---546name: extract_from_build_vector_trunc_const3547alignment: 4548liveins:549 - { reg: '$x0' }550 - { reg: '$x1' }551frameInfo:552 maxAlignment: 1553body: |554 bb.1:555 liveins: $x0, $x1556 ; CHECK-LABEL: name: extract_from_build_vector_trunc_const3557 ; CHECK: liveins: $x0, $x1558 ; CHECK-NEXT: {{ $}}559 ; CHECK-NEXT: %arg1:_(s128) = COPY $q0560 ; CHECK-NEXT: %extract:_(s64) = G_TRUNC %arg1(s128)561 ; CHECK-NEXT: $x0 = COPY %extract(s64)562 ; CHECK-NEXT: RET_ReallyLR implicit $x0563 %arg1:_(s128) = COPY $q0564 %arg2:_(s128) = COPY $q1565 %idx:_(s64) = G_CONSTANT i64 0566 %bv:_(<2 x s64>) = G_BUILD_VECTOR_TRUNC %arg1(s128), %arg2(s128)567 %extract:_(s64) = G_EXTRACT_VECTOR_ELT %bv(<2 x s64>), %idx(s64)568 $x0 = COPY %extract(s64)569 RET_ReallyLR implicit $x0570...571---572name: extract_from_build_vector_shuffle_vector_undef573body: |574 bb.1:575 liveins: $x0, $x1576 ; CHECK-LABEL: name: extract_from_build_vector_shuffle_vector_undef577 ; CHECK: liveins: $x0, $x1578 ; CHECK-NEXT: {{ $}}579 ; CHECK-NEXT: %extract:_(s32) = G_IMPLICIT_DEF580 ; CHECK-NEXT: $w0 = COPY %extract(s32)581 ; CHECK-NEXT: RET_ReallyLR implicit $x0582 %arg1:_(<4 x s32>) = COPY $q0583 %arg2:_(<4 x s32>) = COPY $q1584 %idx:_(s64) = G_CONSTANT i64 0585 %sv:_(<4 x s32>) = G_SHUFFLE_VECTOR %arg1(<4 x s32>), %arg2(<4 x s32>), shufflemask(-1, 0, 0, 0)586 %extract:_(s32) = G_EXTRACT_VECTOR_ELT %sv(<4 x s32>), %idx(s64)587 $w0 = COPY %extract(s32)588 RET_ReallyLR implicit $x0589...590---591name: extract_from_build_vector_shuffle_vector_opaque592body: |593 bb.1:594 liveins: $x0, $x1595 ; CHECK-LABEL: name: extract_from_build_vector_shuffle_vector_opaque596 ; CHECK: liveins: $x0, $x1597 ; CHECK-NEXT: {{ $}}598 ; CHECK-NEXT: %arg1:_(<4 x s32>) = COPY $q0599 ; CHECK-NEXT: %idx:_(s64) = COPY $x1600 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(<4 x s32>) = G_IMPLICIT_DEF601 ; CHECK-NEXT: %sv:_(<4 x s32>) = G_SHUFFLE_VECTOR %arg1(<4 x s32>), [[DEF]], shufflemask(undef, 0, 0, 0)602 ; CHECK-NEXT: %extract:_(s32) = G_EXTRACT_VECTOR_ELT %sv(<4 x s32>), %idx(s64)603 ; CHECK-NEXT: $w0 = COPY %extract(s32)604 ; CHECK-NEXT: RET_ReallyLR implicit $x0605 %arg1:_(<4 x s32>) = COPY $q0606 %arg2:_(<4 x s32>) = COPY $q1607 %idx:_(s64) = COPY $x1608 %sv:_(<4 x s32>) = G_SHUFFLE_VECTOR %arg1(<4 x s32>), %arg2(<4 x s32>), shufflemask(-1, 0, 0, 0)609 %extract:_(s32) = G_EXTRACT_VECTOR_ELT %sv(<4 x s32>), %idx(s64)610 $w0 = COPY %extract(s32)611 RET_ReallyLR implicit $x0612...613---614name: extract_from_build_vector_shuffle_vector_const615body: |616 bb.1:617 liveins: $x0, $x1618 ; CHECK-LABEL: name: extract_from_build_vector_shuffle_vector_const619 ; CHECK: liveins: $x0, $x1620 ; CHECK-NEXT: {{ $}}621 ; CHECK-NEXT: %arg1:_(<4 x s32>) = COPY $q0622 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 3623 ; CHECK-NEXT: %extract:_(s32) = G_EXTRACT_VECTOR_ELT %arg1(<4 x s32>), [[C]](s64)624 ; CHECK-NEXT: $w0 = COPY %extract(s32)625 ; CHECK-NEXT: RET_ReallyLR implicit $x0626 %arg1:_(<4 x s32>) = COPY $q0627 %arg2:_(<4 x s32>) = COPY $q1628 %idx:_(s64) = G_CONSTANT i64 0629 %sv:_(<4 x s32>) = G_SHUFFLE_VECTOR %arg1(<4 x s32>), %arg2(<4 x s32>), shufflemask(3, 0, 0, 0)630 %extract:_(s32) = G_EXTRACT_VECTOR_ELT %sv(<4 x s32>), %idx(s64)631 $w0 = COPY %extract(s32)632 RET_ReallyLR implicit $x0633...634---635name: extract_from_build_vector_const_huge636alignment: 4637liveins:638 - { reg: '$x0' }639 - { reg: '$x1' }640frameInfo:641 maxAlignment: 1642body: |643 bb.1:644 liveins: $x0, $x1645 ; CHECK-LABEL: name: extract_from_build_vector_const_huge646 ; CHECK: liveins: $x0, $x1647 ; CHECK-NEXT: {{ $}}648 ; CHECK-NEXT: %arg1:_(s64) = COPY $x0649 ; CHECK-NEXT: $x0 = COPY %arg1(s64)650 ; CHECK-NEXT: RET_ReallyLR implicit $x0651 %vec:_(<2 x s64>) = COPY $q0652 %idx:_(s64) = G_CONSTANT i64 0653 %arg1:_(s64) = COPY $x0654 %arg2:_(s64) = COPY $x1655 %bv:_(<18 x s64>) = G_BUILD_VECTOR %arg1(s64), %arg2(s64), %arg1(s64), %arg2(s64), %arg1(s64), %arg2(s64), %arg1(s64), %arg2(s64), %arg1(s64), %arg2(s64), %arg1(s64), %arg2(s64), %arg1(s64), %arg2(s64), %arg1(s64), %arg2(s64), %arg1(s64), %arg2(s64)656 %extract:_(s64) = G_EXTRACT_VECTOR_ELT %bv(<18 x s64>), %idx(s64)657 $x0 = COPY %extract(s64)658 RET_ReallyLR implicit $x0659 660...661---662