Changes in directory llvm/lib/CodeGen:
Passes.cpp updated: 1.18 -> 1.19 RegAllocLinearScan.cpp updated: 1.125 -> 1.126 RegAllocLocal.cpp updated: 1.83 -> 1.84 RegAllocSimple.cpp updated: 1.70 -> 1.71 --- Log message: Introducing plugable register allocators and instruction schedulers. --- Diffs of the changes: (+31 -57) Passes.cpp | 71 +++++++++---------------------------------------- RegAllocLinearScan.cpp | 5 +++ RegAllocLocal.cpp | 7 ++++ RegAllocSimple.cpp | 5 +++ 4 files changed, 31 insertions(+), 57 deletions(-) Index: llvm/lib/CodeGen/Passes.cpp diff -u llvm/lib/CodeGen/Passes.cpp:1.18 llvm/lib/CodeGen/Passes.cpp:1.19 --- llvm/lib/CodeGen/Passes.cpp:1.18 Thu Jul 27 15:05:00 2006 +++ llvm/lib/CodeGen/Passes.cpp Tue Aug 1 09:21:23 2006 @@ -12,74 +12,31 @@ // //===---------------------------------------------------------------------===// +#include "llvm/CodeGen/MachinePassRegistry.h" #include "llvm/CodeGen/Passes.h" -#include "llvm/Pass.h" #include "llvm/Support/CommandLine.h" #include <iostream> + using namespace llvm; namespace { - enum RegAllocName { simple, local, linearscan }; - - static cl::opt<RegAllocName> - RegAlloc( - "regalloc", - cl::desc("Register allocator to use: (default = linearscan)"), - cl::Prefix, - cl::values( - clEnumVal(simple, " simple register allocator"), - clEnumVal(local, " local register allocator"), - clEnumVal(linearscan, " linear scan register allocator"), - clEnumValEnd), - cl::init(linearscan)); -} - - -RegisterRegAlloc *RegisterRegAlloc::List = NULL; - -/// Find - Finds a register allocator in registration list. -/// -RegisterRegAlloc::FunctionPassCtor RegisterRegAlloc::Find(const char *N) { - for (RegisterRegAlloc *RA = List; RA; RA = RA->Next) { - if (strcmp(N, RA->Name) == 0) return RA->Ctor; - } - return NULL; -} - - -#ifndef NDEBUG -void RegisterRegAlloc::print() { - for (RegisterRegAlloc *RA = List; RA; RA = RA->Next) { - std::cerr << "RegAlloc:" << RA->Name << "\n"; - } + cl::opt<const char *, false, RegisterPassParser<RegisterRegAlloc> > + RegAlloc("regalloc", + cl::init("linearscan"), + cl::desc("Register allocator to use: (default = linearscan)")); } -#endif - - -static RegisterRegAlloc - simpleRegAlloc("simple", " simple register allocator", - createSimpleRegisterAllocator); - -static RegisterRegAlloc - localRegAlloc("local", " local register allocator", - createLocalRegisterAllocator); - -static RegisterRegAlloc - linearscanRegAlloc("linearscan", "linear scan register allocator", - createLinearScanRegisterAllocator); - FunctionPass *llvm::createRegisterAllocator() { - const char *Names[] = {"simple", "local", "linearscan"}; - const char *DefltName = "linearscan"; + RegisterRegAlloc::FunctionPassCtor Ctor = RegisterRegAlloc::getCache(); + + if (!Ctor) { + Ctor = RegisterRegAlloc::FindCtor(RegAlloc); + assert(Ctor && "No register allocator found"); + if (!Ctor) Ctor = RegisterRegAlloc::FirstCtor(); + RegisterRegAlloc::setCache(Ctor); + } - RegisterRegAlloc::FunctionPassCtor Ctor = - RegisterRegAlloc::Find(Names[RegAlloc]); - if (!Ctor) Ctor = RegisterRegAlloc::Find(DefltName); - assert(Ctor && "No register allocator found"); return Ctor(); } - - Index: llvm/lib/CodeGen/RegAllocLinearScan.cpp diff -u llvm/lib/CodeGen/RegAllocLinearScan.cpp:1.125 llvm/lib/CodeGen/RegAllocLinearScan.cpp:1.126 --- llvm/lib/CodeGen/RegAllocLinearScan.cpp:1.125 Thu Jul 20 12:28:38 2006 +++ llvm/lib/CodeGen/RegAllocLinearScan.cpp Tue Aug 1 09:21:23 2006 @@ -18,6 +18,7 @@ #include "llvm/Function.h" #include "llvm/CodeGen/MachineFunctionPass.h" #include "llvm/CodeGen/MachineInstr.h" +#include "llvm/CodeGen/MachinePassRegistry.h" #include "llvm/CodeGen/Passes.h" #include "llvm/CodeGen/SSARegMap.h" #include "llvm/Target/MRegisterInfo.h" @@ -42,6 +43,10 @@ static Statistic<> NumBacktracks ("regalloc", "Number of times we had to backtrack"); + static RegisterRegAlloc + linearscanRegAlloc("linearscan", " linear scan register allocator", + createLinearScanRegisterAllocator); + static unsigned numIterations = 0; static unsigned numIntervals = 0; Index: llvm/lib/CodeGen/RegAllocLocal.cpp diff -u llvm/lib/CodeGen/RegAllocLocal.cpp:1.83 llvm/lib/CodeGen/RegAllocLocal.cpp:1.84 --- llvm/lib/CodeGen/RegAllocLocal.cpp:1.83 Fri Jul 21 16:15:20 2006 +++ llvm/lib/CodeGen/RegAllocLocal.cpp Tue Aug 1 09:21:23 2006 @@ -18,6 +18,7 @@ #include "llvm/CodeGen/MachineInstr.h" #include "llvm/CodeGen/SSARegMap.h" #include "llvm/CodeGen/MachineFrameInfo.h" +#include "llvm/CodeGen/MachinePassRegistry.h" #include "llvm/CodeGen/LiveVariables.h" #include "llvm/Target/TargetInstrInfo.h" #include "llvm/Target/TargetMachine.h" @@ -35,6 +36,12 @@ static Statistic<> NumLoads ("ra-local", "Number of loads added"); static Statistic<> NumFolded("ra-local", "Number of loads/stores folded " "into instructions"); + + static RegisterRegAlloc + localRegAlloc("local", " local register allocator", + createLocalRegisterAllocator); + + class VISIBILITY_HIDDEN RA : public MachineFunctionPass { const TargetMachine *TM; MachineFunction *MF; Index: llvm/lib/CodeGen/RegAllocSimple.cpp diff -u llvm/lib/CodeGen/RegAllocSimple.cpp:1.70 llvm/lib/CodeGen/RegAllocSimple.cpp:1.71 --- llvm/lib/CodeGen/RegAllocSimple.cpp:1.70 Fri Jul 21 16:15:20 2006 +++ llvm/lib/CodeGen/RegAllocSimple.cpp Tue Aug 1 09:21:23 2006 @@ -20,6 +20,7 @@ #include "llvm/CodeGen/MachineInstr.h" #include "llvm/CodeGen/SSARegMap.h" #include "llvm/CodeGen/MachineFrameInfo.h" +#include "llvm/CodeGen/MachinePassRegistry.h" #include "llvm/Target/TargetInstrInfo.h" #include "llvm/Target/TargetMachine.h" #include "llvm/Support/Debug.h" @@ -33,6 +34,10 @@ static Statistic<> NumStores("ra-simple", "Number of stores added"); static Statistic<> NumLoads ("ra-simple", "Number of loads added"); + static RegisterRegAlloc + simpleRegAlloc("simple", " simple register allocator", + createSimpleRegisterAllocator); + class VISIBILITY_HIDDEN RegAllocSimple : public MachineFunctionPass { MachineFunction *MF; const TargetMachine *TM; _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits