summaryrefslogtreecommitdiff
path: root/llvm/lib/CodeGen/RegisterScavenging.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/CodeGen/RegisterScavenging.cpp')
-rw-r--r--llvm/lib/CodeGen/RegisterScavenging.cpp21
1 files changed, 13 insertions, 8 deletions
diff --git a/llvm/lib/CodeGen/RegisterScavenging.cpp b/llvm/lib/CodeGen/RegisterScavenging.cpp
index a833895c115d..e35cf7aa6958 100644
--- a/llvm/lib/CodeGen/RegisterScavenging.cpp
+++ b/llvm/lib/CodeGen/RegisterScavenging.cpp
@@ -119,7 +119,7 @@ void RegScavenger::determineKillsAndDefs() {
DefRegUnits.reset();
for (const MachineOperand &MO : MI.operands()) {
if (MO.isRegMask()) {
- TmpRegUnits.clear();
+ TmpRegUnits.reset();
for (unsigned RU = 0, RUEnd = TRI->getNumRegUnits(); RU != RUEnd; ++RU) {
for (MCRegUnitRootIterator RURI(RU, TRI); RURI.isValid(); ++RURI) {
if (MO.clobbersPhysReg(*RURI)) {
@@ -167,16 +167,15 @@ void RegScavenger::forward() {
MachineInstr &MI = *MBBI;
- for (SmallVectorImpl<ScavengedInfo>::iterator I = Scavenged.begin(),
- IE = Scavenged.end(); I != IE; ++I) {
- if (I->Restore != &MI)
+ for (ScavengedInfo &I : Scavenged) {
+ if (I.Restore != &MI)
continue;
- I->Reg = 0;
- I->Restore = nullptr;
+ I.Reg = 0;
+ I.Restore = nullptr;
}
- if (MI.isDebugInstr())
+ if (MI.isDebugOrPseudoInstr())
return;
determineKillsAndDefs();
@@ -299,7 +298,7 @@ Register RegScavenger::findSurvivorReg(MachineBasicBlock::iterator StartMI,
bool inVirtLiveRange = false;
for (++MI; InstrLimit > 0 && MI != ME; ++MI, --InstrLimit) {
- if (MI->isDebugInstr()) {
+ if (MI->isDebugOrPseudoInstr()) {
++InstrLimit; // Don't count debug instructions
continue;
}
@@ -370,6 +369,10 @@ findSurvivorBackwards(const MachineRegisterInfo &MRI,
const TargetRegisterInfo &TRI = *MRI.getTargetRegisterInfo();
LiveRegUnits Used(TRI);
+ assert(From->getParent() == To->getParent() &&
+ "Target instruction is in other than current basic block, use "
+ "enterBasicBlockEnd first");
+
for (MachineBasicBlock::iterator I = From;; --I) {
const MachineInstr &MI = *I;
@@ -424,6 +427,8 @@ findSurvivorBackwards(const MachineRegisterInfo &MRI,
if (I == MBB.begin())
break;
}
+ assert(I != MBB.begin() && "Did not find target instruction while "
+ "iterating backwards");
}
return std::make_pair(Survivor, Pos);