From 03b87d5aaaa2399b9a537b6455bf564586894ff8 Mon Sep 17 00:00:00 2001 From: Jakob Stoklund Olesen Date: Wed, 20 Jun 2012 22:52:24 +0000 Subject: Convert RABasic to using LiveRegMatrix interference checking. Stop using the LiveIntervalUnions provided by RegAllocBase, they will be removed soon. llvm-svn: 158866 --- llvm/lib/CodeGen/RegAllocBase.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'llvm/lib/CodeGen/RegAllocBase.cpp') 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 -- cgit v1.2.3