Merge MRI::isPhysRegOrOverlapUsed() into isPhysRegUsed().

All callers of these functions really want the isPhysRegOrOverlapUsed()
functionality which also checks aliases. For historical reasons, targets
without register aliases were calling isPhysRegUsed() instead.

Change isPhysRegUsed() to also check aliases, and switch all
isPhysRegOrOverlapUsed() callers to isPhysRegUsed().

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@166117 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Jakob Stoklund Olesen 2012-10-17 18:44:18 +00:00
parent 72d9bbf117
commit 9aa6e0a134
4 changed files with 10 additions and 11 deletions

View File

@ -357,14 +357,13 @@ public:
//===--------------------------------------------------------------------===// //===--------------------------------------------------------------------===//
/// isPhysRegUsed - Return true if the specified register is used in this /// isPhysRegUsed - Return true if the specified register is used in this
/// function. This only works after register allocation. /// function. Also check for clobbered aliases and registers clobbered by
/// function calls with register mask operands.
///
/// This only works after register allocation. It is primarily used by
/// PrologEpilogInserter to determine which callee-saved registers need
/// spilling.
bool isPhysRegUsed(unsigned Reg) const { bool isPhysRegUsed(unsigned Reg) const {
return UsedPhysRegs.test(Reg) || UsedPhysRegMask.test(Reg);
}
/// isPhysRegOrOverlapUsed - Return true if Reg or any overlapping register
/// is used in this function.
bool isPhysRegOrOverlapUsed(unsigned Reg) const {
if (UsedPhysRegMask.test(Reg)) if (UsedPhysRegMask.test(Reg))
return true; return true;
for (MCRegAliasIterator AI(Reg, TRI, true); AI.isValid(); ++AI) for (MCRegAliasIterator AI(Reg, TRI, true); AI.isValid(); ++AI)

View File

@ -657,7 +657,7 @@ bool ExeDepsFix::runOnMachineFunction(MachineFunction &mf) {
bool anyregs = false; bool anyregs = false;
for (TargetRegisterClass::const_iterator I = RC->begin(), E = RC->end(); for (TargetRegisterClass::const_iterator I = RC->begin(), E = RC->end();
I != E; ++I) I != E; ++I)
if (MF->getRegInfo().isPhysRegOrOverlapUsed(*I)) { if (MF->getRegInfo().isPhysRegUsed(*I)) {
anyregs = true; anyregs = true;
break; break;
} }

View File

@ -227,7 +227,7 @@ void PEI::calculateCalleeSavedRegisters(MachineFunction &Fn) {
std::vector<CalleeSavedInfo> CSI; std::vector<CalleeSavedInfo> CSI;
for (unsigned i = 0; CSRegs[i]; ++i) { for (unsigned i = 0; CSRegs[i]; ++i) {
unsigned Reg = CSRegs[i]; unsigned Reg = CSRegs[i];
if (Fn.getRegInfo().isPhysRegOrOverlapUsed(Reg)) { if (Fn.getRegInfo().isPhysRegUsed(Reg)) {
// If the reg is modified, save it! // If the reg is modified, save it!
CSI.push_back(CalleeSavedInfo(Reg)); CSI.push_back(CalleeSavedInfo(Reg));
} }

View File

@ -1176,7 +1176,7 @@ static void checkNumAlignedDPRCS2Regs(MachineFunction &MF) {
MachineRegisterInfo &MRI = MF.getRegInfo(); MachineRegisterInfo &MRI = MF.getRegInfo();
unsigned NumSpills = 0; unsigned NumSpills = 0;
for (; NumSpills < 8; ++NumSpills) for (; NumSpills < 8; ++NumSpills)
if (!MRI.isPhysRegOrOverlapUsed(ARM::D8 + NumSpills)) if (!MRI.isPhysRegUsed(ARM::D8 + NumSpills))
break; break;
// Don't do this for just one d-register. It's not worth it. // Don't do this for just one d-register. It's not worth it.
@ -1249,7 +1249,7 @@ ARMFrameLowering::processFunctionBeforeCalleeSavedScan(MachineFunction &MF,
for (unsigned i = 0; CSRegs[i]; ++i) { for (unsigned i = 0; CSRegs[i]; ++i) {
unsigned Reg = CSRegs[i]; unsigned Reg = CSRegs[i];
bool Spilled = false; bool Spilled = false;
if (MF.getRegInfo().isPhysRegOrOverlapUsed(Reg)) { if (MF.getRegInfo().isPhysRegUsed(Reg)) {
Spilled = true; Spilled = true;
CanEliminateFrame = false; CanEliminateFrame = false;
} }