@@ -1466,7 +1466,7 @@ StackOffset AArch64FrameLowering::resolveFrameOffsetReference(
14661466 return FPOffset;
14671467 }
14681468 FrameReg = RegInfo->hasBasePointer (MF) ? RegInfo->getBaseRegister ()
1469- : ( unsigned ) AArch64::SP;
1469+ : MCRegister ( AArch64::SP) ;
14701470
14711471 return SPOffset;
14721472 }
@@ -1589,30 +1589,30 @@ static bool invalidateRegisterPairing(unsigned Reg1, unsigned Reg2,
15891589namespace {
15901590
15911591struct RegPairInfo {
1592- unsigned Reg1 = AArch64::NoRegister ;
1593- unsigned Reg2 = AArch64::NoRegister ;
1592+ Register Reg1;
1593+ Register Reg2;
15941594 int FrameIdx;
15951595 int Offset;
15961596 enum RegType { GPR, FPR64, FPR128, PPR, ZPR, VG } Type;
15971597 const TargetRegisterClass *RC;
15981598
15991599 RegPairInfo () = default ;
16001600
1601- bool isPaired () const { return Reg2 != AArch64::NoRegister ; }
1601+ bool isPaired () const { return Reg2. isValid () ; }
16021602
16031603 bool isScalable () const { return Type == PPR || Type == ZPR; }
16041604};
16051605
16061606} // end anonymous namespace
16071607
1608- unsigned findFreePredicateReg (BitVector &SavedRegs) {
1608+ MCRegister findFreePredicateReg (BitVector &SavedRegs) {
16091609 for (unsigned PReg = AArch64::P8; PReg <= AArch64::P15; ++PReg) {
16101610 if (SavedRegs.test (PReg)) {
16111611 unsigned PNReg = PReg - AArch64::P0 + AArch64::PN0;
1612- return PNReg;
1612+ return MCRegister ( PNReg) ;
16131613 }
16141614 }
1615- return AArch64::NoRegister ;
1615+ return MCRegister () ;
16161616}
16171617
16181618// The multivector LD/ST are available only for SME or SVE2p1 targets
@@ -1930,8 +1930,8 @@ bool AArch64FrameLowering::spillCalleeSavedRegisters(
19301930 }
19311931 bool PTrueCreated = false ;
19321932 for (const RegPairInfo &RPI : llvm::reverse (RegPairs)) {
1933- unsigned Reg1 = RPI.Reg1 ;
1934- unsigned Reg2 = RPI.Reg2 ;
1933+ Register Reg1 = RPI.Reg1 ;
1934+ Register Reg2 = RPI.Reg2 ;
19351935 unsigned StrOpc;
19361936
19371937 // Issue sequence of spills for cs regs. The first spill may be converted
@@ -1967,7 +1967,7 @@ bool AArch64FrameLowering::spillCalleeSavedRegisters(
19671967 break ;
19681968 }
19691969
1970- unsigned X0Scratch = AArch64::NoRegister ;
1970+ Register X0Scratch;
19711971 auto RestoreX0 = make_scope_exit ([&] {
19721972 if (X0Scratch != AArch64::NoRegister)
19731973 BuildMI (MBB, MI, DL, TII.get (TargetOpcode::COPY), AArch64::X0)
@@ -2147,8 +2147,8 @@ bool AArch64FrameLowering::restoreCalleeSavedRegisters(
21472147
21482148 bool PTrueCreated = false ;
21492149 for (const RegPairInfo &RPI : RegPairs) {
2150- unsigned Reg1 = RPI.Reg1 ;
2151- unsigned Reg2 = RPI.Reg2 ;
2150+ Register Reg1 = RPI.Reg1 ;
2151+ Register Reg2 = RPI.Reg2 ;
21522152
21532153 // Issue sequence of restores for cs regs. The last restore may be converted
21542154 // to a post-increment load later by emitEpilogue if the callee-save stack
@@ -2452,9 +2452,8 @@ void AArch64FrameLowering::determineCalleeSaves(MachineFunction &MF,
24522452 MachineFrameInfo &MFI = MF.getFrameInfo ();
24532453 const MCPhysReg *CSRegs = MF.getRegInfo ().getCalleeSavedRegs ();
24542454
2455- unsigned BasePointerReg = RegInfo->hasBasePointer (MF)
2456- ? RegInfo->getBaseRegister ()
2457- : (unsigned )AArch64::NoRegister;
2455+ MCRegister BasePointerReg =
2456+ RegInfo->hasBasePointer (MF) ? RegInfo->getBaseRegister () : MCRegister ();
24582457
24592458 unsigned ExtraCSSpill = 0 ;
24602459 bool HasUnpairedGPR64 = false ;
@@ -2464,7 +2463,7 @@ void AArch64FrameLowering::determineCalleeSaves(MachineFunction &MF,
24642463
24652464 // Figure out which callee-saved registers to save/restore.
24662465 for (unsigned i = 0 ; CSRegs[i]; ++i) {
2467- const unsigned Reg = CSRegs[i];
2466+ const MCRegister Reg = CSRegs[i];
24682467
24692468 // Add the base pointer register to SavedRegs if it is callee-save.
24702469 if (Reg == BasePointerReg)
@@ -2478,7 +2477,7 @@ void AArch64FrameLowering::determineCalleeSaves(MachineFunction &MF,
24782477 }
24792478
24802479 bool RegUsed = SavedRegs.test (Reg);
2481- unsigned PairedReg = AArch64::NoRegister ;
2480+ MCRegister PairedReg;
24822481 const bool RegIsGPR64 = AArch64::GPR64RegClass.contains (Reg);
24832482 if (RegIsGPR64 || AArch64::FPR64RegClass.contains (Reg) ||
24842483 AArch64::FPR128RegClass.contains (Reg)) {
@@ -2530,8 +2529,8 @@ void AArch64FrameLowering::determineCalleeSaves(MachineFunction &MF,
25302529 AArch64FunctionInfo *AFI = MF.getInfo <AArch64FunctionInfo>();
25312530 // Find a suitable predicate register for the multi-vector spill/fill
25322531 // instructions.
2533- unsigned PnReg = findFreePredicateReg (SavedRegs);
2534- if (PnReg != AArch64::NoRegister )
2532+ MCRegister PnReg = findFreePredicateReg (SavedRegs);
2533+ if (PnReg. isValid () )
25352534 AFI->setPredicateRegForFillSpill (PnReg);
25362535 // If no free callee-save has been found assign one.
25372536 if (!AFI->getPredicateRegForFillSpill () &&
@@ -2566,7 +2565,7 @@ void AArch64FrameLowering::determineCalleeSaves(MachineFunction &MF,
25662565 unsigned PPRCSStackSize = 0 ;
25672566 const TargetRegisterInfo *TRI = MF.getSubtarget ().getRegisterInfo ();
25682567 for (unsigned Reg : SavedRegs.set_bits ()) {
2569- auto *RC = TRI->getMinimalPhysRegClass (Reg);
2568+ auto *RC = TRI->getMinimalPhysRegClass (MCRegister ( Reg) );
25702569 assert (RC && " expected register class!" );
25712570 auto SpillSize = TRI->getSpillSize (*RC);
25722571 bool IsZPR = AArch64::ZPRRegClass.contains (Reg);
@@ -2608,7 +2607,7 @@ void AArch64FrameLowering::determineCalleeSaves(MachineFunction &MF,
26082607 LLVM_DEBUG ({
26092608 dbgs () << " *** determineCalleeSaves\n Saved CSRs:" ;
26102609 for (unsigned Reg : SavedRegs.set_bits ())
2611- dbgs () << ' ' << printReg (Reg, RegInfo);
2610+ dbgs () << ' ' << printReg (MCRegister ( Reg) , RegInfo);
26122611 dbgs () << " \n " ;
26132612 });
26142613
0 commit comments