525 lines · plain
1# RUN: llc -mtriple=aarch64-linux-gnu -run-pass=greedy -aarch64-stack-hazard-size=0 %s -o - | FileCheck %s2# RUN: llc -mtriple=aarch64-linux-gnu -start-before=greedy -stop-after=aarch64-expand-pseudo -verify-machineinstrs -aarch64-stack-hazard-size=0 %s -o - | FileCheck %s --check-prefix=EXPAND3--- |4 ; ModuleID = '<stdin>'5 source_filename = "<stdin>"6 target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"7 target triple = "aarch64--linux-gnu"8 9 define aarch64_sve_vector_pcs void @spills_fills_stack_id_ppr() #0 { entry: unreachable }10 define aarch64_sve_vector_pcs void @spills_fills_stack_id_ppr2() #0 { entry: unreachable }11 define aarch64_sve_vector_pcs void @spills_fills_stack_id_ppr2mul2() #0 { entry: unreachable }12 define aarch64_sve_vector_pcs void @spills_fills_stack_id_pnr() #1 { entry: unreachable }13 define aarch64_sve_vector_pcs void @spills_fills_stack_id_virtreg_pnr() #1 { entry: unreachable }14 define aarch64_sve_vector_pcs void @spills_fills_stack_id_virtreg_ppr_to_pnr() #1 { entry: unreachable }15 define aarch64_sve_vector_pcs void @spills_fills_stack_id_zpr() #0 { entry: unreachable }16 define aarch64_sve_vector_pcs void @spills_fills_stack_id_zpr2() #0 { entry: unreachable }17 define aarch64_sve_vector_pcs void @spills_fills_stack_id_zpr2strided() #2 { entry: unreachable }18 define aarch64_sve_vector_pcs void @spills_fills_stack_id_zpr3() #0 { entry: unreachable }19 define aarch64_sve_vector_pcs void @spills_fills_stack_id_zpr4() #0 { entry: unreachable }20 define aarch64_sve_vector_pcs void @spills_fills_stack_id_zpr4strided() #2 { entry: unreachable }21 22 attributes #0 = { nounwind "target-features"="+sve" }23 attributes #1 = { nounwind "target-features"="+sve2p1" }24 attributes #2 = { nounwind "target-features"="+sve,+sme2" "aarch64_pstate_sm_enabled" }25 26...27---28name: spills_fills_stack_id_ppr29tracksRegLiveness: true30registers:31 - { id: 0, class: ppr }32stack:33liveins:34 - { reg: '$p0', virtual-reg: '%0' }35body: |36 bb.0.entry:37 liveins: $p038 39 ; CHECK-LABEL: name: spills_fills_stack_id_ppr40 ; CHECK: stack:41 ; CHECK: - { id: 0, name: '', type: spill-slot, offset: 0, size: 2, alignment: 242 ; CHECK-NEXT: stack-id: scalable-predicate-vector, callee-saved-register: ''43 44 ; EXPAND-LABEL: name: spills_fills_stack_id_ppr45 ; EXPAND: STR_PXI $p0, $sp, 746 ; EXPAND: $p0 = LDR_PXI $sp, 747 48 %0:ppr = COPY $p049 50 $p0 = IMPLICIT_DEF51 $p1 = IMPLICIT_DEF52 $p2 = IMPLICIT_DEF53 $p3 = IMPLICIT_DEF54 $p4 = IMPLICIT_DEF55 $p5 = IMPLICIT_DEF56 $p6 = IMPLICIT_DEF57 $p7 = IMPLICIT_DEF58 $p8 = IMPLICIT_DEF59 $p9 = IMPLICIT_DEF60 $p10 = IMPLICIT_DEF61 $p11 = IMPLICIT_DEF62 $p12 = IMPLICIT_DEF63 $p13 = IMPLICIT_DEF64 $p14 = IMPLICIT_DEF65 $p15 = IMPLICIT_DEF66 67 $p0 = COPY %068 RET_ReallyLR69...70---71name: spills_fills_stack_id_ppr272tracksRegLiveness: true73registers:74 - { id: 0, class: ppr2 }75stack:76liveins:77 - { reg: '$p0_p1', virtual-reg: '%0' }78body: |79 bb.0.entry:80 liveins: $p0_p181 82 ; CHECK-LABEL: name: spills_fills_stack_id_ppr283 ; CHECK: stack:84 ; CHECK: - { id: 0, name: '', type: spill-slot, offset: 0, size: 4, alignment: 285 ; CHECK-NEXT: stack-id: scalable-predicate-vector, callee-saved-register: ''86 87 ; EXPAND-LABEL: name: spills_fills_stack_id_ppr288 ; EXPAND: STR_PXI $p0, $sp, 689 ; EXPAND: STR_PXI $p1, $sp, 790 ; EXPAND: $p0 = LDR_PXI $sp, 691 ; EXPAND: $p1 = LDR_PXI $sp, 792 93 %0:ppr2 = COPY $p0_p194 95 $p0 = IMPLICIT_DEF96 $p1 = IMPLICIT_DEF97 $p2 = IMPLICIT_DEF98 $p3 = IMPLICIT_DEF99 $p4 = IMPLICIT_DEF100 $p5 = IMPLICIT_DEF101 $p6 = IMPLICIT_DEF102 $p7 = IMPLICIT_DEF103 $p8 = IMPLICIT_DEF104 $p9 = IMPLICIT_DEF105 $p10 = IMPLICIT_DEF106 $p11 = IMPLICIT_DEF107 $p12 = IMPLICIT_DEF108 $p13 = IMPLICIT_DEF109 $p14 = IMPLICIT_DEF110 $p15 = IMPLICIT_DEF111 112 $p0_p1 = COPY %0113 RET_ReallyLR114...115---116name: spills_fills_stack_id_ppr2mul2117tracksRegLiveness: true118registers:119 - { id: 0, class: ppr2mul2 }120stack:121liveins:122 - { reg: '$p0_p1', virtual-reg: '%0' }123body: |124 bb.0.entry:125 liveins: $p0_p1126 127 ; CHECK-LABEL: name: spills_fills_stack_id_ppr2128 ; CHECK: stack:129 ; CHECK: - { id: 0, name: '', type: spill-slot, offset: 0, size: 4, alignment: 2130 ; CHECK-NEXT: stack-id: scalable-predicate-vector, callee-saved-register: ''131 132 ; EXPAND-LABEL: name: spills_fills_stack_id_ppr2mul2133 ; EXPAND: STR_PXI $p0, $sp, 6134 ; EXPAND: STR_PXI $p1, $sp, 7135 ; EXPAND: $p0 = LDR_PXI $sp, 6136 ; EXPAND: $p1 = LDR_PXI $sp, 7137 138 %0:ppr2mul2 = COPY $p0_p1139 140 $p0 = IMPLICIT_DEF141 $p1 = IMPLICIT_DEF142 $p2 = IMPLICIT_DEF143 $p3 = IMPLICIT_DEF144 $p4 = IMPLICIT_DEF145 $p5 = IMPLICIT_DEF146 $p6 = IMPLICIT_DEF147 $p7 = IMPLICIT_DEF148 $p8 = IMPLICIT_DEF149 $p9 = IMPLICIT_DEF150 $p10 = IMPLICIT_DEF151 $p11 = IMPLICIT_DEF152 $p12 = IMPLICIT_DEF153 $p13 = IMPLICIT_DEF154 $p14 = IMPLICIT_DEF155 $p15 = IMPLICIT_DEF156 157 $p0_p1 = COPY %0158 RET_ReallyLR159...160---161name: spills_fills_stack_id_pnr162tracksRegLiveness: true163registers:164 - { id: 0, class: pnr }165stack:166liveins:167 - { reg: '$pn0', virtual-reg: '%0' }168body: |169 bb.0.entry:170 liveins: $pn0171 172 ; CHECK-LABEL: name: spills_fills_stack_id_pnr173 ; CHECK: stack:174 ; CHECK: - { id: 0, name: '', type: spill-slot, offset: 0, size: 2, alignment: 2175 ; CHECK-NEXT: stack-id: scalable-predicate-vector, callee-saved-register: ''176 177 ; EXPAND-LABEL: name: spills_fills_stack_id_pnr178 ; EXPAND: STR_PXI $pn0, $sp, 7179 ; EXPAND: $pn0 = LDR_PXI $sp, 7, implicit-def $pn0180 181 %0:pnr = COPY $pn0182 183 $pn0 = IMPLICIT_DEF184 $pn1 = IMPLICIT_DEF185 $pn2 = IMPLICIT_DEF186 $pn3 = IMPLICIT_DEF187 $pn4 = IMPLICIT_DEF188 $pn5 = IMPLICIT_DEF189 $pn6 = IMPLICIT_DEF190 $pn7 = IMPLICIT_DEF191 $pn8 = IMPLICIT_DEF192 $pn9 = IMPLICIT_DEF193 $pn10 = IMPLICIT_DEF194 $pn11 = IMPLICIT_DEF195 $pn12 = IMPLICIT_DEF196 $pn13 = IMPLICIT_DEF197 $pn14 = IMPLICIT_DEF198 $pn15 = IMPLICIT_DEF199 200 $pn0 = COPY %0201 RET_ReallyLR202...203---204name: spills_fills_stack_id_virtreg_pnr205tracksRegLiveness: true206registers:207 - { id: 0, class: pnr_p8to15 }208stack:209body: |210 bb.0.entry:211 ; CHECK-LABEL: name: spills_fills_stack_id_virtreg_pnr212 ; CHECK: stack:213 ; CHECK: - { id: 0, name: '', type: spill-slot, offset: 0, size: 2, alignment: 2214 ; CHECK-NEXT: stack-id: scalable-predicate-vector, callee-saved-register: ''215 216 ; EXPAND-LABEL: name: spills_fills_stack_id_virtreg_pnr217 ; EXPAND: renamable $pn8 = WHILEGE_CXX_B218 ; EXPAND: STR_PXI killed renamable $pn8, $sp, 7219 ;220 ; EXPAND: renamable $pn8 = LDR_PXI $sp, 7221 ; EXPAND-NEXT: $p0 = PEXT_PCI_B killed renamable $pn8, 0222 223 224 %0:pnr_p8to15 = WHILEGE_CXX_B undef $x0, undef $x0, 0, implicit-def dead $nzcv225 226 $pn0 = IMPLICIT_DEF227 $pn1 = IMPLICIT_DEF228 $pn2 = IMPLICIT_DEF229 $pn3 = IMPLICIT_DEF230 $pn4 = IMPLICIT_DEF231 $pn5 = IMPLICIT_DEF232 $pn6 = IMPLICIT_DEF233 $pn7 = IMPLICIT_DEF234 $pn8 = IMPLICIT_DEF235 $pn9 = IMPLICIT_DEF236 $pn10 = IMPLICIT_DEF237 $pn11 = IMPLICIT_DEF238 $pn12 = IMPLICIT_DEF239 $pn13 = IMPLICIT_DEF240 $pn14 = IMPLICIT_DEF241 $pn15 = IMPLICIT_DEF242 243 $p0 = PEXT_PCI_B %0, 0244 RET_ReallyLR245...246---247name: spills_fills_stack_id_virtreg_ppr_to_pnr248tracksRegLiveness: true249registers:250 - { id: 0, class: ppr }251 - { id: 1, class: pnr_p8to15 }252stack:253body: |254 bb.0.entry:255 liveins: $p0256 257 %0:ppr = COPY $p0258 259 $pn0 = IMPLICIT_DEF260 $pn1 = IMPLICIT_DEF261 $pn2 = IMPLICIT_DEF262 $pn3 = IMPLICIT_DEF263 $pn4 = IMPLICIT_DEF264 $pn5 = IMPLICIT_DEF265 $pn6 = IMPLICIT_DEF266 $pn7 = IMPLICIT_DEF267 $pn8 = IMPLICIT_DEF268 $pn9 = IMPLICIT_DEF269 $pn10 = IMPLICIT_DEF270 $pn11 = IMPLICIT_DEF271 $pn12 = IMPLICIT_DEF272 $pn13 = IMPLICIT_DEF273 $pn14 = IMPLICIT_DEF274 $pn15 = IMPLICIT_DEF275 276 %1:pnr_p8to15 = COPY %0277 $p0 = PEXT_PCI_B %1, 0278 RET_ReallyLR279...280---281name: spills_fills_stack_id_zpr282tracksRegLiveness: true283registers:284 - { id: 0, class: zpr }285stack:286liveins:287 - { reg: '$z0', virtual-reg: '%0' }288body: |289 bb.0.entry:290 liveins: $z0291 292 ; CHECK-LABEL: name: spills_fills_stack_id_zpr293 ; CHECK: stack:294 ; CHECK: - { id: 0, name: '', type: spill-slot, offset: 0, size: 16, alignment: 16295 ; CHECK-NEXT: stack-id: scalable-vector, callee-saved-register: ''296 297 ; EXPAND-LABEL: name: spills_fills_stack_id_zpr298 ; EXPAND: STR_ZXI $z0, $sp, 0299 ; EXPAND: $z0 = LDR_ZXI $sp, 0300 301 %0:zpr = COPY $z0302 303 $z0_z1_z2_z3 = IMPLICIT_DEF304 $z4_z5_z6_z7 = IMPLICIT_DEF305 $z8_z9_z10_z11 = IMPLICIT_DEF306 $z12_z13_z14_z15 = IMPLICIT_DEF307 $z16_z17_z18_z19 = IMPLICIT_DEF308 $z20_z21_z22_z23 = IMPLICIT_DEF309 $z24_z25_z26_z27 = IMPLICIT_DEF310 $z28_z29_z30_z31 = IMPLICIT_DEF311 312 $z0 = COPY %0313 RET_ReallyLR314...315---316name: spills_fills_stack_id_zpr2317tracksRegLiveness: true318registers:319 - { id: 0, class: zpr2 }320stack:321liveins:322 - { reg: '$z1_z2', virtual-reg: '%0' }323body: |324 bb.0.entry:325 liveins: $z1_z2326 327 ; CHECK-LABEL: name: spills_fills_stack_id_zpr2328 ; CHECK: stack:329 ; CHECK: - { id: 0, name: '', type: spill-slot, offset: 0, size: 32, alignment: 16330 ; CHECK-NEXT: stack-id: scalable-vector331 332 ; EXPAND-LABEL: name: spills_fills_stack_id_zpr2333 ; EXPAND: STR_ZXI $z1, $sp, 0334 ; EXPAND: STR_ZXI $z2, $sp, 1335 ; EXPAND: $z1 = LDR_ZXI $sp, 0336 ; EXPAND: $z2 = LDR_ZXI $sp, 1337 338 %0:zpr2 = COPY $z1_z2339 340 $z0_z1_z2_z3 = IMPLICIT_DEF341 $z4_z5_z6_z7 = IMPLICIT_DEF342 $z8_z9_z10_z11 = IMPLICIT_DEF343 $z12_z13_z14_z15 = IMPLICIT_DEF344 $z16_z17_z18_z19 = IMPLICIT_DEF345 $z20_z21_z22_z23 = IMPLICIT_DEF346 $z24_z25_z26_z27 = IMPLICIT_DEF347 $z28_z29_z30_z31 = IMPLICIT_DEF348 349 $z1_z2 = COPY %0350 RET_ReallyLR351...352---353name: spills_fills_stack_id_zpr2strided354tracksRegLiveness: true355registers:356 - { id: 0, class: zpr2strided }357stack:358liveins:359 - { reg: '$z0_z8', virtual-reg: '%0' }360body: |361 bb.0.entry:362 liveins: $z0_z1363 successors: %bb.1364 365 $z0_z8 = COPY $z0_z1366 367 B %bb.1368 369 bb.1:370 liveins: $z0_z8371 372 ; CHECK-LABEL: name: spills_fills_stack_id_zpr2strided373 ; CHECK: stack:374 ; CHECK: - { id: 0, name: '', type: spill-slot, offset: 0, size: 32, alignment: 16375 ; CHECK-NEXT: stack-id: scalable-vector376 377 ; EXPAND-LABEL: name: spills_fills_stack_id_zpr2strided378 ; EXPAND: STR_ZXI $z0, $sp, 0379 ; EXPAND: STR_ZXI $z8, $sp, 1380 ; EXPAND: $z0 = LDR_ZXI $sp, 0381 ; EXPAND: $z8 = LDR_ZXI $sp, 1382 383 %0:zpr2strided = COPY $z0_z8384 385 $z0_z1_z2_z3 = IMPLICIT_DEF386 $z4_z5_z6_z7 = IMPLICIT_DEF387 $z8_z9_z10_z11 = IMPLICIT_DEF388 $z12_z13_z14_z15 = IMPLICIT_DEF389 $z16_z17_z18_z19 = IMPLICIT_DEF390 $z20_z21_z22_z23 = IMPLICIT_DEF391 $z24_z25_z26_z27 = IMPLICIT_DEF392 $z28_z29_z30_z31 = IMPLICIT_DEF393 394 $z0_z8 = COPY %0395 RET_ReallyLR396...397---398name: spills_fills_stack_id_zpr3399tracksRegLiveness: true400registers:401 - { id: 0, class: zpr3 }402stack:403liveins:404 - { reg: '$z0_z1_z2', virtual-reg: '%0' }405body: |406 bb.0.entry:407 liveins: $z0_z1_z2408 409 ; CHECK-LABEL: name: spills_fills_stack_id_zpr3410 ; CHECK: stack:411 ; CHECK: - { id: 0, name: '', type: spill-slot, offset: 0, size: 48, alignment: 16412 ; CHECK-NEXT: stack-id: scalable-vector413 414 ; EXPAND-LABEL: name: spills_fills_stack_id_zpr3415 ; EXPAND: STR_ZXI $z0, $sp, 0416 ; EXPAND: STR_ZXI $z1, $sp, 1417 ; EXPAND: STR_ZXI $z2, $sp, 2418 ; EXPAND: $z0 = LDR_ZXI $sp, 0419 ; EXPAND: $z1 = LDR_ZXI $sp, 1420 ; EXPAND: $z2 = LDR_ZXI $sp, 2421 422 %0:zpr3 = COPY $z0_z1_z2423 424 $z0_z1_z2_z3 = IMPLICIT_DEF425 $z4_z5_z6_z7 = IMPLICIT_DEF426 $z8_z9_z10_z11 = IMPLICIT_DEF427 $z12_z13_z14_z15 = IMPLICIT_DEF428 $z16_z17_z18_z19 = IMPLICIT_DEF429 $z20_z21_z22_z23 = IMPLICIT_DEF430 $z24_z25_z26_z27 = IMPLICIT_DEF431 $z28_z29_z30_z31 = IMPLICIT_DEF432 433 $z0_z1_z2 = COPY %0434 RET_ReallyLR435...436---437name: spills_fills_stack_id_zpr4438tracksRegLiveness: true439registers:440 - { id: 0, class: zpr4 }441stack:442liveins:443 - { reg: '$z1_z2_z3_z4', virtual-reg: '%0' }444body: |445 bb.0.entry:446 liveins: $z1_z2_z3_z4447 448 ; CHECK-LABEL: name: spills_fills_stack_id_zpr4449 ; CHECK: stack:450 ; CHECK: - { id: 0, name: '', type: spill-slot, offset: 0, size: 64, alignment: 16451 ; CHECK-NEXT: stack-id: scalable-vector452 453 ; EXPAND-LABEL: name: spills_fills_stack_id_zpr4454 ; EXPAND: STR_ZXI $z1, $sp, 0455 ; EXPAND: STR_ZXI $z2, $sp, 1456 ; EXPAND: STR_ZXI $z3, $sp, 2457 ; EXPAND: STR_ZXI $z4, $sp, 3458 ; EXPAND: $z1 = LDR_ZXI $sp, 0459 ; EXPAND: $z2 = LDR_ZXI $sp, 1460 ; EXPAND: $z3 = LDR_ZXI $sp, 2461 ; EXPAND: $z4 = LDR_ZXI $sp, 3462 463 %0:zpr4 = COPY $z1_z2_z3_z4464 465 $z0_z1_z2_z3 = IMPLICIT_DEF466 $z4_z5_z6_z7 = IMPLICIT_DEF467 $z8_z9_z10_z11 = IMPLICIT_DEF468 $z12_z13_z14_z15 = IMPLICIT_DEF469 $z16_z17_z18_z19 = IMPLICIT_DEF470 $z20_z21_z22_z23 = IMPLICIT_DEF471 $z24_z25_z26_z27 = IMPLICIT_DEF472 $z28_z29_z30_z31 = IMPLICIT_DEF473 474 $z1_z2_z3_z4 = COPY %0475 RET_ReallyLR476...477---478name: spills_fills_stack_id_zpr4strided479tracksRegLiveness: true480registers:481 - { id: 0, class: zpr4strided }482stack:483liveins:484 - { reg: '$z0_z4_z8_z12', virtual-reg: '%0' }485body: |486 bb.0.entry:487 liveins: $z0_z1_z2_z3488 489 $z0_z4_z8_z12 = COPY $z0_z1_z2_z3490 491 B %bb.1492 493 bb.1:494 liveins: $z0_z4_z8_z12495 496 ; CHECK-LABEL: name: spills_fills_stack_id_zpr4strided497 ; CHECK: stack:498 ; CHECK: - { id: 0, name: '', type: spill-slot, offset: 0, size: 64, alignment: 16499 ; CHECK-NEXT: stack-id: scalable-vector500 501 ; EXPAND-LABEL: name: spills_fills_stack_id_zpr4strided502 ; EXPAND: STR_ZXI $z0, $sp, 0503 ; EXPAND: STR_ZXI $z4, $sp, 1504 ; EXPAND: STR_ZXI $z8, $sp, 2505 ; EXPAND: STR_ZXI $z12, $sp, 3506 ; EXPAND: $z0 = LDR_ZXI $sp, 0507 ; EXPAND: $z4 = LDR_ZXI $sp, 1508 ; EXPAND: $z8 = LDR_ZXI $sp, 2509 ; EXPAND: $z12 = LDR_ZXI $sp, 3510 511 %0:zpr4strided = COPY $z0_z4_z8_z12512 513 $z0_z1_z2_z3 = IMPLICIT_DEF514 $z4_z5_z6_z7 = IMPLICIT_DEF515 $z8_z9_z10_z11 = IMPLICIT_DEF516 $z12_z13_z14_z15 = IMPLICIT_DEF517 $z16_z17_z18_z19 = IMPLICIT_DEF518 $z20_z21_z22_z23 = IMPLICIT_DEF519 $z24_z25_z26_z27 = IMPLICIT_DEF520 $z28_z29_z30_z31 = IMPLICIT_DEF521 522 $z0_z4_z8_z12 = COPY %0523 RET_ReallyLR524...525