diff options
author | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2012-06-05 23:57:30 +0000 |
---|---|---|
committer | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2012-06-05 23:57:30 +0000 |
commit | 0e5a60b4ebc06a4fe6bb58f0200acf130d7be685 (patch) | |
tree | 8e5b642a02bf98a805655d150272c6a37fd0fad7 /lib/CodeGen/RegAllocBase.cpp | |
parent | 2fd0923593c4d30691a45ade1e8b0bd484896c3f (diff) |
Move LiveUnionArray into LiveIntervalUnion.h
It is useful outside RegAllocBase.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@158041 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/RegAllocBase.cpp')
-rw-r--r-- | lib/CodeGen/RegAllocBase.cpp | 34 |
1 files changed, 8 insertions, 26 deletions
diff --git a/lib/CodeGen/RegAllocBase.cpp b/lib/CodeGen/RegAllocBase.cpp index 5b2ec5e5aa..3349b4448c 100644 --- a/lib/CodeGen/RegAllocBase.cpp +++ b/lib/CodeGen/RegAllocBase.cpp @@ -52,10 +52,11 @@ bool RegAllocBase::VerifyEnabled = false; void RegAllocBase::verify() { LiveVirtRegBitSet VisitedVRegs; OwningArrayPtr<LiveVirtRegBitSet> - unionVRegs(new LiveVirtRegBitSet[PhysReg2LiveUnion.numRegs()]); + unionVRegs(new LiveVirtRegBitSet[TRI->getNumRegs()]); // Verify disjoint unions. - for (unsigned PhysReg = 0; PhysReg < PhysReg2LiveUnion.numRegs(); ++PhysReg) { + for (unsigned PhysReg = 0, NumRegs = TRI->getNumRegs(); PhysReg != NumRegs; + ++PhysReg) { DEBUG(PhysReg2LiveUnion[PhysReg].print(dbgs(), TRI)); LiveVirtRegBitSet &VRegs = unionVRegs[PhysReg]; PhysReg2LiveUnion[PhysReg].verify(VRegs); @@ -89,16 +90,6 @@ void RegAllocBase::verify() { // RegAllocBase Implementation //===----------------------------------------------------------------------===// -// Instantiate a LiveIntervalUnion for each physical register. -void RegAllocBase::LiveUnionArray::init(LiveIntervalUnion::Allocator &allocator, - unsigned NRegs) { - NumRegs = NRegs; - Array = - static_cast<LiveIntervalUnion*>(malloc(sizeof(LiveIntervalUnion)*NRegs)); - for (unsigned r = 0; r != NRegs; ++r) - new(Array + r) LiveIntervalUnion(allocator); -} - void RegAllocBase::init(VirtRegMap &vrm, LiveIntervals &lis) { NamedRegionTimer T("Initialize", TimerGroupName, TimePassesIsEnabled); TRI = &vrm.getTargetRegInfo(); @@ -109,25 +100,15 @@ void RegAllocBase::init(VirtRegMap &vrm, LiveIntervals &lis) { RegClassInfo.runOnMachineFunction(vrm.getMachineFunction()); const unsigned NumRegs = TRI->getNumRegs(); - if (NumRegs != PhysReg2LiveUnion.numRegs()) { + if (NumRegs != PhysReg2LiveUnion.size()) { PhysReg2LiveUnion.init(UnionAllocator, NumRegs); // Cache an interferece query for each physical reg - Queries.reset(new LiveIntervalUnion::Query[PhysReg2LiveUnion.numRegs()]); + Queries.reset(new LiveIntervalUnion::Query[NumRegs]); } } -void RegAllocBase::LiveUnionArray::clear() { - if (!Array) - return; - for (unsigned r = 0; r != NumRegs; ++r) - Array[r].~LiveIntervalUnion(); - free(Array); - NumRegs = 0; - Array = 0; -} - void RegAllocBase::releaseMemory() { - for (unsigned r = 0, e = PhysReg2LiveUnion.numRegs(); r != e; ++r) + for (unsigned r = 0, e = PhysReg2LiveUnion.size(); r != e; ++r) PhysReg2LiveUnion[r].clear(); } @@ -253,7 +234,8 @@ void RegAllocBase::addMBBLiveIns(MachineFunction *MF) { return; LiveIntervalUnion::SegmentIter SI; - for (unsigned PhysReg = 0; PhysReg < PhysReg2LiveUnion.numRegs(); ++PhysReg) { + for (unsigned PhysReg = 0, NumRegs = TRI->getNumRegs(); PhysReg != NumRegs; + ++PhysReg) { LiveIntervalUnion &LiveUnion = PhysReg2LiveUnion[PhysReg]; if (LiveUnion.empty()) continue; |