diff options
author | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2012-06-20 22:52:24 +0000 |
---|---|---|
committer | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2012-06-20 22:52:24 +0000 |
commit | 03b87d5aaaa2399b9a537b6455bf564586894ff8 (patch) | |
tree | 0bcc35d9ac0690f933100a654ea2365268476378 /llvm/lib/CodeGen/RegAllocBase.cpp | |
parent | effc6b2d18b23880b68ed306d04090909a1e4032 (diff) | |
download | bcm5719-llvm-03b87d5aaaa2399b9a537b6455bf564586894ff8.tar.gz bcm5719-llvm-03b87d5aaaa2399b9a537b6455bf564586894ff8.zip |
Convert RABasic to using LiveRegMatrix interference checking.
Stop using the LiveIntervalUnions provided by RegAllocBase, they will be
removed soon.
llvm-svn: 158866
Diffstat (limited to 'llvm/lib/CodeGen/RegAllocBase.cpp')
-rw-r--r-- | llvm/lib/CodeGen/RegAllocBase.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/RegAllocBase.cpp b/llvm/lib/CodeGen/RegAllocBase.cpp index f4774dcab09..1f824a8fdbf 100644 --- a/llvm/lib/CodeGen/RegAllocBase.cpp +++ b/llvm/lib/CodeGen/RegAllocBase.cpp @@ -14,6 +14,7 @@ #define DEBUG_TYPE "regalloc" #include "RegAllocBase.h" +#include "LiveRegMatrix.h" #include "Spiller.h" #include "VirtRegMap.h" #include "llvm/ADT/Statistic.h" @@ -134,6 +135,11 @@ void RegAllocBase::seedLiveRegs() { } void RegAllocBase::assign(LiveInterval &VirtReg, unsigned PhysReg) { + // FIXME: This diversion is temporary. + if (Matrix) { + Matrix->assign(VirtReg, PhysReg); + return; + } DEBUG(dbgs() << "assigning " << PrintReg(VirtReg.reg, TRI) << " to " << PrintReg(PhysReg, TRI) << '\n'); assert(!VRM->hasPhys(VirtReg.reg) && "Duplicate VirtReg assignment"); @@ -144,6 +150,11 @@ void RegAllocBase::assign(LiveInterval &VirtReg, unsigned PhysReg) { } void RegAllocBase::unassign(LiveInterval &VirtReg, unsigned PhysReg) { + // FIXME: This diversion is temporary. + if (Matrix) { + Matrix->unassign(VirtReg); + return; + } DEBUG(dbgs() << "unassigning " << PrintReg(VirtReg.reg, TRI) << " from " << PrintReg(PhysReg, TRI) << '\n'); assert(VRM->getPhys(VirtReg.reg) == PhysReg && "Inconsistent unassign"); @@ -170,6 +181,8 @@ void RegAllocBase::allocatePhysRegs() { // Invalidate all interference queries, live ranges could have changed. invalidateVirtRegs(); + if (Matrix) + Matrix->invalidateVirtRegs(); // selectOrSplit requests the allocator to return an available physical // register if possible and populate a list of new live intervals that |