Changes in directory llvm/include/llvm:
PassSupport.h updated: 1.24 -> 1.25 --- Log message: Working toward registration of register allocators. --- Diffs of the changes: (+70 -0) PassSupport.h | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 70 insertions(+) Index: llvm/include/llvm/PassSupport.h diff -u llvm/include/llvm/PassSupport.h:1.24 llvm/include/llvm/PassSupport.h:1.25 --- llvm/include/llvm/PassSupport.h:1.24 Wed Jul 26 11:18:00 2006 +++ llvm/include/llvm/PassSupport.h Thu Jul 27 15:04:59 2006 @@ -368,6 +368,76 @@ virtual void passEnumerate(const PassInfo *P) {} }; + +//===---------------------------------------------------------------------===// +/// +/// RegisterRegAlloc class - Track the registration of register allocators. +/// +class RegisterRegAlloc { + +public: + + typedef FunctionPass *(*FunctionPassCtor)(); + +private: + + static RegisterRegAlloc *List; // Linked list of register allocators. + + RegisterRegAlloc *Next; // Next allocation scheme in list. + const char *Name; // Name of register allocator. + const char *Description; // Description string. + FunctionPassCtor Ctor; // Function to construct register + // allocator pass. +public: + + RegisterRegAlloc(const char *N, const char *D, FunctionPassCtor C) + : Name(N) + , Description(D) + , Ctor(C) { + Add(); + } + + ~RegisterRegAlloc() { + Remove(); + } + + + // Accessors + const char *getName() const { return Name; } + const char *getDescription() const { return Description; } + FunctionPassCtor getCtor() const { return Ctor; } + + + /// Add - Adds a register allocator to the registration list. + /// + void Add() { + Next = List; + List = this; + } + + + /// Remove - Removes a register allocator from the registration list. + /// + void Remove() { + for (RegisterRegAlloc **RA = &List; *RA; RA = &(*RA)->Next) { + if (*RA == this) { + *RA = Next; + break; + } + } + } + + + /// Find - Finds a register allocator in registration list. + /// + static FunctionPassCtor Find(const char *N); + +#ifndef NDEBUG + static void print(); +#endif +}; + + } // End llvm namespace #endif _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits