@@ -3611,6 +3611,9 @@ void AArch64FrameLowering::determineCalleeSaves(MachineFunction &MF,
36113611 unsigned ExtraCSSpill = 0 ;
36123612 bool HasUnpairedGPR64 = false ;
36133613 bool HasPairZReg = false ;
3614+ BitVector UserReservedRegs = RegInfo->getUserReservedRegs (MF);
3615+ BitVector ReservedRegs = RegInfo->getReservedRegs (MF);
3616+
36143617 // Figure out which callee-saved registers to save/restore.
36153618 for (unsigned i = 0 ; CSRegs[i]; ++i) {
36163619 const unsigned Reg = CSRegs[i];
@@ -3621,7 +3624,7 @@ void AArch64FrameLowering::determineCalleeSaves(MachineFunction &MF,
36213624
36223625 // Don't save manually reserved registers set through +reserve-x#i,
36233626 // even for callee-saved registers, as per GCC's behavior.
3624- if (RegInfo-> isUserReservedReg (MF, Reg) ) {
3627+ if (UserReservedRegs[ Reg] ) {
36253628 SavedRegs.reset (Reg);
36263629 continue ;
36273630 }
@@ -3653,8 +3656,7 @@ void AArch64FrameLowering::determineCalleeSaves(MachineFunction &MF,
36533656 AArch64::FPR128RegClass.contains (Reg, PairedReg));
36543657
36553658 if (!RegUsed) {
3656- if (AArch64::GPR64RegClass.contains (Reg) &&
3657- !RegInfo->isReservedReg (MF, Reg)) {
3659+ if (AArch64::GPR64RegClass.contains (Reg) && !ReservedRegs[Reg]) {
36583660 UnspilledCSGPR = Reg;
36593661 UnspilledCSGPRPaired = PairedReg;
36603662 }
@@ -3676,7 +3678,7 @@ void AArch64FrameLowering::determineCalleeSaves(MachineFunction &MF,
36763678 !SavedRegs.test (PairedReg)) {
36773679 SavedRegs.set (PairedReg);
36783680 if (AArch64::GPR64RegClass.contains (PairedReg) &&
3679- !RegInfo-> isReservedReg (MF, PairedReg) )
3681+ !ReservedRegs[ PairedReg] )
36803682 ExtraCSSpill = PairedReg;
36813683 }
36823684 // 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,
36993701 AFI->setPredicateRegForFillSpill (AArch64::PN8);
37003702 }
37013703
3702- assert (!RegInfo-> isReservedReg (MF, AFI->getPredicateRegForFillSpill ()) &&
3704+ assert (!ReservedRegs[ AFI->getPredicateRegForFillSpill ()] &&
37033705 " Predicate cannot be a reserved register" );
37043706 }
37053707
0 commit comments