Reuse live interval union between functions. This saves a bit of compile time

when compiling many small functions.

llvm-svn: 129321
This commit is contained in:
Jakob Stoklund Olesen 2011-04-11 23:57:14 +00:00
parent dc8bf9ec08
commit 507992e909
2 changed files with 11 additions and 4 deletions

View File

@ -95,6 +95,9 @@ public:
// Remove a live virtual register's segments from this union.
void extract(LiveInterval &VirtReg);
// Remove all inserted virtual registers.
void clear() { Segments.clear(); ++Tag; }
// Print union, using TRI to translate register names
void print(raw_ostream &OS, const TargetRegisterInfo *TRI) const;

View File

@ -235,9 +235,12 @@ void RegAllocBase::init(VirtRegMap &vrm, LiveIntervals &lis) {
MRI = &vrm.getRegInfo();
VRM = &vrm;
LIS = &lis;
PhysReg2LiveUnion.init(UnionAllocator, TRI->getNumRegs());
// Cache an interferece query for each physical reg
Queries.reset(new LiveIntervalUnion::Query[PhysReg2LiveUnion.numRegs()]);
const unsigned NumRegs = TRI->getNumRegs();
if (NumRegs != PhysReg2LiveUnion.numRegs()) {
PhysReg2LiveUnion.init(UnionAllocator, NumRegs);
// Cache an interferece query for each physical reg
Queries.reset(new LiveIntervalUnion::Query[PhysReg2LiveUnion.numRegs()]);
}
}
void RegAllocBase::LiveUnionArray::clear() {
@ -251,7 +254,8 @@ void RegAllocBase::LiveUnionArray::clear() {
}
void RegAllocBase::releaseMemory() {
PhysReg2LiveUnion.clear();
for (unsigned r = 0, e = PhysReg2LiveUnion.numRegs(); r != e; ++r)
PhysReg2LiveUnion[r].clear();
}
// Visit all the live registers. If they are already assigned to a physical