| # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 5 |
| # RUN: llc -mtriple=aarch64-linux-gnu -aarch64-enable-zpr-predicate-spills -run-pass=greedy %s -o - | FileCheck %s |
| # RUN: llc -mtriple=aarch64-linux-gnu -aarch64-enable-zpr-predicate-spills -start-before=greedy -stop-after=aarch64-expand-pseudo -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=EXPAND |
| --- | |
| source_filename = "<stdin>" |
| target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128" |
| target triple = "aarch64--linux-gnu" |
| |
| define aarch64_sve_vector_pcs void @zpr_predicate_spill() #0 { entry: unreachable } |
| |
| define aarch64_sve_vector_pcs void @zpr_predicate_spill__save_restore_nzcv() #0 { entry: unreachable } |
| |
| define aarch64_sve_vector_pcs void @zpr_predicate_spill__save_restore_nzcv__scavenge_csr_gpr() #0 { entry: unreachable } |
| |
| define aarch64_sve_vector_pcs void @zpr_predicate_spill__spill_zpr() #0 { entry: unreachable } |
| |
| define aarch64_sve_vector_pcs void @zpr_predicate_spill_above_p7() #0 { entry: unreachable } |
| |
| define aarch64_sve_vector_pcs void @zpr_predicate_spill_p4_saved() #0 { entry: unreachable } |
| |
| attributes #0 = {nounwind "target-features"="+sme,+sve" "aarch64_pstate_sm_compatible"} |
| ... |
| --- |
| name: zpr_predicate_spill |
| tracksRegLiveness: true |
| stack: |
| liveins: |
| - { reg: '$p0' } |
| body: | |
| bb.0.entry: |
| liveins: $p0 |
| |
| ; CHECK-LABEL: name: zpr_predicate_spill |
| ; CHECK: stack: |
| ; CHECK: - { id: 0, name: '', type: spill-slot, offset: 0, size: 16, alignment: 16, |
| ; CHECK-NEXT: stack-id: scalable-vector, callee-saved-register: |
| ; CHECK: liveins: $p0 |
| ; CHECK-NEXT: {{ $}} |
| ; |
| ; CHECK-NEXT: SPILL_PPR_TO_ZPR_SLOT_PSEUDO $p0, %stack.0, 0 :: (store (s128) into %stack.0) |
| ; |
| ; CHECK-NEXT: $p0 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p1 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p2 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p3 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p4 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p5 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p6 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p7 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p8 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p9 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p10 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p11 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p12 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p13 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p14 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p15 = IMPLICIT_DEF |
| ; |
| ; CHECK-NEXT: $p0 = FILL_PPR_FROM_ZPR_SLOT_PSEUDO %stack.0, 0 :: (load (s128) from %stack.0) |
| ; |
| ; CHECK-NEXT: RET_ReallyLR implicit $p0 |
| |
| ; EXPAND-LABEL: name: zpr_predicate_spill |
| ; EXPAND: liveins: $p0, $fp, $p15, $p14, $p13, $p12, $p11, $p10, $p9, $p8, $p7, $p6, $p5, $p4 |
| ; EXPAND-NEXT: {{ $}} |
| ; |
| ; EXPAND-NEXT: $sp = frame-setup SUBXri $sp, 1040, 0 |
| ; EXPAND-NEXT: frame-setup STRXui killed $fp, $sp, 128 :: (store (s64) into %stack.14) |
| ; EXPAND-NEXT: $sp = frame-setup ADDVL_XXI $sp, -12, implicit $vg |
| ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p15, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 0 :: (store (s128) into %stack.13) |
| ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p14, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 1 :: (store (s128) into %stack.12) |
| ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p13, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 2 :: (store (s128) into %stack.11) |
| ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p12, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 3 :: (store (s128) into %stack.10) |
| ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p11, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 4 :: (store (s128) into %stack.9) |
| ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p10, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 5 :: (store (s128) into %stack.8) |
| ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p9, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 6 :: (store (s128) into %stack.7) |
| ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p8, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 7 :: (store (s128) into %stack.6) |
| ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p7, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 8 :: (store (s128) into %stack.5) |
| ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p6, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 9 :: (store (s128) into %stack.4) |
| ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p5, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 10 :: (store (s128) into %stack.3) |
| ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p4, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 11 :: (store (s128) into %stack.2) |
| ; EXPAND-NEXT: $sp = frame-setup SUBXri $sp, 1024, 0 |
| ; EXPAND-NEXT: $sp = frame-setup ADDVL_XXI $sp, -1, implicit $vg |
| ; |
| ; EXPAND-NEXT: $z0 = CPY_ZPzI_B $p0, 1, 0 |
| ; EXPAND-NEXT: $x8 = ADDXri $sp, 1024, 0 |
| ; EXPAND-NEXT: STR_ZXI $z0, $x8, 0 :: (store (s128) into %stack.0) |
| ; |
| ; EXPAND-NEXT: $p0 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p1 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p2 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p3 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p4 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p5 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p6 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p7 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p8 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p9 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p10 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p11 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p12 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p13 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p14 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p15 = IMPLICIT_DEF |
| ; |
| ; EXPAND-NEXT: $z0 = LDR_ZXI killed $x8, 0 :: (load (s128) from %stack.0) |
| ; EXPAND-NEXT: $p1 = frame-destroy PTRUE_B 31, implicit $vg |
| ; EXPAND-NEXT: $p0 = CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; |
| ; EXPAND-NEXT: $sp = frame-destroy ADDXri $sp, 1024, 0 |
| ; EXPAND-NEXT: $sp = frame-destroy ADDVL_XXI $sp, 1, implicit $vg |
| ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 0 :: (load (s128) from %stack.13) |
| ; EXPAND-NEXT: $p15 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 1 :: (load (s128) from %stack.12) |
| ; EXPAND-NEXT: $p14 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 2 :: (load (s128) from %stack.11) |
| ; EXPAND-NEXT: $p13 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 3 :: (load (s128) from %stack.10) |
| ; EXPAND-NEXT: $p12 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 4 :: (load (s128) from %stack.9) |
| ; EXPAND-NEXT: $p11 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 5 :: (load (s128) from %stack.8) |
| ; EXPAND-NEXT: $p10 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 6 :: (load (s128) from %stack.7) |
| ; EXPAND-NEXT: $p9 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 7 :: (load (s128) from %stack.6) |
| ; EXPAND-NEXT: $p8 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 8 :: (load (s128) from %stack.5) |
| ; EXPAND-NEXT: $p7 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 9 :: (load (s128) from %stack.4) |
| ; EXPAND-NEXT: $p6 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 10 :: (load (s128) from %stack.3) |
| ; EXPAND-NEXT: $p5 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 11 :: (load (s128) from %stack.2) |
| ; EXPAND-NEXT: $p4 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $sp = frame-destroy ADDVL_XXI $sp, 12, implicit $vg |
| ; EXPAND-NEXT: $fp = frame-destroy LDRXui $sp, 128 :: (load (s64) from %stack.14) |
| ; EXPAND-NEXT: $sp = frame-destroy ADDXri $sp, 1040, 0 |
| ; EXPAND-NEXT: RET undef $lr, implicit $p0 |
| %1:ppr = COPY $p0 |
| |
| $p0 = IMPLICIT_DEF |
| $p1 = IMPLICIT_DEF |
| $p2 = IMPLICIT_DEF |
| $p3 = IMPLICIT_DEF |
| $p4 = IMPLICIT_DEF |
| $p5 = IMPLICIT_DEF |
| $p6 = IMPLICIT_DEF |
| $p7 = IMPLICIT_DEF |
| $p8 = IMPLICIT_DEF |
| $p9 = IMPLICIT_DEF |
| $p10 = IMPLICIT_DEF |
| $p11 = IMPLICIT_DEF |
| $p12 = IMPLICIT_DEF |
| $p13 = IMPLICIT_DEF |
| $p14 = IMPLICIT_DEF |
| $p15 = IMPLICIT_DEF |
| |
| $p0 = COPY %1 |
| |
| RET_ReallyLR implicit $p0 |
| ... |
| --- |
| name: zpr_predicate_spill__save_restore_nzcv |
| tracksRegLiveness: true |
| stack: |
| liveins: |
| - { reg: '$p0' } |
| body: | |
| bb.0.entry: |
| liveins: $p0 |
| |
| ; CHECK-LABEL: name: zpr_predicate_spill__save_restore_nzcv |
| ; CHECK: stack: |
| ; CHECK: - { id: 0, name: '', type: spill-slot, offset: 0, size: 16, alignment: 16, |
| ; CHECK-NEXT: stack-id: scalable-vector, callee-saved-register: |
| ; CHECK: liveins: $p0 |
| ; CHECK-NEXT: {{ $}} |
| ; |
| ; CHECK-NEXT: $nzcv = IMPLICIT_DEF |
| ; |
| ; CHECK-NEXT: SPILL_PPR_TO_ZPR_SLOT_PSEUDO $p0, %stack.0, 0 :: (store (s128) into %stack.0) |
| ; |
| ; CHECK-NEXT: $p0 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p1 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p2 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p3 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p4 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p5 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p6 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p7 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p8 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p9 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p10 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p11 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p12 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p13 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p14 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p15 = IMPLICIT_DEF |
| ; |
| ; CHECK-NEXT: $p0 = FILL_PPR_FROM_ZPR_SLOT_PSEUDO %stack.0, 0 :: (load (s128) from %stack.0) |
| ; |
| ; CHECK-NEXT: FAKE_USE implicit $nzcv |
| ; |
| ; CHECK-NEXT: RET_ReallyLR implicit $p0 |
| |
| ; EXPAND-LABEL: name: zpr_predicate_spill__save_restore_nzcv |
| ; EXPAND: liveins: $p0, $fp, $p15, $p14, $p13, $p12, $p11, $p10, $p9, $p8, $p7, $p6, $p5, $p4 |
| ; EXPAND-NEXT: {{ $}} |
| ; |
| ; EXPAND-NEXT: $sp = frame-setup SUBXri $sp, 1040, 0 |
| ; EXPAND-NEXT: frame-setup STRXui killed $fp, $sp, 128 :: (store (s64) into %stack.14) |
| ; EXPAND-NEXT: $sp = frame-setup ADDVL_XXI $sp, -12, implicit $vg |
| ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p15, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 0 :: (store (s128) into %stack.13) |
| ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p14, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 1 :: (store (s128) into %stack.12) |
| ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p13, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 2 :: (store (s128) into %stack.11) |
| ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p12, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 3 :: (store (s128) into %stack.10) |
| ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p11, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 4 :: (store (s128) into %stack.9) |
| ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p10, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 5 :: (store (s128) into %stack.8) |
| ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p9, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 6 :: (store (s128) into %stack.7) |
| ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p8, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 7 :: (store (s128) into %stack.6) |
| ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p7, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 8 :: (store (s128) into %stack.5) |
| ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p6, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 9 :: (store (s128) into %stack.4) |
| ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p5, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 10 :: (store (s128) into %stack.3) |
| ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p4, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 11 :: (store (s128) into %stack.2) |
| ; EXPAND-NEXT: $sp = frame-setup SUBXri $sp, 1024, 0 |
| ; EXPAND-NEXT: $sp = frame-setup ADDVL_XXI $sp, -1, implicit $vg |
| ; |
| ; EXPAND-NEXT: $nzcv = IMPLICIT_DEF |
| ; |
| ; EXPAND-NEXT: $z0 = CPY_ZPzI_B $p0, 1, 0 |
| ; EXPAND-NEXT: $x8 = ADDXri $sp, 1024, 0 |
| ; EXPAND-NEXT: STR_ZXI $z0, $x8, 0 :: (store (s128) into %stack.0) |
| ; |
| ; EXPAND-NEXT: $p0 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p1 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p2 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p3 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p4 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p5 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p6 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p7 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p8 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p9 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p10 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p11 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p12 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p13 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p14 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p15 = IMPLICIT_DEF |
| ; |
| ; EXPAND-NEXT: $z0 = LDR_ZXI killed $x8, 0 :: (load (s128) from %stack.0) |
| ; EXPAND-NEXT: $fp = MRS 55824, implicit-def $nzcv, implicit $nzcv |
| ; EXPAND-NEXT: $p0 = PTRUE_B 31, implicit $vg |
| ; EXPAND-NEXT: $p0 = CMPNE_PPzZI_B $p0, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: MSR 55824, $fp, implicit-def $nzcv |
| ; |
| ; EXPAND-NEXT: FAKE_USE implicit $nzcv |
| ; |
| ; EXPAND-NEXT: $sp = frame-destroy ADDXri $sp, 1024, 0 |
| ; EXPAND-NEXT: $sp = frame-destroy ADDVL_XXI $sp, 1, implicit $vg |
| ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 0 :: (load (s128) from %stack.13) |
| ; EXPAND-NEXT: $p1 = frame-destroy PTRUE_B 31, implicit $vg |
| ; EXPAND-NEXT: $p15 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 1 :: (load (s128) from %stack.12) |
| ; EXPAND-NEXT: $p14 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 2 :: (load (s128) from %stack.11) |
| ; EXPAND-NEXT: $p13 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 3 :: (load (s128) from %stack.10) |
| ; EXPAND-NEXT: $p12 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 4 :: (load (s128) from %stack.9) |
| ; EXPAND-NEXT: $p11 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 5 :: (load (s128) from %stack.8) |
| ; EXPAND-NEXT: $p10 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 6 :: (load (s128) from %stack.7) |
| ; EXPAND-NEXT: $p9 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 7 :: (load (s128) from %stack.6) |
| ; EXPAND-NEXT: $p8 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 8 :: (load (s128) from %stack.5) |
| ; EXPAND-NEXT: $p7 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 9 :: (load (s128) from %stack.4) |
| ; EXPAND-NEXT: $p6 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 10 :: (load (s128) from %stack.3) |
| ; EXPAND-NEXT: $p5 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 11 :: (load (s128) from %stack.2) |
| ; EXPAND-NEXT: $p4 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $sp = frame-destroy ADDVL_XXI $sp, 12, implicit $vg |
| ; EXPAND-NEXT: $fp = frame-destroy LDRXui $sp, 128 :: (load (s64) from %stack.14) |
| ; EXPAND-NEXT: $sp = frame-destroy ADDXri $sp, 1040, 0 |
| ; EXPAND-NEXT: RET undef $lr, implicit $p0 |
| $nzcv = IMPLICIT_DEF |
| |
| %1:ppr = COPY $p0 |
| |
| $p0 = IMPLICIT_DEF |
| $p1 = IMPLICIT_DEF |
| $p2 = IMPLICIT_DEF |
| $p3 = IMPLICIT_DEF |
| $p4 = IMPLICIT_DEF |
| $p5 = IMPLICIT_DEF |
| $p6 = IMPLICIT_DEF |
| $p7 = IMPLICIT_DEF |
| $p8 = IMPLICIT_DEF |
| $p9 = IMPLICIT_DEF |
| $p10 = IMPLICIT_DEF |
| $p11 = IMPLICIT_DEF |
| $p12 = IMPLICIT_DEF |
| $p13 = IMPLICIT_DEF |
| $p14 = IMPLICIT_DEF |
| $p15 = IMPLICIT_DEF |
| |
| $p0 = COPY %1 |
| |
| FAKE_USE implicit $nzcv |
| |
| RET_ReallyLR implicit $p0 |
| ... |
| --- |
| name: zpr_predicate_spill__save_restore_nzcv__scavenge_csr_gpr |
| tracksRegLiveness: true |
| stack: |
| liveins: |
| - { reg: '$p0' } |
| - { reg: '$x0' } |
| - { reg: '$x1' } |
| - { reg: '$x2' } |
| - { reg: '$x3' } |
| - { reg: '$x4' } |
| - { reg: '$x5' } |
| - { reg: '$x6' } |
| - { reg: '$x7' } |
| body: | |
| bb.0.entry: |
| liveins: $p0, $x0, $x1, $x2, $x3, $x4, $x5, $x6, $x7 |
| |
| ; CHECK-LABEL: name: zpr_predicate_spill__save_restore_nzcv__scavenge_csr_gpr |
| ; CHECK: stack: |
| ; CHECK: - { id: 0, name: '', type: spill-slot, offset: 0, size: 16, alignment: 16, |
| ; CHECK-NEXT: stack-id: scalable-vector, callee-saved-register: |
| ; CHECK: liveins: $p0, $x0, $x1, $x2, $x3, $x4, $x5, $x6, $x7 |
| ; CHECK-NEXT: {{ $}} |
| ; |
| ; CHECK-NEXT: $nzcv = IMPLICIT_DEF |
| ; |
| ; CHECK-NEXT: $x8 = IMPLICIT_DEF |
| ; CHECK-NEXT: $x9 = IMPLICIT_DEF |
| ; CHECK-NEXT: $x10 = IMPLICIT_DEF |
| ; CHECK-NEXT: $x11 = IMPLICIT_DEF |
| ; CHECK-NEXT: $x12 = IMPLICIT_DEF |
| ; CHECK-NEXT: $x13 = IMPLICIT_DEF |
| ; CHECK-NEXT: $x14 = IMPLICIT_DEF |
| ; CHECK-NEXT: $x15 = IMPLICIT_DEF |
| ; CHECK-NEXT: $x16 = IMPLICIT_DEF |
| ; CHECK-NEXT: $x17 = IMPLICIT_DEF |
| ; CHECK-NEXT: $x18 = IMPLICIT_DEF |
| ; |
| ; CHECK-NEXT: SPILL_PPR_TO_ZPR_SLOT_PSEUDO $p0, %stack.0, 0 :: (store (s128) into %stack.0) |
| ; |
| ; CHECK-NEXT: $p0 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p1 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p2 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p3 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p4 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p5 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p6 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p7 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p8 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p9 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p10 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p11 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p12 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p13 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p14 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p15 = IMPLICIT_DEF |
| ; |
| ; CHECK-NEXT: $p0 = FILL_PPR_FROM_ZPR_SLOT_PSEUDO %stack.0, 0 :: (load (s128) from %stack.0) |
| ; |
| ; CHECK-NEXT: FAKE_USE implicit $nzcv, implicit $x8, implicit $x9, implicit $x10, implicit $x11, implicit $x12, implicit $x13, implicit $x14, implicit $x15, implicit $x16, implicit $x17, implicit $x18 |
| ; |
| ; CHECK-NEXT: RET_ReallyLR implicit $p0, implicit $x0, implicit $x1, implicit $x2, implicit $x3, implicit $x4, implicit $x5, implicit $x6, implicit $x7, implicit $x8, implicit $x9, implicit $x10, implicit $x11, implicit $x12, implicit $x13, implicit $x14, implicit $x15, implicit $x16, implicit $x17, implicit $x18 |
| |
| ; EXPAND-LABEL: name: zpr_predicate_spill__save_restore_nzcv__scavenge_csr_gpr |
| ; EXPAND: liveins: $p0, $x0, $x1, $x2, $x3, $x4, $x5, $x6, $x7, $fp, $p15, $p14, $p13, $p12, $p11, $p10, $p9, $p8, $p7, $p6, $p5, $p4 |
| ; EXPAND-NEXT: {{ $}} |
| ; |
| ; EXPAND-NEXT: $sp = frame-setup SUBXri $sp, 1040, 0 |
| ; EXPAND-NEXT: frame-setup STRXui killed $fp, $sp, 128 :: (store (s64) into %stack.14) |
| ; EXPAND-NEXT: $sp = frame-setup ADDVL_XXI $sp, -12, implicit $vg |
| ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p15, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 0 :: (store (s128) into %stack.13) |
| ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p14, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 1 :: (store (s128) into %stack.12) |
| ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p13, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 2 :: (store (s128) into %stack.11) |
| ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p12, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 3 :: (store (s128) into %stack.10) |
| ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p11, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 4 :: (store (s128) into %stack.9) |
| ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p10, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 5 :: (store (s128) into %stack.8) |
| ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p9, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 6 :: (store (s128) into %stack.7) |
| ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p8, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 7 :: (store (s128) into %stack.6) |
| ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p7, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 8 :: (store (s128) into %stack.5) |
| ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p6, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 9 :: (store (s128) into %stack.4) |
| ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p5, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 10 :: (store (s128) into %stack.3) |
| ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p4, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 11 :: (store (s128) into %stack.2) |
| ; EXPAND-NEXT: $sp = frame-setup SUBXri $sp, 1024, 0 |
| ; EXPAND-NEXT: $sp = frame-setup ADDVL_XXI $sp, -1, implicit $vg |
| ; |
| ; EXPAND-NEXT: $nzcv = IMPLICIT_DEF |
| ; |
| ; EXPAND-NEXT: $x8 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $x9 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $x10 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $x11 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $x12 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $x13 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $x14 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $x15 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $x16 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $x17 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $x18 = IMPLICIT_DEF |
| ; |
| ; EXPAND-NEXT: $z0 = CPY_ZPzI_B $p0, 1, 0 |
| ; EXPAND-NEXT: $fp = ADDXri $sp, 1024, 0 |
| ; EXPAND-NEXT: STR_ZXI $z0, $fp, 0 :: (store (s128) into %stack.0) |
| ; |
| ; EXPAND-NEXT: $p0 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p1 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p2 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p3 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p4 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p5 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p6 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p7 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p8 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p9 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p10 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p11 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p12 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p13 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p14 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p15 = IMPLICIT_DEF |
| ; |
| ; EXPAND-NEXT: $z0 = LDR_ZXI killed $fp, 0 :: (load (s128) from %stack.0) |
| ; EXPAND-NEXT: $fp = MRS 55824, implicit-def $nzcv, implicit $nzcv |
| ; EXPAND-NEXT: $p0 = PTRUE_B 31, implicit $vg |
| ; EXPAND-NEXT: $p0 = CMPNE_PPzZI_B $p0, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: MSR 55824, $fp, implicit-def $nzcv |
| ; |
| ; EXPAND-NEXT: FAKE_USE implicit $nzcv, implicit $x8, implicit $x9, implicit $x10, implicit $x11, implicit $x12, implicit $x13, implicit $x14, implicit $x15, implicit $x16, implicit $x17, implicit $x18 |
| ; |
| ; EXPAND-NEXT: $sp = frame-destroy ADDXri $sp, 1024, 0 |
| ; EXPAND-NEXT: $sp = frame-destroy ADDVL_XXI $sp, 1, implicit $vg |
| ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 0 :: (load (s128) from %stack.13) |
| ; EXPAND-NEXT: $p1 = frame-destroy PTRUE_B 31, implicit $vg |
| ; EXPAND-NEXT: $p15 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 1 :: (load (s128) from %stack.12) |
| ; EXPAND-NEXT: $p14 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 2 :: (load (s128) from %stack.11) |
| ; EXPAND-NEXT: $p13 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 3 :: (load (s128) from %stack.10) |
| ; EXPAND-NEXT: $p12 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 4 :: (load (s128) from %stack.9) |
| ; EXPAND-NEXT: $p11 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 5 :: (load (s128) from %stack.8) |
| ; EXPAND-NEXT: $p10 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 6 :: (load (s128) from %stack.7) |
| ; EXPAND-NEXT: $p9 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 7 :: (load (s128) from %stack.6) |
| ; EXPAND-NEXT: $p8 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 8 :: (load (s128) from %stack.5) |
| ; EXPAND-NEXT: $p7 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 9 :: (load (s128) from %stack.4) |
| ; EXPAND-NEXT: $p6 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 10 :: (load (s128) from %stack.3) |
| ; EXPAND-NEXT: $p5 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 11 :: (load (s128) from %stack.2) |
| ; EXPAND-NEXT: $p4 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $sp = frame-destroy ADDVL_XXI $sp, 12, implicit $vg |
| ; EXPAND-NEXT: $fp = frame-destroy LDRXui $sp, 128 :: (load (s64) from %stack.14) |
| ; EXPAND-NEXT: $sp = frame-destroy ADDXri $sp, 1040, 0 |
| ; EXPAND-NEXT: RET undef $lr, implicit $p0, implicit $x0, implicit $x1, implicit $x2, implicit $x3, implicit $x4, implicit $x5, implicit $x6, implicit $x7, implicit $x8, implicit $x9, implicit $x10, implicit $x11, implicit $x12, implicit $x13, implicit $x14, implicit $x15, implicit $x16, implicit $x17, implicit $x18 |
| $nzcv = IMPLICIT_DEF |
| $x8 = IMPLICIT_DEF |
| $x9 = IMPLICIT_DEF |
| $x10 = IMPLICIT_DEF |
| $x11 = IMPLICIT_DEF |
| $x12 = IMPLICIT_DEF |
| $x13 = IMPLICIT_DEF |
| $x14 = IMPLICIT_DEF |
| $x15 = IMPLICIT_DEF |
| $x16 = IMPLICIT_DEF |
| $x17 = IMPLICIT_DEF |
| $x18 = IMPLICIT_DEF |
| |
| %1:ppr = COPY $p0 |
| |
| $p0 = IMPLICIT_DEF |
| $p1 = IMPLICIT_DEF |
| $p2 = IMPLICIT_DEF |
| $p3 = IMPLICIT_DEF |
| $p4 = IMPLICIT_DEF |
| $p5 = IMPLICIT_DEF |
| $p6 = IMPLICIT_DEF |
| $p7 = IMPLICIT_DEF |
| $p8 = IMPLICIT_DEF |
| $p9 = IMPLICIT_DEF |
| $p10 = IMPLICIT_DEF |
| $p11 = IMPLICIT_DEF |
| $p12 = IMPLICIT_DEF |
| $p13 = IMPLICIT_DEF |
| $p14 = IMPLICIT_DEF |
| $p15 = IMPLICIT_DEF |
| |
| $p0 = COPY %1 |
| |
| FAKE_USE implicit $nzcv, implicit $x8, implicit $x9, implicit $x10, implicit $x11, implicit $x12, implicit $x13, implicit $x14, implicit $x15, implicit $x16, implicit $x17, implicit $x18 |
| |
| RET_ReallyLR implicit $p0, implicit $x0, implicit $x1, implicit $x2, implicit $x3, implicit $x4, implicit $x5, implicit $x6, implicit $x7, implicit $x8, implicit $x9, implicit $x10, implicit $x11, implicit $x12, implicit $x13, implicit $x14, implicit $x15, implicit $x16, implicit $x17, implicit $x18 |
| ... |
| --- |
| name: zpr_predicate_spill__spill_zpr |
| tracksRegLiveness: true |
| stack: |
| liveins: |
| - { reg: '$p0' } |
| - { reg: '$z0' } |
| - { reg: '$z1' } |
| - { reg: '$z2' } |
| - { reg: '$z3' } |
| - { reg: '$z4' } |
| - { reg: '$z5' } |
| - { reg: '$z6' } |
| - { reg: '$z7' } |
| body: | |
| bb.0.entry: |
| liveins: $p0, $z0, $z1, $z2, $z3, $z4, $z5, $z6, $z7 |
| |
| ; CHECK-LABEL: name: zpr_predicate_spill__spill_zpr |
| ; CHECK: stack: |
| ; CHECK: - { id: 0, name: '', type: spill-slot, offset: 0, size: 16, alignment: 16, |
| ; CHECK-NEXT: stack-id: scalable-vector, callee-saved-register: |
| ; CHECK: liveins: $p0, $z0, $z1, $z2, $z3, $z4, $z5, $z6, $z7 |
| ; CHECK-NEXT: {{ $}} |
| ; |
| ; CHECK-NEXT: $z16 = IMPLICIT_DEF |
| ; CHECK-NEXT: $z17 = IMPLICIT_DEF |
| ; CHECK-NEXT: $z18 = IMPLICIT_DEF |
| ; CHECK-NEXT: $z19 = IMPLICIT_DEF |
| ; CHECK-NEXT: $z20 = IMPLICIT_DEF |
| ; CHECK-NEXT: $z21 = IMPLICIT_DEF |
| ; CHECK-NEXT: $z22 = IMPLICIT_DEF |
| ; CHECK-NEXT: $z23 = IMPLICIT_DEF |
| ; CHECK-NEXT: $z24 = IMPLICIT_DEF |
| ; CHECK-NEXT: $z25 = IMPLICIT_DEF |
| ; CHECK-NEXT: $z26 = IMPLICIT_DEF |
| ; CHECK-NEXT: $z27 = IMPLICIT_DEF |
| ; CHECK-NEXT: $z28 = IMPLICIT_DEF |
| ; CHECK-NEXT: $z29 = IMPLICIT_DEF |
| ; CHECK-NEXT: $z30 = IMPLICIT_DEF |
| ; CHECK-NEXT: $z31 = IMPLICIT_DEF |
| ; |
| ; CHECK-NEXT: SPILL_PPR_TO_ZPR_SLOT_PSEUDO $p0, %stack.0, 0 :: (store (s128) into %stack.0) |
| ; |
| ; CHECK-NEXT: $p0 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p1 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p2 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p3 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p4 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p5 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p6 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p7 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p8 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p9 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p10 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p11 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p12 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p13 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p14 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p15 = IMPLICIT_DEF |
| ; |
| ; CHECK-NEXT: $p0 = FILL_PPR_FROM_ZPR_SLOT_PSEUDO %stack.0, 0 :: (load (s128) from %stack.0) |
| ; |
| ; CHECK-NEXT: FAKE_USE implicit $z16, implicit $z17, implicit $z18, implicit $z19, implicit $z20, implicit $z21, implicit $z22, implicit $z23, implicit $z24, implicit $z25, implicit $z26, implicit $z27, implicit $z28, implicit $z29, implicit $z30, implicit $z31 |
| ; |
| ; CHECK-NEXT: RET_ReallyLR implicit $p0, implicit $z0, implicit $z1, implicit $z2, implicit $z3, implicit $z4, implicit $z5, implicit $z6, implicit $z7 |
| |
| ; EXPAND-LABEL: name: zpr_predicate_spill__spill_zpr |
| ; EXPAND: liveins: $p0, $z0, $z1, $z2, $z3, $z4, $z5, $z6, $z7, $fp, $p15, $p14, $p13, $p12, $p11, $p10, $p9, $p8, $p7, $p6, $p5, $p4, $z23, $z22, $z21, $z20, $z19, $z18, $z17, $z16 |
| ; EXPAND-NEXT: {{ $}} |
| ; |
| ; EXPAND-NEXT: $sp = frame-setup SUBXri $sp, 1040, 0 |
| ; EXPAND-NEXT: frame-setup STRXui killed $fp, $sp, 128 :: (store (s64) into %stack.22) |
| ; EXPAND-NEXT: $sp = frame-setup ADDVL_XXI $sp, -20, implicit $vg |
| ; EXPAND-NEXT: $z24 = frame-setup CPY_ZPzI_B killed $p15, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z24, $sp, 0 :: (store (s128) into %stack.21) |
| ; EXPAND-NEXT: $z24 = frame-setup CPY_ZPzI_B killed $p14, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z24, $sp, 1 :: (store (s128) into %stack.20) |
| ; EXPAND-NEXT: $z24 = frame-setup CPY_ZPzI_B killed $p13, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z24, $sp, 2 :: (store (s128) into %stack.19) |
| ; EXPAND-NEXT: $z24 = frame-setup CPY_ZPzI_B killed $p12, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z24, $sp, 3 :: (store (s128) into %stack.18) |
| ; EXPAND-NEXT: $z24 = frame-setup CPY_ZPzI_B killed $p11, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z24, $sp, 4 :: (store (s128) into %stack.17) |
| ; EXPAND-NEXT: $z24 = frame-setup CPY_ZPzI_B killed $p10, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z24, $sp, 5 :: (store (s128) into %stack.16) |
| ; EXPAND-NEXT: $z24 = frame-setup CPY_ZPzI_B killed $p9, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z24, $sp, 6 :: (store (s128) into %stack.15) |
| ; EXPAND-NEXT: $z24 = frame-setup CPY_ZPzI_B killed $p8, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z24, $sp, 7 :: (store (s128) into %stack.14) |
| ; EXPAND-NEXT: $z24 = frame-setup CPY_ZPzI_B killed $p7, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z24, $sp, 8 :: (store (s128) into %stack.13) |
| ; EXPAND-NEXT: $z24 = frame-setup CPY_ZPzI_B killed $p6, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z24, $sp, 9 :: (store (s128) into %stack.12) |
| ; EXPAND-NEXT: $z24 = frame-setup CPY_ZPzI_B killed $p5, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z24, $sp, 10 :: (store (s128) into %stack.11) |
| ; EXPAND-NEXT: $z24 = frame-setup CPY_ZPzI_B killed $p4, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z24, $sp, 11 :: (store (s128) into %stack.10) |
| ; EXPAND-NEXT: frame-setup STR_ZXI killed $z23, $sp, 12 :: (store (s128) into %stack.9) |
| ; EXPAND-NEXT: frame-setup STR_ZXI killed $z22, $sp, 13 :: (store (s128) into %stack.8) |
| ; EXPAND-NEXT: frame-setup STR_ZXI killed $z21, $sp, 14 :: (store (s128) into %stack.7) |
| ; EXPAND-NEXT: frame-setup STR_ZXI killed $z20, $sp, 15 :: (store (s128) into %stack.6) |
| ; EXPAND-NEXT: frame-setup STR_ZXI killed $z19, $sp, 16 :: (store (s128) into %stack.5) |
| ; EXPAND-NEXT: frame-setup STR_ZXI killed $z18, $sp, 17 :: (store (s128) into %stack.4) |
| ; EXPAND-NEXT: frame-setup STR_ZXI killed $z17, $sp, 18 :: (store (s128) into %stack.3) |
| ; EXPAND-NEXT: frame-setup STR_ZXI killed $z16, $sp, 19 :: (store (s128) into %stack.2) |
| ; EXPAND-NEXT: $sp = frame-setup SUBXri $sp, 1024, 0 |
| ; EXPAND-NEXT: $sp = frame-setup ADDVL_XXI $sp, -2, implicit $vg |
| ; |
| ; EXPAND-NEXT: $z16 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $z17 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $z18 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $z19 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $z20 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $z21 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $z22 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $z23 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $z24 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $z25 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $z26 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $z27 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $z28 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $z29 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $z30 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $z31 = IMPLICIT_DEF |
| ; |
| ; EXPAND-NEXT: $x8 = ADDXri $sp, 1024, 0 |
| ; EXPAND-NEXT: STR_ZXI $z0, $x8, 0 :: (store (s128) into %stack.24) |
| ; EXPAND-NEXT: $z0 = CPY_ZPzI_B $p0, 1, 0 |
| ; EXPAND-NEXT: STR_ZXI $z0, $x8, 1 :: (store (s128) into %stack.0) |
| ; EXPAND-NEXT: $z0 = LDR_ZXI $x8, 0 :: (load (s128) from %stack.24) |
| ; |
| ; EXPAND-NEXT: $p0 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p1 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p2 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p3 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p4 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p5 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p6 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p7 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p8 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p9 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p10 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p11 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p12 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p13 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p14 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p15 = IMPLICIT_DEF |
| ; |
| ; EXPAND-NEXT: STR_ZXI $z0, $x8, 0 :: (store (s128) into %stack.24) |
| ; EXPAND-NEXT: $z0 = LDR_ZXI $x8, 1 :: (load (s128) from %stack.0) |
| ; EXPAND-NEXT: $p0 = PTRUE_B 31, implicit $vg |
| ; EXPAND-NEXT: $p0 = CMPNE_PPzZI_B $p0, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z0 = LDR_ZXI killed $x8, 0 :: (load (s128) from %stack.24) |
| ; |
| ; EXPAND-NEXT: FAKE_USE implicit $z16, implicit $z17, implicit $z18, implicit $z19, implicit $z20, implicit $z21, implicit $z22, implicit $z23, implicit $z24, implicit $z25, implicit $z26, implicit $z27, implicit $z28, implicit $z29, implicit $z30, implicit $z31 |
| ; |
| ; EXPAND-NEXT: $sp = frame-destroy ADDXri $sp, 1024, 0 |
| ; EXPAND-NEXT: $sp = frame-destroy ADDVL_XXI $sp, 2, implicit $vg |
| ; EXPAND-NEXT: $z23 = frame-destroy LDR_ZXI $sp, 12 :: (load (s128) from %stack.9) |
| ; EXPAND-NEXT: $z22 = frame-destroy LDR_ZXI $sp, 13 :: (load (s128) from %stack.8) |
| ; EXPAND-NEXT: $z21 = frame-destroy LDR_ZXI $sp, 14 :: (load (s128) from %stack.7) |
| ; EXPAND-NEXT: $z20 = frame-destroy LDR_ZXI $sp, 15 :: (load (s128) from %stack.6) |
| ; EXPAND-NEXT: $z19 = frame-destroy LDR_ZXI $sp, 16 :: (load (s128) from %stack.5) |
| ; EXPAND-NEXT: $z18 = frame-destroy LDR_ZXI $sp, 17 :: (load (s128) from %stack.4) |
| ; EXPAND-NEXT: $z17 = frame-destroy LDR_ZXI $sp, 18 :: (load (s128) from %stack.3) |
| ; EXPAND-NEXT: $z16 = frame-destroy LDR_ZXI $sp, 19 :: (load (s128) from %stack.2) |
| ; EXPAND-NEXT: $z24 = frame-destroy LDR_ZXI $sp, 0 :: (load (s128) from %stack.21) |
| ; EXPAND-NEXT: $p1 = frame-destroy PTRUE_B 31, implicit $vg |
| ; EXPAND-NEXT: $p15 = frame-destroy CMPNE_PPzZI_B $p1, $z24, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z24 = frame-destroy LDR_ZXI $sp, 1 :: (load (s128) from %stack.20) |
| ; EXPAND-NEXT: $p14 = frame-destroy CMPNE_PPzZI_B $p1, $z24, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z24 = frame-destroy LDR_ZXI $sp, 2 :: (load (s128) from %stack.19) |
| ; EXPAND-NEXT: $p13 = frame-destroy CMPNE_PPzZI_B $p1, $z24, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z24 = frame-destroy LDR_ZXI $sp, 3 :: (load (s128) from %stack.18) |
| ; EXPAND-NEXT: $p12 = frame-destroy CMPNE_PPzZI_B $p1, $z24, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z24 = frame-destroy LDR_ZXI $sp, 4 :: (load (s128) from %stack.17) |
| ; EXPAND-NEXT: $p11 = frame-destroy CMPNE_PPzZI_B $p1, $z24, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z24 = frame-destroy LDR_ZXI $sp, 5 :: (load (s128) from %stack.16) |
| ; EXPAND-NEXT: $p10 = frame-destroy CMPNE_PPzZI_B $p1, $z24, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z24 = frame-destroy LDR_ZXI $sp, 6 :: (load (s128) from %stack.15) |
| ; EXPAND-NEXT: $p9 = frame-destroy CMPNE_PPzZI_B $p1, $z24, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z24 = frame-destroy LDR_ZXI $sp, 7 :: (load (s128) from %stack.14) |
| ; EXPAND-NEXT: $p8 = frame-destroy CMPNE_PPzZI_B $p1, $z24, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z24 = frame-destroy LDR_ZXI $sp, 8 :: (load (s128) from %stack.13) |
| ; EXPAND-NEXT: $p7 = frame-destroy CMPNE_PPzZI_B $p1, $z24, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z24 = frame-destroy LDR_ZXI $sp, 9 :: (load (s128) from %stack.12) |
| ; EXPAND-NEXT: $p6 = frame-destroy CMPNE_PPzZI_B $p1, $z24, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z24 = frame-destroy LDR_ZXI $sp, 10 :: (load (s128) from %stack.11) |
| ; EXPAND-NEXT: $p5 = frame-destroy CMPNE_PPzZI_B $p1, $z24, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z24 = frame-destroy LDR_ZXI $sp, 11 :: (load (s128) from %stack.10) |
| ; EXPAND-NEXT: $p4 = frame-destroy CMPNE_PPzZI_B $p1, $z24, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $sp = frame-destroy ADDVL_XXI $sp, 20, implicit $vg |
| ; EXPAND-NEXT: $fp = frame-destroy LDRXui $sp, 128 :: (load (s64) from %stack.22) |
| ; EXPAND-NEXT: $sp = frame-destroy ADDXri $sp, 1040, 0 |
| ; EXPAND-NEXT: RET undef $lr, implicit $p0, implicit $z0, implicit $z1, implicit $z2, implicit $z3, implicit $z4, implicit $z5, implicit $z6, implicit $z7 |
| $z16 = IMPLICIT_DEF |
| $z17 = IMPLICIT_DEF |
| $z18 = IMPLICIT_DEF |
| $z19 = IMPLICIT_DEF |
| $z20 = IMPLICIT_DEF |
| $z21 = IMPLICIT_DEF |
| $z22 = IMPLICIT_DEF |
| $z23 = IMPLICIT_DEF |
| $z24 = IMPLICIT_DEF |
| $z25 = IMPLICIT_DEF |
| $z26 = IMPLICIT_DEF |
| $z27 = IMPLICIT_DEF |
| $z28 = IMPLICIT_DEF |
| $z29 = IMPLICIT_DEF |
| $z30 = IMPLICIT_DEF |
| $z31 = IMPLICIT_DEF |
| |
| %1:ppr = COPY $p0 |
| |
| $p0 = IMPLICIT_DEF |
| $p1 = IMPLICIT_DEF |
| $p2 = IMPLICIT_DEF |
| $p3 = IMPLICIT_DEF |
| $p4 = IMPLICIT_DEF |
| $p5 = IMPLICIT_DEF |
| $p6 = IMPLICIT_DEF |
| $p7 = IMPLICIT_DEF |
| $p8 = IMPLICIT_DEF |
| $p9 = IMPLICIT_DEF |
| $p10 = IMPLICIT_DEF |
| $p11 = IMPLICIT_DEF |
| $p12 = IMPLICIT_DEF |
| $p13 = IMPLICIT_DEF |
| $p14 = IMPLICIT_DEF |
| $p15 = IMPLICIT_DEF |
| |
| $p0 = COPY %1 |
| |
| FAKE_USE implicit $z16, implicit $z17, implicit $z18, implicit $z19, implicit $z20, implicit $z21, implicit $z22, implicit $z23, implicit $z24, implicit $z25, implicit $z26, implicit $z27, implicit $z28, implicit $z29, implicit $z30, implicit $z31 |
| |
| RET_ReallyLR implicit $p0, implicit $z0, implicit $z1, implicit $z2, implicit $z3, implicit $z4, implicit $z5, implicit $z6, implicit $z7 |
| ... |
| --- |
| name: zpr_predicate_spill_above_p7 |
| tracksRegLiveness: true |
| stack: |
| liveins: |
| - { reg: '$p0' } |
| - { reg: '$p1' } |
| - { reg: '$p2' } |
| - { reg: '$p3' } |
| body: | |
| bb.0.entry: |
| liveins: $p0, $p1, $p2, $p3 |
| |
| ; CHECK-LABEL: name: zpr_predicate_spill_above_p7 |
| ; CHECK: stack: |
| ; CHECK: - { id: 0, name: '', type: spill-slot, offset: 0, size: 16, alignment: 16, |
| ; CHECK-NEXT: stack-id: scalable-vector, callee-saved-register: |
| ; CHECK: liveins: $p0, $p1, $p2, $p3 |
| ; CHECK-NEXT: {{ $}} |
| ; |
| ; CHECK-NEXT: $p15 = IMPLICIT_DEF |
| ; |
| ; CHECK-NEXT: SPILL_PPR_TO_ZPR_SLOT_PSEUDO $p15, %stack.0, 0 :: (store (s128) into %stack.0) |
| ; |
| ; CHECK-NEXT: $p0 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p1 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p2 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p3 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p4 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p5 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p6 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p7 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p8 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p9 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p10 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p11 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p12 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p13 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p14 = IMPLICIT_DEF |
| ; CHECK-NEXT: $p15 = IMPLICIT_DEF |
| ; |
| ; CHECK-NEXT: $p15 = FILL_PPR_FROM_ZPR_SLOT_PSEUDO %stack.0, 0 :: (load (s128) from %stack.0) |
| ; |
| ; CHECK-NEXT: FAKE_USE implicit $p4, implicit $p5, implicit $p6, implicit $p7 |
| ; |
| ; CHECK-NEXT: RET_ReallyLR implicit $p0, implicit $p1, implicit $p2, implicit $p3 |
| |
| ; EXPAND-LABEL: name: zpr_predicate_spill_above_p7 |
| ; EXPAND: liveins: $p0, $p1, $p2, $p3, $fp, $p15, $p14, $p13, $p12, $p11, $p10, $p9, $p8, $p7, $p6, $p5, $p4 |
| ; EXPAND-NEXT: {{ $}} |
| ; |
| ; EXPAND-NEXT: $sp = frame-setup SUBXri $sp, 1040, 0 |
| ; EXPAND-NEXT: frame-setup STRXui killed $fp, $sp, 128 :: (store (s64) into %stack.14) |
| ; EXPAND-NEXT: $sp = frame-setup ADDVL_XXI $sp, -12, implicit $vg |
| ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p15, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 0 :: (store (s128) into %stack.13) |
| ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p14, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 1 :: (store (s128) into %stack.12) |
| ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p13, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 2 :: (store (s128) into %stack.11) |
| ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p12, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 3 :: (store (s128) into %stack.10) |
| ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p11, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 4 :: (store (s128) into %stack.9) |
| ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p10, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 5 :: (store (s128) into %stack.8) |
| ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p9, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 6 :: (store (s128) into %stack.7) |
| ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p8, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 7 :: (store (s128) into %stack.6) |
| ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p7, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 8 :: (store (s128) into %stack.5) |
| ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p6, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 9 :: (store (s128) into %stack.4) |
| ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p5, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 10 :: (store (s128) into %stack.3) |
| ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p4, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 11 :: (store (s128) into %stack.2) |
| ; EXPAND-NEXT: $sp = frame-setup SUBXri $sp, 1024, 0 |
| ; EXPAND-NEXT: $sp = frame-setup ADDVL_XXI $sp, -2, implicit $vg |
| ; |
| ; EXPAND-NEXT: $p15 = IMPLICIT_DEF |
| ; |
| ; EXPAND-NEXT: $z0 = CPY_ZPzI_B $p15, 1, 0 |
| ; EXPAND-NEXT: $x8 = ADDXri $sp, 1024, 0 |
| ; EXPAND-NEXT: STR_ZXI $z0, $x8, 1 :: (store (s128) into %stack.0) |
| ; |
| ; EXPAND-NEXT: $p0 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p1 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p2 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p3 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p4 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p5 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p6 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p7 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p8 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p9 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p10 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p11 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p12 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p13 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p14 = IMPLICIT_DEF |
| ; EXPAND-NEXT: $p15 = IMPLICIT_DEF |
| ; |
| ; EXPAND-NEXT: $z0 = CPY_ZPzI_B $p0, 1, 0 |
| ; EXPAND-NEXT: STR_ZXI $z0, $x8, 0 :: (store (s128) into %stack.16) |
| ; EXPAND-NEXT: $z0 = LDR_ZXI $x8, 1 :: (load (s128) from %stack.0) |
| ; EXPAND-NEXT: $p0 = PTRUE_B 31, implicit $vg |
| ; EXPAND-NEXT: $p15 = CMPNE_PPzZI_B $p0, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z0 = LDR_ZXI killed $x8, 0 :: (load (s128) from %stack.16) |
| ; EXPAND-NEXT: $p0 = PTRUE_B 31, implicit $vg |
| ; EXPAND-NEXT: $p0 = CMPNE_PPzZI_B $p0, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; |
| ; EXPAND-NEXT: FAKE_USE implicit $p4, implicit $p5, implicit $p6, implicit $p7 |
| ; |
| ; EXPAND-NEXT: $sp = frame-destroy ADDXri $sp, 1024, 0 |
| ; EXPAND-NEXT: $sp = frame-destroy ADDVL_XXI $sp, 2, implicit $vg |
| ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 0 :: (load (s128) from %stack.13) |
| ; EXPAND-NEXT: $p4 = frame-destroy PTRUE_B 31, implicit $vg |
| ; EXPAND-NEXT: $p15 = frame-destroy CMPNE_PPzZI_B $p4, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 1 :: (load (s128) from %stack.12) |
| ; EXPAND-NEXT: $p14 = frame-destroy CMPNE_PPzZI_B $p4, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 2 :: (load (s128) from %stack.11) |
| ; EXPAND-NEXT: $p13 = frame-destroy CMPNE_PPzZI_B $p4, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 3 :: (load (s128) from %stack.10) |
| ; EXPAND-NEXT: $p12 = frame-destroy CMPNE_PPzZI_B $p4, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 4 :: (load (s128) from %stack.9) |
| ; EXPAND-NEXT: $p11 = frame-destroy CMPNE_PPzZI_B $p4, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 5 :: (load (s128) from %stack.8) |
| ; EXPAND-NEXT: $p10 = frame-destroy CMPNE_PPzZI_B $p4, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 6 :: (load (s128) from %stack.7) |
| ; EXPAND-NEXT: $p9 = frame-destroy CMPNE_PPzZI_B $p4, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 7 :: (load (s128) from %stack.6) |
| ; EXPAND-NEXT: $p8 = frame-destroy CMPNE_PPzZI_B $p4, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 8 :: (load (s128) from %stack.5) |
| ; EXPAND-NEXT: $p7 = frame-destroy CMPNE_PPzZI_B $p4, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 9 :: (load (s128) from %stack.4) |
| ; EXPAND-NEXT: $p6 = frame-destroy CMPNE_PPzZI_B $p4, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 10 :: (load (s128) from %stack.3) |
| ; EXPAND-NEXT: $p5 = frame-destroy CMPNE_PPzZI_B $p4, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 11 :: (load (s128) from %stack.2) |
| ; EXPAND-NEXT: $p4 = frame-destroy CMPNE_PPzZI_B $p4, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $sp = frame-destroy ADDVL_XXI $sp, 12, implicit $vg |
| ; EXPAND-NEXT: $fp = frame-destroy LDRXui $sp, 128 :: (load (s64) from %stack.14) |
| ; EXPAND-NEXT: $sp = frame-destroy ADDXri $sp, 1040, 0 |
| ; EXPAND-NEXT: RET undef $lr, implicit $p0, implicit $p1, implicit $p2, implicit $p3 |
| $p15 = IMPLICIT_DEF |
| %1:ppr = COPY $p15 |
| |
| $p0 = IMPLICIT_DEF |
| $p1 = IMPLICIT_DEF |
| $p2 = IMPLICIT_DEF |
| $p3 = IMPLICIT_DEF |
| $p4 = IMPLICIT_DEF |
| $p5 = IMPLICIT_DEF |
| $p6 = IMPLICIT_DEF |
| $p7 = IMPLICIT_DEF |
| $p8 = IMPLICIT_DEF |
| $p9 = IMPLICIT_DEF |
| $p10 = IMPLICIT_DEF |
| $p11 = IMPLICIT_DEF |
| $p12 = IMPLICIT_DEF |
| $p13 = IMPLICIT_DEF |
| $p14 = IMPLICIT_DEF |
| $p15 = IMPLICIT_DEF |
| |
| $p15 = COPY %1 |
| |
| FAKE_USE implicit $p4, implicit $p5, implicit $p6, implicit $p7 |
| |
| RET_ReallyLR implicit $p0, implicit $p1, implicit $p2, implicit $p3 |
| ... |
| --- |
| name: zpr_predicate_spill_p4_saved |
| tracksRegLiveness: true |
| stack: |
| liveins: |
| - { reg: '$p0' } |
| - { reg: '$p1' } |
| - { reg: '$p2' } |
| - { reg: '$p3' } |
| body: | |
| bb.0.entry: |
| liveins: $p0, $p1, $p2, $p3 |
| |
| ; CHECK-LABEL: name: zpr_predicate_spill_p4_saved |
| ; CHECK: liveins: $p0, $p1, $p2, $p3 |
| ; CHECK-NEXT: {{ $}} |
| ; |
| ; CHECK-NEXT: $p8 = IMPLICIT_DEF |
| ; |
| ; CHECK-NEXT: RET_ReallyLR implicit $p0, implicit $p1, implicit $p2, implicit $p3 |
| |
| ; EXPAND-LABEL: name: zpr_predicate_spill_p4_saved |
| ; EXPAND: liveins: $p0, $p1, $p2, $p3, $fp, $p8, $p4 |
| ; EXPAND-NEXT: {{ $}} |
| ; EXPAND-NEXT: $sp = frame-setup SUBXri $sp, 1040, 0 |
| ; EXPAND-NEXT: frame-setup STRXui killed $fp, $sp, 128 :: (store (s64) into %stack.3) |
| ; EXPAND-NEXT: $sp = frame-setup ADDVL_XXI $sp, -2, implicit $vg |
| ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p8, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 0 :: (store (s128) into %stack.2) |
| ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p4, 1, 0 |
| ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 1 :: (store (s128) into %stack.1) |
| ; EXPAND-NEXT: $sp = frame-setup SUBXri $sp, 1024, 0 |
| ; |
| ; EXPAND-NEXT: $p8 = IMPLICIT_DEF |
| ; |
| ; EXPAND-NEXT: $sp = frame-destroy ADDXri $sp, 1024, 0 |
| ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 0 :: (load (s128) from %stack.2) |
| ; EXPAND-NEXT: $p4 = frame-destroy PTRUE_B 31, implicit $vg |
| ; EXPAND-NEXT: $p8 = frame-destroy CMPNE_PPzZI_B $p4, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 1 :: (load (s128) from %stack.1) |
| ; EXPAND-NEXT: $p4 = frame-destroy CMPNE_PPzZI_B $p4, $z0, 0, implicit-def $nzcv, implicit-def $nzcv |
| ; EXPAND-NEXT: $sp = frame-destroy ADDVL_XXI $sp, 2, implicit $vg |
| ; EXPAND-NEXT: $fp = frame-destroy LDRXui $sp, 128 :: (load (s64) from %stack.3) |
| ; EXPAND-NEXT: $sp = frame-destroy ADDXri $sp, 1040, 0 |
| ; EXPAND-NEXT: RET undef $lr, implicit $p0, implicit $p1, implicit $p2, implicit $p3 |
| |
| ; If we spill a register above p8, p4 must also be saved, so we can guarantee |
| ; they will be a register (in the range p0-p7 to for the cmpne reload). |
| $p8 = IMPLICIT_DEF |
| |
| RET_ReallyLR implicit $p0, implicit $p1, implicit $p2, implicit $p3 |
| ... |