764 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=aarch64-- -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=1 %s -o - | FileCheck %s3 4--- |5 target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"6 7 define void @store_s64_gpr(ptr %addr) { ret void }8 define void @store_s32_gpr(ptr %addr) { ret void }9 define void @store_s16_gpr(ptr %addr) { ret void }10 define void @store_s8_gpr(ptr %addr) { ret void }11 12 define void @store_zero_s64_gpr(ptr %addr) { ret void }13 define void @store_zero_s32_gpr(ptr %addr) { ret void }14 define void @store_zero_s16(ptr %addr) { ret void }15 define void @store_zero_s8(ptr %addr) { ret void }16 define void @store_zero_look_through_cst(ptr %addr) { ret void }17 18 define void @store_fi_s64_gpr() {19 %ptr0 = alloca i6420 ret void21 }22 23 define void @store_gep_128_s64_gpr(ptr %addr) { ret void }24 define void @store_gep_512_s32_gpr(ptr %addr) { ret void }25 define void @store_gep_64_s16_gpr(ptr %addr) { ret void }26 define void @store_gep_1_s8_gpr(ptr %addr) { ret void }27 28 define void @store_s64_fpr(ptr %addr) { ret void }29 define void @store_s32_fpr(ptr %addr) { ret void }30 31 define void @store_gep_8_s64_fpr(ptr %addr) { ret void }32 define void @store_gep_8_s32_fpr(ptr %addr) { ret void }33 34 define void @store_v2s32(ptr %addr) { ret void }35 define void @store_v2s64(ptr %addr) { ret void }36 37 define void @store_4xi16(<4 x i16> %v, ptr %ptr) { ret void }38 define void @store_4xi32(<4 x i32> %v, ptr %ptr) { ret void }39 define void @store_8xi16(<8 x i16> %v, ptr %ptr) { ret void }40 define void @store_16xi8(<16 x i8> %v, ptr %ptr) { ret void }41 42 @x = external hidden local_unnamed_addr global ptr, align 843 define void @store_adrp_add_low() { ret void }44 define void @store_adrp_add_low_foldable_offset() { ret void }45 define void @store_adrp_add_low_unfoldable_offset() { ret void }46 47 define void @truncstores(ptr %addr) { ret void }48...49 50---51name: store_s64_gpr52legalized: true53regBankSelected: true54 55registers:56 - { id: 0, class: gpr }57 - { id: 1, class: gpr }58 59body: |60 bb.0:61 liveins: $x0, $x162 63 ; CHECK-LABEL: name: store_s64_gpr64 ; CHECK: liveins: $x0, $x165 ; CHECK-NEXT: {{ $}}66 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64sp = COPY $x067 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64 = COPY $x168 ; CHECK-NEXT: STRXui [[COPY1]], [[COPY]], 0 :: (store (s64) into %ir.addr)69 %0(p0) = COPY $x070 %1(s64) = COPY $x171 G_STORE %1, %0 :: (store (s64) into %ir.addr)72 73...74 75---76name: store_s32_gpr77legalized: true78regBankSelected: true79 80registers:81 - { id: 0, class: gpr }82 - { id: 1, class: gpr }83 84body: |85 bb.0:86 liveins: $x0, $w187 88 ; CHECK-LABEL: name: store_s32_gpr89 ; CHECK: liveins: $x0, $w190 ; CHECK-NEXT: {{ $}}91 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64sp = COPY $x092 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32 = COPY $w193 ; CHECK-NEXT: STRWui [[COPY1]], [[COPY]], 0 :: (store (s32) into %ir.addr)94 %0(p0) = COPY $x095 %1(s32) = COPY $w196 G_STORE %1, %0 :: (store (s32) into %ir.addr)97 98...99 100---101name: store_s16_gpr102legalized: true103regBankSelected: true104 105registers:106 - { id: 0, class: gpr }107 - { id: 1, class: gpr }108 109body: |110 bb.0:111 liveins: $x0, $w1112 113 ; CHECK-LABEL: name: store_s16_gpr114 ; CHECK: liveins: $x0, $w1115 ; CHECK-NEXT: {{ $}}116 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0117 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1118 ; CHECK-NEXT: STRHHui [[COPY1]], [[COPY]], 0 :: (store (s16) into %ir.addr)119 %0(p0) = COPY $x0120 %2:gpr(s32) = COPY $w1121 %1(s16) = G_TRUNC %2122 G_STORE %1, %0 :: (store (s16) into %ir.addr)123 124...125 126---127name: store_s8_gpr128legalized: true129regBankSelected: true130 131registers:132 - { id: 0, class: gpr }133 - { id: 1, class: gpr }134 135body: |136 bb.0:137 liveins: $x0, $w1138 139 ; CHECK-LABEL: name: store_s8_gpr140 ; CHECK: liveins: $x0, $w1141 ; CHECK-NEXT: {{ $}}142 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0143 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1144 ; CHECK-NEXT: STRBBui [[COPY1]], [[COPY]], 0 :: (store (s8) into %ir.addr)145 %0(p0) = COPY $x0146 %2:gpr(s32) = COPY $w1147 %1(s8) = G_TRUNC %2148 G_STORE %1, %0 :: (store (s8) into %ir.addr)149 150...151 152---153name: store_zero_s64_gpr154legalized: true155regBankSelected: true156 157registers:158 - { id: 0, class: gpr }159 - { id: 1, class: gpr }160 161body: |162 bb.0:163 liveins: $x0, $x1164 165 ; CHECK-LABEL: name: store_zero_s64_gpr166 ; CHECK: liveins: $x0, $x1167 ; CHECK-NEXT: {{ $}}168 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0169 ; CHECK-NEXT: STRXui $xzr, [[COPY]], 0 :: (store (s64) into %ir.addr)170 %0(p0) = COPY $x0171 %1(s64) = G_CONSTANT i64 0172 G_STORE %1, %0 :: (store (s64) into %ir.addr)173 174...175 176---177name: store_zero_s32_gpr178legalized: true179regBankSelected: true180 181registers:182 - { id: 0, class: gpr }183 - { id: 1, class: gpr }184 185body: |186 bb.0:187 liveins: $x0188 189 ; CHECK-LABEL: name: store_zero_s32_gpr190 ; CHECK: liveins: $x0191 ; CHECK-NEXT: {{ $}}192 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0193 ; CHECK-NEXT: STRWui $wzr, [[COPY]], 0 :: (store (s32) into %ir.addr)194 %0(p0) = COPY $x0195 %1(s32) = G_CONSTANT i32 0196 G_STORE %1, %0 :: (store (s32) into %ir.addr)197 198...199 200---201name: store_zero_s16202legalized: true203regBankSelected: true204body: |205 bb.0:206 liveins: $x0207 ; CHECK-LABEL: name: store_zero_s16208 ; CHECK: liveins: $x0209 ; CHECK-NEXT: {{ $}}210 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0211 ; CHECK-NEXT: STRHHui $wzr, [[COPY]], 0 :: (store (s16))212 %0:gpr(p0) = COPY $x0213 %1:gpr(s16) = G_CONSTANT i16 0214 G_STORE %1(s16), %0(p0) :: (store (s16))215 216...217 218---219name: store_zero_s8220legalized: true221regBankSelected: true222body: |223 bb.0:224 liveins: $x0225 ; CHECK-LABEL: name: store_zero_s8226 ; CHECK: liveins: $x0227 ; CHECK-NEXT: {{ $}}228 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0229 ; CHECK-NEXT: STRBBui $wzr, [[COPY]], 0 :: (store (s8))230 %0:gpr(p0) = COPY $x0231 %1:gpr(s8) = G_CONSTANT i8 0232 G_STORE %1(s8), %0(p0) :: (store (s8))233...234 235---236name: store_zero_look_through_cst237legalized: true238regBankSelected: true239body: |240 bb.0:241 liveins: $x0242 ; CHECK-LABEL: name: store_zero_look_through_cst243 ; CHECK: liveins: $x0244 ; CHECK-NEXT: {{ $}}245 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0246 ; CHECK-NEXT: STRXui $xzr, [[COPY]], 0 :: (store (s64) into %ir.addr)247 %0:gpr(p0) = COPY $x0248 %1:gpr(s32) = G_CONSTANT i32 0249 %2:gpr(s64) = G_ZEXT %1250 G_STORE %2, %0 :: (store (s64) into %ir.addr)251...252 253---254name: store_fi_s64_gpr255legalized: true256regBankSelected: true257 258registers:259 - { id: 0, class: gpr }260 - { id: 1, class: gpr }261 262stack:263 - { id: 0, name: ptr0, offset: 0, size: 8, alignment: 8 }264 265body: |266 bb.0:267 liveins: $x0268 269 ; CHECK-LABEL: name: store_fi_s64_gpr270 ; CHECK: liveins: $x0271 ; CHECK-NEXT: {{ $}}272 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64all = COPY $x0273 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64 = COPY [[COPY]]274 ; CHECK-NEXT: STRXui [[COPY1]], %stack.0.ptr0, 0 :: (store (p0))275 %0(p0) = COPY $x0276 %1(p0) = G_FRAME_INDEX %stack.0.ptr0277 G_STORE %0, %1 :: (store (p0))278...279 280---281name: store_gep_128_s64_gpr282legalized: true283regBankSelected: true284 285registers:286 - { id: 0, class: gpr }287 - { id: 1, class: gpr }288 - { id: 2, class: gpr }289 - { id: 3, class: gpr }290 291body: |292 bb.0:293 liveins: $x0, $x1294 295 ; CHECK-LABEL: name: store_gep_128_s64_gpr296 ; CHECK: liveins: $x0, $x1297 ; CHECK-NEXT: {{ $}}298 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0299 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64 = COPY $x1300 ; CHECK-NEXT: STRXui [[COPY1]], [[COPY]], 16 :: (store (s64) into %ir.addr)301 %0(p0) = COPY $x0302 %1(s64) = COPY $x1303 %2(s64) = G_CONSTANT i64 128304 %3(p0) = G_PTR_ADD %0, %2305 G_STORE %1, %3 :: (store (s64) into %ir.addr)306...307 308---309name: store_gep_512_s32_gpr310legalized: true311regBankSelected: true312 313registers:314 - { id: 0, class: gpr }315 - { id: 1, class: gpr }316 - { id: 2, class: gpr }317 - { id: 3, class: gpr }318 319body: |320 bb.0:321 liveins: $x0, $w1322 323 ; CHECK-LABEL: name: store_gep_512_s32_gpr324 ; CHECK: liveins: $x0, $w1325 ; CHECK-NEXT: {{ $}}326 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0327 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1328 ; CHECK-NEXT: STRWui [[COPY1]], [[COPY]], 128 :: (store (s32) into %ir.addr)329 %0(p0) = COPY $x0330 %1(s32) = COPY $w1331 %2(s64) = G_CONSTANT i64 512332 %3(p0) = G_PTR_ADD %0, %2333 G_STORE %1, %3 :: (store (s32) into %ir.addr)334...335 336---337name: store_gep_64_s16_gpr338legalized: true339regBankSelected: true340 341registers:342 - { id: 0, class: gpr }343 - { id: 1, class: gpr }344 - { id: 2, class: gpr }345 - { id: 3, class: gpr }346 347body: |348 bb.0:349 liveins: $x0, $w1350 351 ; CHECK-LABEL: name: store_gep_64_s16_gpr352 ; CHECK: liveins: $x0, $w1353 ; CHECK-NEXT: {{ $}}354 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0355 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1356 ; CHECK-NEXT: STRHHui [[COPY1]], [[COPY]], 32 :: (store (s16) into %ir.addr)357 %0(p0) = COPY $x0358 %4:gpr(s32) = COPY $w1359 %1(s16) = G_TRUNC %4360 %2(s64) = G_CONSTANT i64 64361 %3(p0) = G_PTR_ADD %0, %2362 G_STORE %1, %3 :: (store (s16) into %ir.addr)363...364 365---366name: store_gep_1_s8_gpr367legalized: true368regBankSelected: true369 370registers:371 - { id: 0, class: gpr }372 - { id: 1, class: gpr }373 - { id: 2, class: gpr }374 - { id: 3, class: gpr }375 376body: |377 bb.0:378 liveins: $x0, $w1379 380 ; CHECK-LABEL: name: store_gep_1_s8_gpr381 ; CHECK: liveins: $x0, $w1382 ; CHECK-NEXT: {{ $}}383 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0384 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1385 ; CHECK-NEXT: STRBBui [[COPY1]], [[COPY]], 1 :: (store (s8) into %ir.addr)386 %0(p0) = COPY $x0387 %4:gpr(s32) = COPY $w1388 %1(s8) = G_TRUNC %4389 %2(s64) = G_CONSTANT i64 1390 %3(p0) = G_PTR_ADD %0, %2391 G_STORE %1, %3 :: (store (s8) into %ir.addr)392...393 394---395name: store_s64_fpr396legalized: true397regBankSelected: true398 399registers:400 - { id: 0, class: gpr }401 - { id: 1, class: fpr }402 403body: |404 bb.0:405 liveins: $x0, $d1406 407 ; CHECK-LABEL: name: store_s64_fpr408 ; CHECK: liveins: $x0, $d1409 ; CHECK-NEXT: {{ $}}410 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0411 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:fpr64 = COPY $d1412 ; CHECK-NEXT: STRDui [[COPY1]], [[COPY]], 0 :: (store (s64) into %ir.addr)413 %0(p0) = COPY $x0414 %1(s64) = COPY $d1415 G_STORE %1, %0 :: (store (s64) into %ir.addr)416 417...418 419---420name: store_s32_fpr421legalized: true422regBankSelected: true423 424registers:425 - { id: 0, class: gpr }426 - { id: 1, class: fpr }427 428body: |429 bb.0:430 liveins: $x0, $s1431 432 ; CHECK-LABEL: name: store_s32_fpr433 ; CHECK: liveins: $x0, $s1434 ; CHECK-NEXT: {{ $}}435 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0436 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:fpr32 = COPY $s1437 ; CHECK-NEXT: STRSui [[COPY1]], [[COPY]], 0 :: (store (s32) into %ir.addr)438 %0(p0) = COPY $x0439 %1(s32) = COPY $s1440 G_STORE %1, %0 :: (store (s32) into %ir.addr)441 442...443 444---445name: store_gep_8_s64_fpr446legalized: true447regBankSelected: true448 449registers:450 - { id: 0, class: gpr }451 - { id: 1, class: fpr }452 - { id: 2, class: gpr }453 - { id: 3, class: gpr }454 455body: |456 bb.0:457 liveins: $x0, $d1458 459 ; CHECK-LABEL: name: store_gep_8_s64_fpr460 ; CHECK: liveins: $x0, $d1461 ; CHECK-NEXT: {{ $}}462 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0463 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:fpr64 = COPY $d1464 ; CHECK-NEXT: STRDui [[COPY1]], [[COPY]], 1 :: (store (s64) into %ir.addr)465 %0(p0) = COPY $x0466 %1(s64) = COPY $d1467 %2(s64) = G_CONSTANT i64 8468 %3(p0) = G_PTR_ADD %0, %2469 G_STORE %1, %3 :: (store (s64) into %ir.addr)470...471 472---473name: store_gep_8_s32_fpr474legalized: true475regBankSelected: true476 477registers:478 - { id: 0, class: gpr }479 - { id: 1, class: fpr }480 - { id: 2, class: gpr }481 - { id: 3, class: gpr }482 483body: |484 bb.0:485 liveins: $x0, $s1486 487 ; CHECK-LABEL: name: store_gep_8_s32_fpr488 ; CHECK: liveins: $x0, $s1489 ; CHECK-NEXT: {{ $}}490 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0491 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:fpr32 = COPY $s1492 ; CHECK-NEXT: STRSui [[COPY1]], [[COPY]], 2 :: (store (s32) into %ir.addr)493 %0(p0) = COPY $x0494 %1(s32) = COPY $s1495 %2(s64) = G_CONSTANT i64 8496 %3(p0) = G_PTR_ADD %0, %2497 G_STORE %1, %3 :: (store (s32) into %ir.addr)498...499---500name: store_v2s32501legalized: true502regBankSelected: true503 504registers:505 - { id: 0, class: gpr }506 - { id: 1, class: fpr }507 508body: |509 bb.0:510 liveins: $x0, $d1511 512 ; CHECK-LABEL: name: store_v2s32513 ; CHECK: liveins: $x0, $d1514 ; CHECK-NEXT: {{ $}}515 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0516 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:fpr64 = COPY $d1517 ; CHECK-NEXT: STRDui [[COPY1]], [[COPY]], 0 :: (store (<2 x s32>) into %ir.addr)518 %0(p0) = COPY $x0519 %1(<2 x s32>) = COPY $d1520 G_STORE %1, %0 :: (store (<2 x s32>) into %ir.addr)521 522...523---524name: store_v2s64525legalized: true526regBankSelected: true527 528registers:529 - { id: 0, class: gpr }530 - { id: 1, class: fpr }531 532body: |533 bb.0:534 liveins: $x0, $d1535 ; CHECK-LABEL: name: store_v2s64536 ; CHECK: liveins: $x0, $d1537 ; CHECK-NEXT: {{ $}}538 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0539 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:fpr128 = COPY $q1540 ; CHECK-NEXT: STRQui [[COPY1]], [[COPY]], 0 :: (store (<2 x s64>) into %ir.addr, align 8)541 %0(p0) = COPY $x0542 %1(<2 x s64>) = COPY $q1543 G_STORE %1, %0 :: (store (<2 x s64>) into %ir.addr, align 8)544 545...546---547name: store_4xi16548alignment: 4549legalized: true550regBankSelected: true551tracksRegLiveness: true552registers:553 - { id: 0, class: fpr }554 - { id: 1, class: gpr }555machineFunctionInfo: {}556body: |557 bb.1 (%ir-block.0):558 liveins: $d0, $x0559 560 ; CHECK-LABEL: name: store_4xi16561 ; CHECK: liveins: $d0, $x0562 ; CHECK-NEXT: {{ $}}563 ; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr64 = COPY $d0564 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64sp = COPY $x0565 ; CHECK-NEXT: STRDui [[COPY]], [[COPY1]], 0 :: (store (<4 x s16>) into %ir.ptr)566 ; CHECK-NEXT: RET_ReallyLR567 %0:fpr(<4 x s16>) = COPY $d0568 %1:gpr(p0) = COPY $x0569 G_STORE %0(<4 x s16>), %1(p0) :: (store (<4 x s16>) into %ir.ptr)570 RET_ReallyLR571 572...573---574name: store_4xi32575alignment: 4576legalized: true577regBankSelected: true578tracksRegLiveness: true579registers:580 - { id: 0, class: fpr }581 - { id: 1, class: gpr }582machineFunctionInfo: {}583body: |584 bb.1 (%ir-block.0):585 liveins: $q0, $x0586 587 ; CHECK-LABEL: name: store_4xi32588 ; CHECK: liveins: $q0, $x0589 ; CHECK-NEXT: {{ $}}590 ; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr128 = COPY $q0591 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64sp = COPY $x0592 ; CHECK-NEXT: STRQui [[COPY]], [[COPY1]], 0 :: (store (<4 x s32>) into %ir.ptr)593 ; CHECK-NEXT: RET_ReallyLR594 %0:fpr(<4 x s32>) = COPY $q0595 %1:gpr(p0) = COPY $x0596 G_STORE %0(<4 x s32>), %1(p0) :: (store (<4 x s32>) into %ir.ptr)597 RET_ReallyLR598 599...600---601name: store_8xi16602alignment: 4603legalized: true604regBankSelected: true605tracksRegLiveness: true606registers:607 - { id: 0, class: fpr }608 - { id: 1, class: gpr }609machineFunctionInfo: {}610body: |611 bb.1 (%ir-block.0):612 liveins: $q0, $x0613 614 ; CHECK-LABEL: name: store_8xi16615 ; CHECK: liveins: $q0, $x0616 ; CHECK-NEXT: {{ $}}617 ; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr128 = COPY $q0618 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64sp = COPY $x0619 ; CHECK-NEXT: STRQui [[COPY]], [[COPY1]], 0 :: (store (<8 x s16>) into %ir.ptr)620 ; CHECK-NEXT: RET_ReallyLR621 %0:fpr(<8 x s16>) = COPY $q0622 %1:gpr(p0) = COPY $x0623 G_STORE %0(<8 x s16>), %1(p0) :: (store (<8 x s16>) into %ir.ptr)624 RET_ReallyLR625 626...627---628name: store_16xi8629alignment: 4630legalized: true631regBankSelected: true632tracksRegLiveness: true633registers:634 - { id: 0, class: fpr }635 - { id: 1, class: gpr }636machineFunctionInfo: {}637body: |638 bb.1 (%ir-block.0):639 liveins: $q0, $x0640 641 ; CHECK-LABEL: name: store_16xi8642 ; CHECK: liveins: $q0, $x0643 ; CHECK-NEXT: {{ $}}644 ; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr128 = COPY $q0645 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64sp = COPY $x0646 ; CHECK-NEXT: STRQui [[COPY]], [[COPY1]], 0 :: (store (<16 x s8>) into %ir.ptr)647 ; CHECK-NEXT: RET_ReallyLR648 %0:fpr(<16 x s8>) = COPY $q0649 %1:gpr(p0) = COPY $x0650 G_STORE %0(<16 x s8>), %1(p0) :: (store (<16 x s8>) into %ir.ptr)651 RET_ReallyLR652 653...654---655name: store_adrp_add_low656legalized: true657regBankSelected: true658tracksRegLiveness: true659body: |660 bb.0:661 liveins: $x0662 ; CHECK-LABEL: name: store_adrp_add_low663 ; CHECK: liveins: $x0664 ; CHECK-NEXT: {{ $}}665 ; CHECK-NEXT: %copy:gpr64all = COPY $x0666 ; CHECK-NEXT: %adrp:gpr64common = ADRP target-flags(aarch64-page) @x667 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY %copy668 ; CHECK-NEXT: STRXui [[COPY]], %adrp, target-flags(aarch64-pageoff, aarch64-nc) @x :: (store (p0) into @x)669 %copy:gpr(p0) = COPY $x0670 %adrp:gpr64(p0) = ADRP target-flags(aarch64-page) @x671 %add_low:gpr(p0) = G_ADD_LOW %adrp(p0), target-flags(aarch64-pageoff, aarch64-nc) @x672 G_STORE %copy(p0), %add_low(p0) :: (store (p0) into @x)673 674...675---676name: store_adrp_add_low_foldable_offset677legalized: true678regBankSelected: true679tracksRegLiveness: true680body: |681 bb.0:682 liveins: $x0683 ; CHECK-LABEL: name: store_adrp_add_low_foldable_offset684 ; CHECK: liveins: $x0685 ; CHECK-NEXT: {{ $}}686 ; CHECK-NEXT: %copy:gpr64all = COPY $x0687 ; CHECK-NEXT: %adrp:gpr64common = ADRP target-flags(aarch64-page) @x + 8688 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY %copy689 ; CHECK-NEXT: STRXui [[COPY]], %adrp, target-flags(aarch64-pageoff, aarch64-nc) @x + 8 :: (store (p0) into @x)690 %copy:gpr(p0) = COPY $x0691 %adrp:gpr64(p0) = ADRP target-flags(aarch64-page) @x + 8692 %add_low:gpr(p0) = G_ADD_LOW %adrp(p0), target-flags(aarch64-pageoff, aarch64-nc) @x + 8693 G_STORE %copy(p0), %add_low(p0) :: (store (p0) into @x)694 695...696---697name: store_adrp_add_low_unfoldable_offset698legalized: true699regBankSelected: true700tracksRegLiveness: true701body: |702 bb.0:703 liveins: $x0704 ; CHECK-LABEL: name: store_adrp_add_low_unfoldable_offset705 ; CHECK: liveins: $x0706 ; CHECK-NEXT: {{ $}}707 ; CHECK-NEXT: %copy:gpr64all = COPY $x0708 ; CHECK-NEXT: %add_low:gpr64common = MOVaddr target-flags(aarch64-page) @x + 3, target-flags(aarch64-pageoff, aarch64-nc) @x + 3709 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY %copy710 ; CHECK-NEXT: STRXui [[COPY]], %add_low, 0 :: (store (p0) into @x)711 %copy:gpr(p0) = COPY $x0712 %adrp:gpr64(p0) = ADRP target-flags(aarch64-page) @x + 3713 %add_low:gpr(p0) = G_ADD_LOW %adrp(p0), target-flags(aarch64-pageoff, aarch64-nc) @x + 3714 G_STORE %copy(p0), %add_low(p0) :: (store (p0) into @x)715...716 717---718name: truncstores719legalized: true720regBankSelected: true721body: |722 bb.0:723 liveins: $x0, $w1, $x2724 725 ; CHECK-LABEL: name: truncstores726 ; CHECK: liveins: $x0, $w1, $x2727 ; CHECK-NEXT: {{ $}}728 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0729 ; CHECK-NEXT: %val32:gpr32 = COPY $w1730 ; CHECK-NEXT: %val64:gpr64 = COPY $x2731 ; CHECK-NEXT: STRBBui %val32, [[COPY]], 0 :: (store (s8))732 ; CHECK-NEXT: STRBBui %val32, [[COPY]], 43 :: (store (s8))733 ; CHECK-NEXT: STRHHui %val32, [[COPY]], 0 :: (store (s16))734 ; CHECK-NEXT: STURHHi %val32, [[COPY]], 43 :: (store (s16))735 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32 = COPY %val64.sub_32736 ; CHECK-NEXT: STRHHui [[COPY1]], [[COPY]], 0 :: (store (s16))737 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:gpr32 = COPY %val64.sub_32738 ; CHECK-NEXT: STURHHi [[COPY2]], [[COPY]], 43 :: (store (s16))739 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:gpr32 = COPY %val64.sub_32740 ; CHECK-NEXT: STRWui [[COPY3]], [[COPY]], 0 :: (store (s32))741 ; CHECK-NEXT: [[COPY4:%[0-9]+]]:gpr32 = COPY %val64.sub_32742 ; CHECK-NEXT: STURWi [[COPY4]], [[COPY]], 43 :: (store (s32))743 %0:gpr(p0) = COPY $x0744 %val32:gpr(s32) = COPY $w1745 %val64:gpr(s64) = COPY $x2746 G_STORE %val32, %0 :: (store (s8))747 ; unscaled offset:748 %cst:gpr(s64) = G_CONSTANT i64 43749 %newptr:gpr(p0) = G_PTR_ADD %0, %cst750 G_STORE %val32, %newptr :: (store (s8))751 752 G_STORE %val32, %0 :: (store (s16))753 ; unscaled offset:754 G_STORE %val32, %newptr :: (store (s16))755 756 G_STORE %val64, %0 :: (store (s16))757 ; unscaled offset:758 G_STORE %val64, %newptr :: (store (s16))759 760 G_STORE %val64, %0 :: (store (s32))761 ; unscaled offset:762 G_STORE %val64, %newptr :: (store (s32))763...764