diff options
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/include/llvm/CodeGen/RegAllocRegistry.h | 28 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/TargetPassConfig.cpp | 4 |
2 files changed, 20 insertions, 12 deletions
diff --git a/llvm/include/llvm/CodeGen/RegAllocRegistry.h b/llvm/include/llvm/CodeGen/RegAllocRegistry.h index 7077aa30450..9a63674689b 100644 --- a/llvm/include/llvm/CodeGen/RegAllocRegistry.h +++ b/llvm/include/llvm/CodeGen/RegAllocRegistry.h @@ -22,29 +22,30 @@ class FunctionPass; //===----------------------------------------------------------------------===// /// -/// RegisterRegAlloc class - Track the registration of register allocators. +/// RegisterRegAllocBase class - Track the registration of register allocators. /// //===----------------------------------------------------------------------===// -class RegisterRegAlloc : public MachinePassRegistryNode<FunctionPass *(*)()> { +template <class SubClass> +class RegisterRegAllocBase : public MachinePassRegistryNode<FunctionPass *(*)()> { public: using FunctionPassCtor = FunctionPass *(*)(); static MachinePassRegistry<FunctionPassCtor> Registry; - RegisterRegAlloc(const char *N, const char *D, FunctionPassCtor C) + RegisterRegAllocBase(const char *N, const char *D, FunctionPassCtor C) : MachinePassRegistryNode(N, D, C) { Registry.Add(this); } - ~RegisterRegAlloc() { Registry.Remove(this); } + ~RegisterRegAllocBase() { Registry.Remove(this); } // Accessors. - RegisterRegAlloc *getNext() const { - return (RegisterRegAlloc *)MachinePassRegistryNode::getNext(); + SubClass *getNext() const { + return static_cast<SubClass *>(MachinePassRegistryNode::getNext()); } - static RegisterRegAlloc *getList() { - return (RegisterRegAlloc *)Registry.getList(); + static SubClass *getList() { + return static_cast<SubClass *>(Registry.getList()); } static FunctionPassCtor getDefault() { return Registry.getDefault(); } @@ -56,6 +57,17 @@ public: } }; +class RegisterRegAlloc : public RegisterRegAllocBase<RegisterRegAlloc> { +public: + RegisterRegAlloc(const char *N, const char *D, FunctionPassCtor C) + : RegisterRegAllocBase(N, D, C) {} +}; + +/// RegisterRegAlloc's global Registry tracks allocator registration. +template <class T> +MachinePassRegistry<RegisterRegAlloc::FunctionPassCtor> +RegisterRegAllocBase<T>::Registry; + } // end namespace llvm #endif // LLVM_CODEGEN_REGALLOCREGISTRY_H diff --git a/llvm/lib/CodeGen/TargetPassConfig.cpp b/llvm/lib/CodeGen/TargetPassConfig.cpp index 85c00119114..399f69680af 100644 --- a/llvm/lib/CodeGen/TargetPassConfig.cpp +++ b/llvm/lib/CodeGen/TargetPassConfig.cpp @@ -1038,10 +1038,6 @@ bool TargetPassConfig::getOptimizeRegAlloc() const { llvm_unreachable("Invalid optimize-regalloc state"); } -/// RegisterRegAlloc's global Registry tracks allocator registration. -MachinePassRegistry<RegisterRegAlloc::FunctionPassCtor> - RegisterRegAlloc::Registry; - /// A dummy default pass factory indicates whether the register allocator is /// overridden on the command line. static llvm::once_flag InitializeDefaultRegisterAllocatorFlag; |

