mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-21 03:32:21 +00:00
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:
parent
489d679271
commit
1485455be0
@ -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);
|
||||||
|
@ -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&);
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user