mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-25 04:39:44 +00:00
Add LiveInterval::RenumberValues - Garbage collection for VNInfos.
After heavy editing of a live interval, it is much easier to simply renumber the live values instead of trying to keep track of the unused ones. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110463 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
90c579de5a
commit
23436597a8
@ -336,6 +336,10 @@ namespace llvm {
|
||||
return VNI;
|
||||
}
|
||||
|
||||
/// RenumberValues - Renumber all values in order of appearance and remove
|
||||
/// unused values.
|
||||
void RenumberValues();
|
||||
|
||||
/// isOnlyLROfValNo - Return true if the specified live range is the only
|
||||
/// one defined by the its val#.
|
||||
bool isOnlyLROfValNo(const LiveRange *LR) {
|
||||
|
@ -180,6 +180,21 @@ void LiveInterval::markValNoForDeletion(VNInfo *ValNo) {
|
||||
}
|
||||
}
|
||||
|
||||
/// RenumberValues - Renumber all values in order of appearance and delete the
|
||||
/// remaining unused values.
|
||||
void LiveInterval::RenumberValues() {
|
||||
SmallPtrSet<VNInfo*, 8> Seen;
|
||||
valnos.clear();
|
||||
for (const_iterator I = begin(), E = end(); I != E; ++I) {
|
||||
VNInfo *VNI = I->valno;
|
||||
if (!Seen.insert(VNI))
|
||||
continue;
|
||||
assert(!VNI->isUnused() && "Unused valno used by live range");
|
||||
VNI->id = (unsigned)valnos.size();
|
||||
valnos.push_back(VNI);
|
||||
}
|
||||
}
|
||||
|
||||
/// extendIntervalEndTo - This method is used when we want to extend the range
|
||||
/// specified by I to end at the specified endpoint. To do this, we should
|
||||
/// merge and eliminate all ranges that this will overlap with. The iterator is
|
||||
|
@ -553,8 +553,10 @@ void SplitEditor::rewrite() {
|
||||
}
|
||||
|
||||
// dupli_ goes in last, after rewriting.
|
||||
if (dupli_)
|
||||
if (dupli_) {
|
||||
dupli_->RenumberValues();
|
||||
intervals_.push_back(dupli_);
|
||||
}
|
||||
|
||||
// FIXME: *Calculate spill weights, allocation hints, and register classes for
|
||||
// firstInterval..
|
||||
|
Loading…
Reference in New Issue
Block a user