mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-08 21:32:39 +00:00
Remove ARMBaseRegisterInfo::isReservedReg().
It is just as easy to use MRI::isReserved() now. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@166817 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
cd275f5687
commit
b1f994af58
@ -114,37 +114,6 @@ getReservedRegs(const MachineFunction &MF) const {
|
||||
return Reserved;
|
||||
}
|
||||
|
||||
bool ARMBaseRegisterInfo::isReservedReg(const MachineFunction &MF,
|
||||
unsigned Reg) const {
|
||||
const TargetFrameLowering *TFI = MF.getTarget().getFrameLowering();
|
||||
const TargetRegisterClass *RC = &ARM::GPRPairRegClass;
|
||||
if (RC->contains(Reg)) {
|
||||
for (MCSubRegIterator SI(Reg, this); SI.isValid(); ++SI)
|
||||
if(isReservedReg(MF, *SI)) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
switch (Reg) {
|
||||
default: break;
|
||||
case ARM::SP:
|
||||
case ARM::PC:
|
||||
return true;
|
||||
case ARM::R6:
|
||||
if (hasBasePointer(MF))
|
||||
return true;
|
||||
break;
|
||||
case ARM::R7:
|
||||
case ARM::R11:
|
||||
if (FramePtr == Reg && TFI->hasFP(MF))
|
||||
return true;
|
||||
break;
|
||||
case ARM::R9:
|
||||
return STI.isR9Reserved();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
const TargetRegisterClass*
|
||||
ARMBaseRegisterInfo::getLargestLegalSuperClass(const TargetRegisterClass *RC)
|
||||
const {
|
||||
@ -492,6 +461,7 @@ unsigned ARMBaseRegisterInfo::getEHHandlerRegister() const {
|
||||
|
||||
unsigned ARMBaseRegisterInfo::getRegisterPairEven(unsigned Reg,
|
||||
const MachineFunction &MF) const {
|
||||
const MachineRegisterInfo &MRI = MF.getRegInfo();
|
||||
switch (Reg) {
|
||||
default: break;
|
||||
// Return 0 if either register of the pair is a special register.
|
||||
@ -500,10 +470,10 @@ unsigned ARMBaseRegisterInfo::getRegisterPairEven(unsigned Reg,
|
||||
case ARM::R3: return ARM::R2;
|
||||
case ARM::R5: return ARM::R4;
|
||||
case ARM::R7:
|
||||
return (isReservedReg(MF, ARM::R7) || isReservedReg(MF, ARM::R6))
|
||||
return (MRI.isReserved(ARM::R7) || MRI.isReserved(ARM::R6))
|
||||
? 0 : ARM::R6;
|
||||
case ARM::R9: return isReservedReg(MF, ARM::R9) ? 0 :ARM::R8;
|
||||
case ARM::R11: return isReservedReg(MF, ARM::R11) ? 0 : ARM::R10;
|
||||
case ARM::R9: return MRI.isReserved(ARM::R9) ? 0 :ARM::R8;
|
||||
case ARM::R11: return MRI.isReserved(ARM::R11) ? 0 : ARM::R10;
|
||||
|
||||
case ARM::S1: return ARM::S0;
|
||||
case ARM::S3: return ARM::S2;
|
||||
@ -545,6 +515,7 @@ unsigned ARMBaseRegisterInfo::getRegisterPairEven(unsigned Reg,
|
||||
|
||||
unsigned ARMBaseRegisterInfo::getRegisterPairOdd(unsigned Reg,
|
||||
const MachineFunction &MF) const {
|
||||
const MachineRegisterInfo &MRI = MF.getRegInfo();
|
||||
switch (Reg) {
|
||||
default: break;
|
||||
// Return 0 if either register of the pair is a special register.
|
||||
@ -553,10 +524,10 @@ unsigned ARMBaseRegisterInfo::getRegisterPairOdd(unsigned Reg,
|
||||
case ARM::R2: return ARM::R3;
|
||||
case ARM::R4: return ARM::R5;
|
||||
case ARM::R6:
|
||||
return (isReservedReg(MF, ARM::R7) || isReservedReg(MF, ARM::R6))
|
||||
return (MRI.isReserved(ARM::R7) || MRI.isReserved(ARM::R6))
|
||||
? 0 : ARM::R7;
|
||||
case ARM::R8: return isReservedReg(MF, ARM::R9) ? 0 :ARM::R9;
|
||||
case ARM::R10: return isReservedReg(MF, ARM::R11) ? 0 : ARM::R11;
|
||||
case ARM::R8: return MRI.isReserved(ARM::R9) ? 0 :ARM::R9;
|
||||
case ARM::R10: return MRI.isReserved(ARM::R11) ? 0 : ARM::R11;
|
||||
|
||||
case ARM::S0: return ARM::S1;
|
||||
case ARM::S2: return ARM::S3;
|
||||
|
@ -160,8 +160,6 @@ public:
|
||||
unsigned MIFlags = MachineInstr::NoFlags)const;
|
||||
|
||||
/// Code Generation virtual methods...
|
||||
virtual bool isReservedReg(const MachineFunction &MF, unsigned Reg) const;
|
||||
|
||||
virtual bool requiresRegisterScavenging(const MachineFunction &MF) const;
|
||||
|
||||
virtual bool trackLivenessAfterRegAlloc(const MachineFunction &MF) const;
|
||||
|
@ -348,6 +348,7 @@ void ARMFrameLowering::emitEpilogue(MachineFunction &MF,
|
||||
unsigned RetOpcode = MBBI->getOpcode();
|
||||
DebugLoc dl = MBBI->getDebugLoc();
|
||||
MachineFrameInfo *MFI = MF.getFrameInfo();
|
||||
MachineRegisterInfo &MRI = MF.getRegInfo();
|
||||
ARMFunctionInfo *AFI = MF.getInfo<ARMFunctionInfo>();
|
||||
const TargetRegisterInfo *RegInfo = MF.getTarget().getRegisterInfo();
|
||||
const ARMBaseInstrInfo &TII =
|
||||
@ -399,7 +400,7 @@ void ARMFrameLowering::emitEpilogue(MachineFunction &MF,
|
||||
// This is bad, if an interrupt is taken after the mov, sp is in an
|
||||
// inconsistent state.
|
||||
// Use the first callee-saved register as a scratch register.
|
||||
assert(MF.getRegInfo().isPhysRegUsed(ARM::R4) &&
|
||||
assert(MRI.isPhysRegUsed(ARM::R4) &&
|
||||
"No scratch register to restore SP from FP!");
|
||||
emitT2RegPlusImmediate(MBB, MBBI, dl, ARM::R4, FramePtr, -NumBytes,
|
||||
ARMCC::AL, 0, TII);
|
||||
@ -1209,6 +1210,7 @@ ARMFrameLowering::processFunctionBeforeCalleeSavedScan(MachineFunction &MF,
|
||||
*static_cast<const ARMBaseInstrInfo*>(MF.getTarget().getInstrInfo());
|
||||
ARMFunctionInfo *AFI = MF.getInfo<ARMFunctionInfo>();
|
||||
MachineFrameInfo *MFI = MF.getFrameInfo();
|
||||
MachineRegisterInfo &MRI = MF.getRegInfo();
|
||||
unsigned FramePtr = RegInfo->getFrameRegister(MF);
|
||||
|
||||
// Spill R4 if Thumb2 function requires stack realignment - it will be used as
|
||||
@ -1218,12 +1220,12 @@ ARMFrameLowering::processFunctionBeforeCalleeSavedScan(MachineFunction &MF,
|
||||
// FIXME: It will be better just to find spare register here.
|
||||
if (AFI->isThumb2Function() &&
|
||||
(MFI->hasVarSizedObjects() || RegInfo->needsStackRealignment(MF)))
|
||||
MF.getRegInfo().setPhysRegUsed(ARM::R4);
|
||||
MRI.setPhysRegUsed(ARM::R4);
|
||||
|
||||
if (AFI->isThumb1OnlyFunction()) {
|
||||
// Spill LR if Thumb1 function uses variable length argument lists.
|
||||
if (AFI->getVarArgsRegSaveSize() > 0)
|
||||
MF.getRegInfo().setPhysRegUsed(ARM::LR);
|
||||
MRI.setPhysRegUsed(ARM::LR);
|
||||
|
||||
// Spill R4 if Thumb1 epilogue has to restore SP from FP. We don't know
|
||||
// for sure what the stack size will be, but for this, an estimate is good
|
||||
@ -1233,7 +1235,7 @@ ARMFrameLowering::processFunctionBeforeCalleeSavedScan(MachineFunction &MF,
|
||||
// FIXME: It will be better just to find spare register here.
|
||||
unsigned StackSize = estimateStackSize(MF);
|
||||
if (MFI->hasVarSizedObjects() || StackSize > 508)
|
||||
MF.getRegInfo().setPhysRegUsed(ARM::R4);
|
||||
MRI.setPhysRegUsed(ARM::R4);
|
||||
}
|
||||
|
||||
// See if we can spill vector registers to aligned stack.
|
||||
@ -1241,7 +1243,7 @@ ARMFrameLowering::processFunctionBeforeCalleeSavedScan(MachineFunction &MF,
|
||||
|
||||
// Spill the BasePtr if it's used.
|
||||
if (RegInfo->hasBasePointer(MF))
|
||||
MF.getRegInfo().setPhysRegUsed(RegInfo->getBaseRegister());
|
||||
MRI.setPhysRegUsed(RegInfo->getBaseRegister());
|
||||
|
||||
// Don't spill FP if the frame can be eliminated. This is determined
|
||||
// by scanning the callee-save registers to see if any is used.
|
||||
@ -1249,7 +1251,7 @@ ARMFrameLowering::processFunctionBeforeCalleeSavedScan(MachineFunction &MF,
|
||||
for (unsigned i = 0; CSRegs[i]; ++i) {
|
||||
unsigned Reg = CSRegs[i];
|
||||
bool Spilled = false;
|
||||
if (MF.getRegInfo().isPhysRegUsed(Reg)) {
|
||||
if (MRI.isPhysRegUsed(Reg)) {
|
||||
Spilled = true;
|
||||
CanEliminateFrame = false;
|
||||
}
|
||||
@ -1338,7 +1340,7 @@ ARMFrameLowering::processFunctionBeforeCalleeSavedScan(MachineFunction &MF,
|
||||
// If LR is not spilled, but at least one of R4, R5, R6, and R7 is spilled.
|
||||
// Spill LR as well so we can fold BX_RET to the registers restore (LDM).
|
||||
if (!LRSpilled && CS1Spilled) {
|
||||
MF.getRegInfo().setPhysRegUsed(ARM::LR);
|
||||
MRI.setPhysRegUsed(ARM::LR);
|
||||
NumGPRSpills++;
|
||||
UnspilledCS1GPRs.erase(std::find(UnspilledCS1GPRs.begin(),
|
||||
UnspilledCS1GPRs.end(), (unsigned)ARM::LR));
|
||||
@ -1347,7 +1349,7 @@ ARMFrameLowering::processFunctionBeforeCalleeSavedScan(MachineFunction &MF,
|
||||
}
|
||||
|
||||
if (hasFP(MF)) {
|
||||
MF.getRegInfo().setPhysRegUsed(FramePtr);
|
||||
MRI.setPhysRegUsed(FramePtr);
|
||||
NumGPRSpills++;
|
||||
}
|
||||
|
||||
@ -1362,16 +1364,16 @@ ARMFrameLowering::processFunctionBeforeCalleeSavedScan(MachineFunction &MF,
|
||||
// Don't spill high register if the function is thumb1
|
||||
if (!AFI->isThumb1OnlyFunction() ||
|
||||
isARMLowRegister(Reg) || Reg == ARM::LR) {
|
||||
MF.getRegInfo().setPhysRegUsed(Reg);
|
||||
if (!RegInfo->isReservedReg(MF, Reg))
|
||||
MRI.setPhysRegUsed(Reg);
|
||||
if (!MRI.isReserved(Reg))
|
||||
ExtraCSSpill = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else if (!UnspilledCS2GPRs.empty() && !AFI->isThumb1OnlyFunction()) {
|
||||
unsigned Reg = UnspilledCS2GPRs.front();
|
||||
MF.getRegInfo().setPhysRegUsed(Reg);
|
||||
if (!RegInfo->isReservedReg(MF, Reg))
|
||||
MRI.setPhysRegUsed(Reg);
|
||||
if (!MRI.isReserved(Reg))
|
||||
ExtraCSSpill = true;
|
||||
}
|
||||
}
|
||||
@ -1389,7 +1391,7 @@ ARMFrameLowering::processFunctionBeforeCalleeSavedScan(MachineFunction &MF,
|
||||
while (NumExtras && !UnspilledCS1GPRs.empty()) {
|
||||
unsigned Reg = UnspilledCS1GPRs.back();
|
||||
UnspilledCS1GPRs.pop_back();
|
||||
if (!RegInfo->isReservedReg(MF, Reg) &&
|
||||
if (!MRI.isReserved(Reg) &&
|
||||
(!AFI->isThumb1OnlyFunction() || isARMLowRegister(Reg) ||
|
||||
Reg == ARM::LR)) {
|
||||
Extras.push_back(Reg);
|
||||
@ -1401,7 +1403,7 @@ ARMFrameLowering::processFunctionBeforeCalleeSavedScan(MachineFunction &MF,
|
||||
while (NumExtras && !UnspilledCS2GPRs.empty()) {
|
||||
unsigned Reg = UnspilledCS2GPRs.back();
|
||||
UnspilledCS2GPRs.pop_back();
|
||||
if (!RegInfo->isReservedReg(MF, Reg)) {
|
||||
if (!MRI.isReserved(Reg)) {
|
||||
Extras.push_back(Reg);
|
||||
NumExtras--;
|
||||
}
|
||||
@ -1409,7 +1411,7 @@ ARMFrameLowering::processFunctionBeforeCalleeSavedScan(MachineFunction &MF,
|
||||
}
|
||||
if (Extras.size() && NumExtras == 0) {
|
||||
for (unsigned i = 0, e = Extras.size(); i != e; ++i) {
|
||||
MF.getRegInfo().setPhysRegUsed(Extras[i]);
|
||||
MRI.setPhysRegUsed(Extras[i]);
|
||||
}
|
||||
} else if (!AFI->isThumb1OnlyFunction()) {
|
||||
// note: Thumb1 functions spill to R12, not the stack. Reserve a slot
|
||||
@ -1423,7 +1425,7 @@ ARMFrameLowering::processFunctionBeforeCalleeSavedScan(MachineFunction &MF,
|
||||
}
|
||||
|
||||
if (ForceLRSpill) {
|
||||
MF.getRegInfo().setPhysRegUsed(ARM::LR);
|
||||
MRI.setPhysRegUsed(ARM::LR);
|
||||
AFI->setLRIsSpilledForFarJump(true);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user