1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -mtriple=aarch64-- -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=1 %s -o - | FileCheck %s 3 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 i64 20 ret void 21 } 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 8 43 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_gpr 52legalized: true 53regBankSelected: true 54 55registers: 56 - { id: 0, class: gpr } 57 - { id: 1, class: gpr } 58 59body: | 60 bb.0: 61 liveins: $x0, $x1 62 63 ; CHECK-LABEL: name: store_s64_gpr 64 ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0 65 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64 = COPY $x1 66 ; CHECK-NEXT: STRXui [[COPY1]], [[COPY]], 0 :: (store (s64) into %ir.addr) 67 %0(p0) = COPY $x0 68 %1(s64) = COPY $x1 69 G_STORE %1, %0 :: (store (s64) into %ir.addr) 70 71... 72 73--- 74name: store_s32_gpr 75legalized: true 76regBankSelected: true 77 78registers: 79 - { id: 0, class: gpr } 80 - { id: 1, class: gpr } 81 82body: | 83 bb.0: 84 liveins: $x0, $w1 85 86 ; CHECK-LABEL: name: store_s32_gpr 87 ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0 88 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1 89 ; CHECK-NEXT: STRWui [[COPY1]], [[COPY]], 0 :: (store (s32) into %ir.addr) 90 %0(p0) = COPY $x0 91 %1(s32) = COPY $w1 92 G_STORE %1, %0 :: (store (s32) into %ir.addr) 93 94... 95 96--- 97name: store_s16_gpr 98legalized: true 99regBankSelected: true 100 101registers: 102 - { id: 0, class: gpr } 103 - { id: 1, class: gpr } 104 105body: | 106 bb.0: 107 liveins: $x0, $w1 108 109 ; CHECK-LABEL: name: store_s16_gpr 110 ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0 111 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1 112 ; CHECK-NEXT: STRHHui [[COPY1]], [[COPY]], 0 :: (store (s16) into %ir.addr) 113 %0(p0) = COPY $x0 114 %2:gpr(s32) = COPY $w1 115 %1(s16) = G_TRUNC %2 116 G_STORE %1, %0 :: (store (s16) into %ir.addr) 117 118... 119 120--- 121name: store_s8_gpr 122legalized: true 123regBankSelected: true 124 125registers: 126 - { id: 0, class: gpr } 127 - { id: 1, class: gpr } 128 129body: | 130 bb.0: 131 liveins: $x0, $w1 132 133 ; CHECK-LABEL: name: store_s8_gpr 134 ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0 135 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1 136 ; CHECK-NEXT: STRBBui [[COPY1]], [[COPY]], 0 :: (store (s8) into %ir.addr) 137 %0(p0) = COPY $x0 138 %2:gpr(s32) = COPY $w1 139 %1(s8) = G_TRUNC %2 140 G_STORE %1, %0 :: (store (s8) into %ir.addr) 141 142... 143 144--- 145name: store_zero_s64_gpr 146legalized: true 147regBankSelected: true 148 149registers: 150 - { id: 0, class: gpr } 151 - { id: 1, class: gpr } 152 153body: | 154 bb.0: 155 liveins: $x0, $x1 156 157 ; CHECK-LABEL: name: store_zero_s64_gpr 158 ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0 159 ; CHECK-NEXT: STRXui $xzr, [[COPY]], 0 :: (store (s64) into %ir.addr) 160 %0(p0) = COPY $x0 161 %1(s64) = G_CONSTANT i64 0 162 G_STORE %1, %0 :: (store (s64) into %ir.addr) 163 164... 165 166--- 167name: store_zero_s32_gpr 168legalized: true 169regBankSelected: true 170 171registers: 172 - { id: 0, class: gpr } 173 - { id: 1, class: gpr } 174 175body: | 176 bb.0: 177 liveins: $x0 178 179 ; CHECK-LABEL: name: store_zero_s32_gpr 180 ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0 181 ; CHECK-NEXT: STRWui $wzr, [[COPY]], 0 :: (store (s32) into %ir.addr) 182 %0(p0) = COPY $x0 183 %1(s32) = G_CONSTANT i32 0 184 G_STORE %1, %0 :: (store (s32) into %ir.addr) 185 186... 187 188--- 189name: store_zero_s16 190legalized: true 191regBankSelected: true 192body: | 193 bb.0: 194 liveins: $x0 195 ; CHECK-LABEL: name: store_zero_s16 196 ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0 197 ; CHECK-NEXT: STRHHui $wzr, [[COPY]], 0 :: (store (s16)) 198 %0:gpr(p0) = COPY $x0 199 %1:gpr(s16) = G_CONSTANT i16 0 200 G_STORE %1(s16), %0(p0) :: (store (s16)) 201 202... 203 204--- 205name: store_zero_s8 206legalized: true 207regBankSelected: true 208body: | 209 bb.0: 210 liveins: $x0 211 ; CHECK-LABEL: name: store_zero_s8 212 ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0 213 ; CHECK-NEXT: STRBBui $wzr, [[COPY]], 0 :: (store (s8)) 214 %0:gpr(p0) = COPY $x0 215 %1:gpr(s8) = G_CONSTANT i8 0 216 G_STORE %1(s8), %0(p0) :: (store (s8)) 217... 218 219--- 220name: store_zero_look_through_cst 221legalized: true 222regBankSelected: true 223body: | 224 bb.0: 225 liveins: $x0 226 ; CHECK-LABEL: name: store_zero_look_through_cst 227 ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0 228 ; CHECK-NEXT: STRXui $xzr, [[COPY]], 0 :: (store (s64) into %ir.addr) 229 %0:gpr(p0) = COPY $x0 230 %1:gpr(s32) = G_CONSTANT i32 0 231 %2:gpr(s64) = G_ZEXT %1 232 G_STORE %2, %0 :: (store (s64) into %ir.addr) 233... 234 235--- 236name: store_fi_s64_gpr 237legalized: true 238regBankSelected: true 239 240registers: 241 - { id: 0, class: gpr } 242 - { id: 1, class: gpr } 243 244stack: 245 - { id: 0, name: ptr0, offset: 0, size: 8, alignment: 8 } 246 247body: | 248 bb.0: 249 liveins: $x0 250 251 ; CHECK-LABEL: name: store_fi_s64_gpr 252 ; CHECK: [[COPY:%[0-9]+]]:gpr64all = COPY $x0 253 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64 = COPY [[COPY]] 254 ; CHECK-NEXT: STRXui [[COPY1]], %stack.0.ptr0, 0 :: (store (p0)) 255 %0(p0) = COPY $x0 256 %1(p0) = G_FRAME_INDEX %stack.0.ptr0 257 G_STORE %0, %1 :: (store (p0)) 258... 259 260--- 261name: store_gep_128_s64_gpr 262legalized: true 263regBankSelected: true 264 265registers: 266 - { id: 0, class: gpr } 267 - { id: 1, class: gpr } 268 - { id: 2, class: gpr } 269 - { id: 3, class: gpr } 270 271body: | 272 bb.0: 273 liveins: $x0, $x1 274 275 ; CHECK-LABEL: name: store_gep_128_s64_gpr 276 ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0 277 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64 = COPY $x1 278 ; CHECK-NEXT: STRXui [[COPY1]], [[COPY]], 16 :: (store (s64) into %ir.addr) 279 %0(p0) = COPY $x0 280 %1(s64) = COPY $x1 281 %2(s64) = G_CONSTANT i64 128 282 %3(p0) = G_PTR_ADD %0, %2 283 G_STORE %1, %3 :: (store (s64) into %ir.addr) 284... 285 286--- 287name: store_gep_512_s32_gpr 288legalized: true 289regBankSelected: true 290 291registers: 292 - { id: 0, class: gpr } 293 - { id: 1, class: gpr } 294 - { id: 2, class: gpr } 295 - { id: 3, class: gpr } 296 297body: | 298 bb.0: 299 liveins: $x0, $w1 300 301 ; CHECK-LABEL: name: store_gep_512_s32_gpr 302 ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0 303 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1 304 ; CHECK-NEXT: STRWui [[COPY1]], [[COPY]], 128 :: (store (s32) into %ir.addr) 305 %0(p0) = COPY $x0 306 %1(s32) = COPY $w1 307 %2(s64) = G_CONSTANT i64 512 308 %3(p0) = G_PTR_ADD %0, %2 309 G_STORE %1, %3 :: (store (s32) into %ir.addr) 310... 311 312--- 313name: store_gep_64_s16_gpr 314legalized: true 315regBankSelected: true 316 317registers: 318 - { id: 0, class: gpr } 319 - { id: 1, class: gpr } 320 - { id: 2, class: gpr } 321 - { id: 3, class: gpr } 322 323body: | 324 bb.0: 325 liveins: $x0, $w1 326 327 ; CHECK-LABEL: name: store_gep_64_s16_gpr 328 ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0 329 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1 330 ; CHECK-NEXT: STRHHui [[COPY1]], [[COPY]], 32 :: (store (s16) into %ir.addr) 331 %0(p0) = COPY $x0 332 %4:gpr(s32) = COPY $w1 333 %1(s16) = G_TRUNC %4 334 %2(s64) = G_CONSTANT i64 64 335 %3(p0) = G_PTR_ADD %0, %2 336 G_STORE %1, %3 :: (store (s16) into %ir.addr) 337... 338 339--- 340name: store_gep_1_s8_gpr 341legalized: true 342regBankSelected: true 343 344registers: 345 - { id: 0, class: gpr } 346 - { id: 1, class: gpr } 347 - { id: 2, class: gpr } 348 - { id: 3, class: gpr } 349 350body: | 351 bb.0: 352 liveins: $x0, $w1 353 354 ; CHECK-LABEL: name: store_gep_1_s8_gpr 355 ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0 356 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1 357 ; CHECK-NEXT: STRBBui [[COPY1]], [[COPY]], 1 :: (store (s8) into %ir.addr) 358 %0(p0) = COPY $x0 359 %4:gpr(s32) = COPY $w1 360 %1(s8) = G_TRUNC %4 361 %2(s64) = G_CONSTANT i64 1 362 %3(p0) = G_PTR_ADD %0, %2 363 G_STORE %1, %3 :: (store (s8) into %ir.addr) 364... 365 366--- 367name: store_s64_fpr 368legalized: true 369regBankSelected: true 370 371registers: 372 - { id: 0, class: gpr } 373 - { id: 1, class: fpr } 374 375body: | 376 bb.0: 377 liveins: $x0, $d1 378 379 ; CHECK-LABEL: name: store_s64_fpr 380 ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0 381 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:fpr64 = COPY $d1 382 ; CHECK-NEXT: STRDui [[COPY1]], [[COPY]], 0 :: (store (s64) into %ir.addr) 383 %0(p0) = COPY $x0 384 %1(s64) = COPY $d1 385 G_STORE %1, %0 :: (store (s64) into %ir.addr) 386 387... 388 389--- 390name: store_s32_fpr 391legalized: true 392regBankSelected: true 393 394registers: 395 - { id: 0, class: gpr } 396 - { id: 1, class: fpr } 397 398body: | 399 bb.0: 400 liveins: $x0, $s1 401 402 ; CHECK-LABEL: name: store_s32_fpr 403 ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0 404 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:fpr32 = COPY $s1 405 ; CHECK-NEXT: STRSui [[COPY1]], [[COPY]], 0 :: (store (s32) into %ir.addr) 406 %0(p0) = COPY $x0 407 %1(s32) = COPY $s1 408 G_STORE %1, %0 :: (store (s32) into %ir.addr) 409 410... 411 412--- 413name: store_gep_8_s64_fpr 414legalized: true 415regBankSelected: true 416 417registers: 418 - { id: 0, class: gpr } 419 - { id: 1, class: fpr } 420 - { id: 2, class: gpr } 421 - { id: 3, class: gpr } 422 423body: | 424 bb.0: 425 liveins: $x0, $d1 426 427 ; CHECK-LABEL: name: store_gep_8_s64_fpr 428 ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0 429 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:fpr64 = COPY $d1 430 ; CHECK-NEXT: STRDui [[COPY1]], [[COPY]], 1 :: (store (s64) into %ir.addr) 431 %0(p0) = COPY $x0 432 %1(s64) = COPY $d1 433 %2(s64) = G_CONSTANT i64 8 434 %3(p0) = G_PTR_ADD %0, %2 435 G_STORE %1, %3 :: (store (s64) into %ir.addr) 436... 437 438--- 439name: store_gep_8_s32_fpr 440legalized: true 441regBankSelected: true 442 443registers: 444 - { id: 0, class: gpr } 445 - { id: 1, class: fpr } 446 - { id: 2, class: gpr } 447 - { id: 3, class: gpr } 448 449body: | 450 bb.0: 451 liveins: $x0, $s1 452 453 ; CHECK-LABEL: name: store_gep_8_s32_fpr 454 ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0 455 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:fpr32 = COPY $s1 456 ; CHECK-NEXT: STRSui [[COPY1]], [[COPY]], 2 :: (store (s32) into %ir.addr) 457 %0(p0) = COPY $x0 458 %1(s32) = COPY $s1 459 %2(s64) = G_CONSTANT i64 8 460 %3(p0) = G_PTR_ADD %0, %2 461 G_STORE %1, %3 :: (store (s32) into %ir.addr) 462... 463--- 464name: store_v2s32 465legalized: true 466regBankSelected: true 467 468registers: 469 - { id: 0, class: gpr } 470 - { id: 1, class: fpr } 471 472body: | 473 bb.0: 474 liveins: $x0, $d1 475 476 ; CHECK-LABEL: name: store_v2s32 477 ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0 478 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:fpr64 = COPY $d1 479 ; CHECK-NEXT: STRDui [[COPY1]], [[COPY]], 0 :: (store (<2 x s32>) into %ir.addr) 480 %0(p0) = COPY $x0 481 %1(<2 x s32>) = COPY $d1 482 G_STORE %1, %0 :: (store (<2 x s32>) into %ir.addr) 483 484... 485--- 486name: store_v2s64 487legalized: true 488regBankSelected: true 489 490registers: 491 - { id: 0, class: gpr } 492 - { id: 1, class: fpr } 493 494body: | 495 bb.0: 496 liveins: $x0, $d1 497 ; CHECK-LABEL: name: store_v2s64 498 ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0 499 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:fpr128 = COPY $q1 500 ; CHECK-NEXT: STRQui [[COPY1]], [[COPY]], 0 :: (store (<2 x s64>) into %ir.addr, align 8) 501 %0(p0) = COPY $x0 502 %1(<2 x s64>) = COPY $q1 503 G_STORE %1, %0 :: (store (<2 x s64>) into %ir.addr, align 8) 504 505... 506--- 507name: store_4xi16 508alignment: 4 509legalized: true 510regBankSelected: true 511tracksRegLiveness: true 512registers: 513 - { id: 0, class: fpr } 514 - { id: 1, class: gpr } 515machineFunctionInfo: {} 516body: | 517 bb.1 (%ir-block.0): 518 liveins: $d0, $x0 519 520 ; CHECK-LABEL: name: store_4xi16 521 ; CHECK: liveins: $d0, $x0 522 ; CHECK-NEXT: {{ $}} 523 ; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr64 = COPY $d0 524 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64sp = COPY $x0 525 ; CHECK-NEXT: STRDui [[COPY]], [[COPY1]], 0 :: (store (<4 x s16>) into %ir.ptr) 526 ; CHECK-NEXT: RET_ReallyLR 527 %0:fpr(<4 x s16>) = COPY $d0 528 %1:gpr(p0) = COPY $x0 529 G_STORE %0(<4 x s16>), %1(p0) :: (store (<4 x s16>) into %ir.ptr) 530 RET_ReallyLR 531 532... 533--- 534name: store_4xi32 535alignment: 4 536legalized: true 537regBankSelected: true 538tracksRegLiveness: true 539registers: 540 - { id: 0, class: fpr } 541 - { id: 1, class: gpr } 542machineFunctionInfo: {} 543body: | 544 bb.1 (%ir-block.0): 545 liveins: $q0, $x0 546 547 ; CHECK-LABEL: name: store_4xi32 548 ; CHECK: liveins: $q0, $x0 549 ; CHECK-NEXT: {{ $}} 550 ; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr128 = COPY $q0 551 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64sp = COPY $x0 552 ; CHECK-NEXT: STRQui [[COPY]], [[COPY1]], 0 :: (store (<4 x s32>) into %ir.ptr) 553 ; CHECK-NEXT: RET_ReallyLR 554 %0:fpr(<4 x s32>) = COPY $q0 555 %1:gpr(p0) = COPY $x0 556 G_STORE %0(<4 x s32>), %1(p0) :: (store (<4 x s32>) into %ir.ptr) 557 RET_ReallyLR 558 559... 560--- 561name: store_8xi16 562alignment: 4 563legalized: true 564regBankSelected: true 565tracksRegLiveness: true 566registers: 567 - { id: 0, class: fpr } 568 - { id: 1, class: gpr } 569machineFunctionInfo: {} 570body: | 571 bb.1 (%ir-block.0): 572 liveins: $q0, $x0 573 574 ; CHECK-LABEL: name: store_8xi16 575 ; CHECK: liveins: $q0, $x0 576 ; CHECK-NEXT: {{ $}} 577 ; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr128 = COPY $q0 578 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64sp = COPY $x0 579 ; CHECK-NEXT: STRQui [[COPY]], [[COPY1]], 0 :: (store (<8 x s16>) into %ir.ptr) 580 ; CHECK-NEXT: RET_ReallyLR 581 %0:fpr(<8 x s16>) = COPY $q0 582 %1:gpr(p0) = COPY $x0 583 G_STORE %0(<8 x s16>), %1(p0) :: (store (<8 x s16>) into %ir.ptr) 584 RET_ReallyLR 585 586... 587--- 588name: store_16xi8 589alignment: 4 590legalized: true 591regBankSelected: true 592tracksRegLiveness: true 593registers: 594 - { id: 0, class: fpr } 595 - { id: 1, class: gpr } 596machineFunctionInfo: {} 597body: | 598 bb.1 (%ir-block.0): 599 liveins: $q0, $x0 600 601 ; CHECK-LABEL: name: store_16xi8 602 ; CHECK: liveins: $q0, $x0 603 ; CHECK-NEXT: {{ $}} 604 ; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr128 = COPY $q0 605 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64sp = COPY $x0 606 ; CHECK-NEXT: STRQui [[COPY]], [[COPY1]], 0 :: (store (<16 x s8>) into %ir.ptr) 607 ; CHECK-NEXT: RET_ReallyLR 608 %0:fpr(<16 x s8>) = COPY $q0 609 %1:gpr(p0) = COPY $x0 610 G_STORE %0(<16 x s8>), %1(p0) :: (store (<16 x s8>) into %ir.ptr) 611 RET_ReallyLR 612 613... 614--- 615name: store_adrp_add_low 616legalized: true 617regBankSelected: true 618tracksRegLiveness: true 619body: | 620 bb.0: 621 liveins: $x0 622 ; CHECK-LABEL: name: store_adrp_add_low 623 ; CHECK: liveins: $x0 624 ; CHECK-NEXT: {{ $}} 625 ; CHECK-NEXT: %copy:gpr64all = COPY $x0 626 ; CHECK-NEXT: %adrp:gpr64common = ADRP target-flags(aarch64-page) @x 627 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY %copy 628 ; CHECK-NEXT: STRXui [[COPY]], %adrp, target-flags(aarch64-pageoff, aarch64-nc) @x :: (store (p0) into @x) 629 %copy:gpr(p0) = COPY $x0 630 %adrp:gpr64(p0) = ADRP target-flags(aarch64-page) @x 631 %add_low:gpr(p0) = G_ADD_LOW %adrp(p0), target-flags(aarch64-pageoff, aarch64-nc) @x 632 G_STORE %copy(p0), %add_low(p0) :: (store (p0) into @x) 633 634... 635--- 636name: store_adrp_add_low_foldable_offset 637legalized: true 638regBankSelected: true 639tracksRegLiveness: true 640body: | 641 bb.0: 642 liveins: $x0 643 ; CHECK-LABEL: name: store_adrp_add_low_foldable_offset 644 ; CHECK: liveins: $x0 645 ; CHECK-NEXT: {{ $}} 646 ; CHECK-NEXT: %copy:gpr64all = COPY $x0 647 ; CHECK-NEXT: %adrp:gpr64common = ADRP target-flags(aarch64-page) @x + 8 648 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY %copy 649 ; CHECK-NEXT: STRXui [[COPY]], %adrp, target-flags(aarch64-pageoff, aarch64-nc) @x + 8 :: (store (p0) into @x) 650 %copy:gpr(p0) = COPY $x0 651 %adrp:gpr64(p0) = ADRP target-flags(aarch64-page) @x + 8 652 %add_low:gpr(p0) = G_ADD_LOW %adrp(p0), target-flags(aarch64-pageoff, aarch64-nc) @x + 8 653 G_STORE %copy(p0), %add_low(p0) :: (store (p0) into @x) 654 655... 656--- 657name: store_adrp_add_low_unfoldable_offset 658legalized: true 659regBankSelected: true 660tracksRegLiveness: true 661body: | 662 bb.0: 663 liveins: $x0 664 ; CHECK-LABEL: name: store_adrp_add_low_unfoldable_offset 665 ; CHECK: liveins: $x0 666 ; CHECK-NEXT: {{ $}} 667 ; CHECK-NEXT: %copy:gpr64all = COPY $x0 668 ; CHECK-NEXT: %add_low:gpr64common = MOVaddr target-flags(aarch64-page) @x + 3, target-flags(aarch64-pageoff, aarch64-nc) @x + 3 669 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY %copy 670 ; CHECK-NEXT: STRXui [[COPY]], %add_low, 0 :: (store (p0) into @x) 671 %copy:gpr(p0) = COPY $x0 672 %adrp:gpr64(p0) = ADRP target-flags(aarch64-page) @x + 3 673 %add_low:gpr(p0) = G_ADD_LOW %adrp(p0), target-flags(aarch64-pageoff, aarch64-nc) @x + 3 674 G_STORE %copy(p0), %add_low(p0) :: (store (p0) into @x) 675... 676 677--- 678name: truncstores 679legalized: true 680regBankSelected: true 681body: | 682 bb.0: 683 liveins: $x0, $w1, $x2 684 685 ; CHECK-LABEL: name: truncstores 686 ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0 687 ; CHECK-NEXT: %val32:gpr32 = COPY $w1 688 ; CHECK-NEXT: %val64:gpr64 = COPY $x2 689 ; CHECK-NEXT: STRBBui %val32, [[COPY]], 0 :: (store (s8)) 690 ; CHECK-NEXT: STRBBui %val32, [[COPY]], 43 :: (store (s8)) 691 ; CHECK-NEXT: STRHHui %val32, [[COPY]], 0 :: (store (s16)) 692 ; CHECK-NEXT: STURHHi %val32, [[COPY]], 43 :: (store (s16)) 693 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32 = COPY %val64.sub_32 694 ; CHECK-NEXT: STRHHui [[COPY1]], [[COPY]], 0 :: (store (s16)) 695 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:gpr32 = COPY %val64.sub_32 696 ; CHECK-NEXT: STURHHi [[COPY2]], [[COPY]], 43 :: (store (s16)) 697 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:gpr32 = COPY %val64.sub_32 698 ; CHECK-NEXT: STRWui [[COPY3]], [[COPY]], 0 :: (store (s32)) 699 ; CHECK-NEXT: [[COPY4:%[0-9]+]]:gpr32 = COPY %val64.sub_32 700 ; CHECK-NEXT: STURWi [[COPY4]], [[COPY]], 43 :: (store (s32)) 701 %0:gpr(p0) = COPY $x0 702 %val32:gpr(s32) = COPY $w1 703 %val64:gpr(s64) = COPY $x2 704 G_STORE %val32, %0 :: (store (s8)) 705 ; unscaled offset: 706 %cst:gpr(s64) = G_CONSTANT i64 43 707 %newptr:gpr(p0) = G_PTR_ADD %0, %cst 708 G_STORE %val32, %newptr :: (store (s8)) 709 710 G_STORE %val32, %0 :: (store (s16)) 711 ; unscaled offset: 712 G_STORE %val32, %newptr :: (store (s16)) 713 714 G_STORE %val64, %0 :: (store (s16)) 715 ; unscaled offset: 716 G_STORE %val64, %newptr :: (store (s16)) 717 718 G_STORE %val64, %0 :: (store (s32)) 719 ; unscaled offset: 720 G_STORE %val64, %newptr :: (store (s32)) 721... 722