@@ -3611,6 +3611,9 @@ void AArch64FrameLowering::determineCalleeSaves(MachineFunction &MF,
3611
3611
unsigned ExtraCSSpill = 0 ;
3612
3612
bool HasUnpairedGPR64 = false ;
3613
3613
bool HasPairZReg = false ;
3614
+ BitVector UserReservedRegs = RegInfo->getUserReservedRegs (MF);
3615
+ BitVector ReservedRegs = RegInfo->getReservedRegs (MF);
3616
+
3614
3617
// Figure out which callee-saved registers to save/restore.
3615
3618
for (unsigned i = 0 ; CSRegs[i]; ++i) {
3616
3619
const unsigned Reg = CSRegs[i];
@@ -3621,7 +3624,7 @@ void AArch64FrameLowering::determineCalleeSaves(MachineFunction &MF,
3621
3624
3622
3625
// Don't save manually reserved registers set through +reserve-x#i,
3623
3626
// even for callee-saved registers, as per GCC's behavior.
3624
- if (RegInfo-> isUserReservedReg (MF, Reg) ) {
3627
+ if (UserReservedRegs[ Reg] ) {
3625
3628
SavedRegs.reset (Reg);
3626
3629
continue ;
3627
3630
}
@@ -3653,8 +3656,7 @@ void AArch64FrameLowering::determineCalleeSaves(MachineFunction &MF,
3653
3656
AArch64::FPR128RegClass.contains (Reg, PairedReg));
3654
3657
3655
3658
if (!RegUsed) {
3656
- if (AArch64::GPR64RegClass.contains (Reg) &&
3657
- !RegInfo->isReservedReg (MF, Reg)) {
3659
+ if (AArch64::GPR64RegClass.contains (Reg) && !ReservedRegs[Reg]) {
3658
3660
UnspilledCSGPR = Reg;
3659
3661
UnspilledCSGPRPaired = PairedReg;
3660
3662
}
@@ -3676,7 +3678,7 @@ void AArch64FrameLowering::determineCalleeSaves(MachineFunction &MF,
3676
3678
!SavedRegs.test (PairedReg)) {
3677
3679
SavedRegs.set (PairedReg);
3678
3680
if (AArch64::GPR64RegClass.contains (PairedReg) &&
3679
- !RegInfo-> isReservedReg (MF, PairedReg) )
3681
+ !ReservedRegs[ PairedReg] )
3680
3682
ExtraCSSpill = PairedReg;
3681
3683
}
3682
3684
// Check if there is a pair of ZRegs, so it can select PReg for spill/fill
@@ -3699,7 +3701,7 @@ void AArch64FrameLowering::determineCalleeSaves(MachineFunction &MF,
3699
3701
AFI->setPredicateRegForFillSpill (AArch64::PN8);
3700
3702
}
3701
3703
3702
- assert (!RegInfo-> isReservedReg (MF, AFI->getPredicateRegForFillSpill ()) &&
3704
+ assert (!ReservedRegs[ AFI->getPredicateRegForFillSpill ()] &&
3703
3705
" Predicate cannot be a reserved register" );
3704
3706
}
3705
3707
0 commit comments