forked from OSchip/llvm-project
[CodeGen] Remove EvictionTrack (NFC)
The last of getEvictor use was removed on Jun 5, 2022 in commit
5c06f7168f
, which was itself a patch to
remove unused code.
Once we remove getEvictor, EvictionTrack becomes a write-only data
structure. The data in it won't affect compilation, so the entire
class is essentially dead.
This commit is contained in:
parent
35aaf54823
commit
23d9ca10ae
|
@ -479,8 +479,6 @@ void RAGreedy::evictInterference(const LiveInterval &VirtReg,
|
|||
if (!VRM->hasPhys(Intf->reg()))
|
||||
continue;
|
||||
|
||||
LastEvicted.addEviction(PhysReg, VirtReg.reg(), Intf->reg());
|
||||
|
||||
Matrix->unassign(*Intf);
|
||||
assert((ExtraInfo->getCascade(Intf->reg()) < Cascade ||
|
||||
VirtReg.isSpillable() < Intf->isSpillable()) &&
|
||||
|
@ -2235,8 +2233,6 @@ MCRegister RAGreedy::selectOrSplitImpl(const LiveInterval &VirtReg,
|
|||
AllocationOrder::create(VirtReg.reg(), *VRM, RegClassInfo, Matrix);
|
||||
if (MCRegister PhysReg =
|
||||
tryAssign(VirtReg, Order, NewVRegs, FixedRegisters)) {
|
||||
// If VirtReg got an assignment, the eviction info is no longer relevant.
|
||||
LastEvicted.clearEvicteeInfo(VirtReg.reg());
|
||||
// When NewVRegs is not empty, we may have made decisions such as evicting
|
||||
// a virtual register, go with the earlier decisions and use the physical
|
||||
// register.
|
||||
|
@ -2271,9 +2267,6 @@ MCRegister RAGreedy::selectOrSplitImpl(const LiveInterval &VirtReg,
|
|||
// copy-related live-ranges.
|
||||
if (Hint && Hint != PhysReg)
|
||||
SetOfBrokenHints.insert(&VirtReg);
|
||||
// If VirtReg eviction someone, the eviction info for it as an evictee is
|
||||
// no longer relevant.
|
||||
LastEvicted.clearEvicteeInfo(VirtReg.reg());
|
||||
return PhysReg;
|
||||
}
|
||||
|
||||
|
@ -2293,11 +2286,8 @@ MCRegister RAGreedy::selectOrSplitImpl(const LiveInterval &VirtReg,
|
|||
// Try splitting VirtReg or interferences.
|
||||
unsigned NewVRegSizeBefore = NewVRegs.size();
|
||||
Register PhysReg = trySplit(VirtReg, Order, NewVRegs, FixedRegisters);
|
||||
if (PhysReg || (NewVRegs.size() - NewVRegSizeBefore)) {
|
||||
// If VirtReg got split, the eviction info is no longer relevant.
|
||||
LastEvicted.clearEvicteeInfo(VirtReg.reg());
|
||||
if (PhysReg || (NewVRegs.size() - NewVRegSizeBefore))
|
||||
return PhysReg;
|
||||
}
|
||||
}
|
||||
|
||||
// If we couldn't allocate a register from spilling, there is probably some
|
||||
|
@ -2545,7 +2535,6 @@ bool RAGreedy::runOnMachineFunction(MachineFunction &mf) {
|
|||
IntfCache.init(MF, Matrix->getLiveUnions(), Indexes, LIS, TRI);
|
||||
GlobalCand.resize(32); // This will grow as needed.
|
||||
SetOfBrokenHints.clear();
|
||||
LastEvicted.clear();
|
||||
|
||||
allocatePhysRegs();
|
||||
tryHintsRecoloring();
|
||||
|
|
|
@ -203,57 +203,6 @@ private:
|
|||
static const char *const StageName[];
|
||||
#endif
|
||||
|
||||
/// EvictionTrack - Keeps track of past evictions in order to optimize region
|
||||
/// split decision.
|
||||
class EvictionTrack {
|
||||
|
||||
public:
|
||||
using EvictorInfo =
|
||||
std::pair<Register /* evictor */, MCRegister /* physreg */>;
|
||||
using EvicteeInfo = llvm::DenseMap<Register /* evictee */, EvictorInfo>;
|
||||
|
||||
private:
|
||||
/// Each Vreg that has been evicted in the last stage of selectOrSplit will
|
||||
/// be mapped to the evictor Vreg and the PhysReg it was evicted from.
|
||||
EvicteeInfo Evictees;
|
||||
|
||||
public:
|
||||
/// Clear all eviction information.
|
||||
void clear() { Evictees.clear(); }
|
||||
|
||||
/// Clear eviction information for the given evictee Vreg.
|
||||
/// E.g. when Vreg get's a new allocation, the old eviction info is no
|
||||
/// longer relevant.
|
||||
/// \param Evictee The evictee Vreg for whom we want to clear collected
|
||||
/// eviction info.
|
||||
void clearEvicteeInfo(Register Evictee) { Evictees.erase(Evictee); }
|
||||
|
||||
/// Track new eviction.
|
||||
/// The Evictor vreg has evicted the Evictee vreg from Physreg.
|
||||
/// \param PhysReg The physical register Evictee was evicted from.
|
||||
/// \param Evictor The evictor Vreg that evicted Evictee.
|
||||
/// \param Evictee The evictee Vreg.
|
||||
void addEviction(MCRegister PhysReg, Register Evictor, Register Evictee) {
|
||||
Evictees[Evictee].first = Evictor;
|
||||
Evictees[Evictee].second = PhysReg;
|
||||
}
|
||||
|
||||
/// Return the Evictor Vreg which evicted Evictee Vreg from PhysReg.
|
||||
/// \param Evictee The evictee vreg.
|
||||
/// \return The Evictor vreg which evicted Evictee vreg from PhysReg. 0 if
|
||||
/// nobody has evicted Evictee from PhysReg.
|
||||
EvictorInfo getEvictor(Register Evictee) {
|
||||
if (Evictees.count(Evictee)) {
|
||||
return Evictees[Evictee];
|
||||
}
|
||||
|
||||
return EvictorInfo(0, 0);
|
||||
}
|
||||
};
|
||||
|
||||
// Keeps track of past evictions in order to optimize region split decision.
|
||||
EvictionTrack LastEvicted;
|
||||
|
||||
// splitting state.
|
||||
std::unique_ptr<SplitAnalysis> SA;
|
||||
std::unique_ptr<SplitEditor> SE;
|
||||
|
|
Loading…
Reference in New Issue