blob: bff0cacfd5190ca7eefb6169bf117c5dec840dec [file] [log] [blame]
# 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
...