Kill off LiveRangeEdit::getNewVRegs and LiveRangeEdit::getUselessVRegs. These

methods are no longer needed now that LinearScan has gone away.

(Contains tweaks trivialSpillEverywhere to enable the removal of getNewVRegs).


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@151658 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Lang Hames 2012-02-28 22:07:24 +00:00
parent 489d679271
commit 1485455be0
4 changed files with 10 additions and 31 deletions

View File

@ -94,11 +94,6 @@ bool LiveRangeEdit::allUsesAvailableAt(const MachineInstr *OrigMI,
// Reserved registers are OK. // Reserved registers are OK.
if (MO.isUndef() || !lis.hasInterval(MO.getReg())) if (MO.isUndef() || !lis.hasInterval(MO.getReg()))
continue; continue;
// We cannot depend on virtual registers in uselessRegs_.
if (uselessRegs_)
for (unsigned ui = 0, ue = uselessRegs_->size(); ui != ue; ++ui)
if ((*uselessRegs_)[ui]->reg == MO.getReg())
return false;
LiveInterval &li = lis.getInterval(MO.getReg()); LiveInterval &li = lis.getInterval(MO.getReg());
const VNInfo *OVNI = li.getVNInfoAt(OrigIdx); const VNInfo *OVNI = li.getVNInfoAt(OrigIdx);

View File

@ -57,7 +57,6 @@ private:
LiveInterval &parent_; LiveInterval &parent_;
SmallVectorImpl<LiveInterval*> &newRegs_; SmallVectorImpl<LiveInterval*> &newRegs_;
Delegate *const delegate_; Delegate *const delegate_;
const SmallVectorImpl<LiveInterval*> *uselessRegs_;
/// firstNew_ - Index of the first register added to newRegs_. /// firstNew_ - Index of the first register added to newRegs_.
const unsigned firstNew_; const unsigned firstNew_;
@ -93,15 +92,11 @@ public:
/// @param parent The register being spilled or split. /// @param parent The register being spilled or split.
/// @param newRegs List to receive any new registers created. This needn't be /// @param newRegs List to receive any new registers created. This needn't be
/// empty initially, any existing registers are ignored. /// empty initially, any existing registers are ignored.
/// @param uselessRegs List of registers that can't be used when
/// rematerializing values because they are about to be removed.
LiveRangeEdit(LiveInterval &parent, LiveRangeEdit(LiveInterval &parent,
SmallVectorImpl<LiveInterval*> &newRegs, SmallVectorImpl<LiveInterval*> &newRegs,
Delegate *delegate = 0, Delegate *delegate = 0)
const SmallVectorImpl<LiveInterval*> *uselessRegs = 0)
: parent_(parent), newRegs_(newRegs), : parent_(parent), newRegs_(newRegs),
delegate_(delegate), delegate_(delegate),
uselessRegs_(uselessRegs),
firstNew_(newRegs.size()), firstNew_(newRegs.size()),
scannedRemattable_(false) {} scannedRemattable_(false) {}
@ -120,13 +115,6 @@ public:
return makeArrayRef(newRegs_).slice(firstNew_); return makeArrayRef(newRegs_).slice(firstNew_);
} }
/// FIXME: Temporary accessors until we can get rid of
/// LiveIntervals::AddIntervalsForSpills
SmallVectorImpl<LiveInterval*> *getNewVRegs() { return &newRegs_; }
const SmallVectorImpl<LiveInterval*> *getUselessVRegs() {
return uselessRegs_;
}
/// createFrom - Create a new virtual register based on OldReg. /// createFrom - Create a new virtual register based on OldReg.
LiveInterval &createFrom(unsigned OldReg, LiveIntervals&, VirtRegMap&); LiveInterval &createFrom(unsigned OldReg, LiveIntervals&, VirtRegMap&);

View File

@ -187,7 +187,7 @@ void RABasic::spillReg(LiveInterval& VirtReg, unsigned PhysReg,
unassign(SpilledVReg, PhysReg); unassign(SpilledVReg, PhysReg);
// Spill the extracted interval. // Spill the extracted interval.
LiveRangeEdit LRE(SpilledVReg, SplitVRegs, 0, &PendingSpills); LiveRangeEdit LRE(SpilledVReg, SplitVRegs);
spiller().spill(LRE); spiller().spill(LRE);
} }
// After extracting segments, the query's results are invalid. But keep the // After extracting segments, the query's results are invalid. But keep the

View File

@ -72,8 +72,9 @@ protected:
/// Add spill ranges for every use/def of the live interval, inserting loads /// Add spill ranges for every use/def of the live interval, inserting loads
/// immediately before each use, and stores after each def. No folding or /// immediately before each use, and stores after each def. No folding or
/// remat is attempted. /// remat is attempted.
void trivialSpillEverywhere(LiveInterval *li, void trivialSpillEverywhere(LiveRangeEdit& LRE) {
SmallVectorImpl<LiveInterval*> &newIntervals) { LiveInterval* li = &LRE.getParent();
DEBUG(dbgs() << "Spilling everywhere " << *li << "\n"); DEBUG(dbgs() << "Spilling everywhere " << *li << "\n");
assert(li->weight != HUGE_VALF && assert(li->weight != HUGE_VALF &&
@ -115,17 +116,14 @@ protected:
} }
// Create a new vreg & interval for this instr. // Create a new vreg & interval for this instr.
unsigned newVReg = mri->createVirtualRegister(trc); LiveInterval *newLI = &LRE.create(*lis, *vrm);
vrm->grow();
vrm->assignVirt2StackSlot(newVReg, ss);
LiveInterval *newLI = &lis->getOrCreateInterval(newVReg);
newLI->weight = HUGE_VALF; newLI->weight = HUGE_VALF;
// Update the reg operands & kill flags. // Update the reg operands & kill flags.
for (unsigned i = 0; i < indices.size(); ++i) { for (unsigned i = 0; i < indices.size(); ++i) {
unsigned mopIdx = indices[i]; unsigned mopIdx = indices[i];
MachineOperand &mop = mi->getOperand(mopIdx); MachineOperand &mop = mi->getOperand(mopIdx);
mop.setReg(newVReg); mop.setReg(newLI->reg);
if (mop.isUse() && !mi->isRegTiedToDefOperand(mopIdx)) { if (mop.isUse() && !mi->isRegTiedToDefOperand(mopIdx)) {
mop.setIsKill(true); mop.setIsKill(true);
} }
@ -135,7 +133,7 @@ protected:
// Insert reload if necessary. // Insert reload if necessary.
MachineBasicBlock::iterator miItr(mi); MachineBasicBlock::iterator miItr(mi);
if (hasUse) { if (hasUse) {
tii->loadRegFromStackSlot(*mi->getParent(), miItr, newVReg, ss, trc, tii->loadRegFromStackSlot(*mi->getParent(), miItr, newLI->reg, ss, trc,
tri); tri);
MachineInstr *loadInstr(prior(miItr)); MachineInstr *loadInstr(prior(miItr));
SlotIndex loadIndex = SlotIndex loadIndex =
@ -148,7 +146,7 @@ protected:
// Insert store if necessary. // Insert store if necessary.
if (hasDef) { if (hasDef) {
tii->storeRegToStackSlot(*mi->getParent(), llvm::next(miItr), newVReg, tii->storeRegToStackSlot(*mi->getParent(), llvm::next(miItr),newLI->reg,
true, ss, trc, tri); true, ss, trc, tri);
MachineInstr *storeInstr(llvm::next(miItr)); MachineInstr *storeInstr(llvm::next(miItr));
SlotIndex storeIndex = SlotIndex storeIndex =
@ -158,8 +156,6 @@ protected:
newLI->getNextValue(beginIndex, lis->getVNInfoAllocator()); newLI->getNextValue(beginIndex, lis->getVNInfoAllocator());
newLI->addRange(LiveRange(beginIndex, storeIndex, storeVNI)); newLI->addRange(LiveRange(beginIndex, storeIndex, storeVNI));
} }
newIntervals.push_back(newLI);
} }
} }
}; };
@ -179,7 +175,7 @@ public:
void spill(LiveRangeEdit &LRE) { void spill(LiveRangeEdit &LRE) {
// Ignore spillIs - we don't use it. // Ignore spillIs - we don't use it.
trivialSpillEverywhere(&LRE.getParent(), *LRE.getNewVRegs()); trivialSpillEverywhere(LRE);
} }
}; };