1 //===- llvm/CodeGen/RegAllocRegistry.h --------------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This file contains the implementation for register allocator function 11 // pass registry (RegisterRegAlloc). 12 // 13 //===----------------------------------------------------------------------===// 14 15 #ifndef LLVM_CODEGEN_REGALLOCREGISTRY_H 16 #define LLVM_CODEGEN_REGALLOCREGISTRY_H 17 18 #include "llvm/CodeGen/MachinePassRegistry.h" 19 20 namespace llvm { 21 22 class FunctionPass; 23 24 //===----------------------------------------------------------------------===// 25 /// 26 /// RegisterRegAlloc class - Track the registration of register allocators. 27 /// 28 //===----------------------------------------------------------------------===// 29 class RegisterRegAlloc : public MachinePassRegistryNode { 30 public: 31 using FunctionPassCtor = FunctionPass *(*)(); 32 33 static MachinePassRegistry Registry; 34 35 RegisterRegAlloc(const char *N, const char *D, FunctionPassCtor C) 36 : MachinePassRegistryNode(N, D, (MachinePassCtor)C) { 37 Registry.Add(this); 38 } 39 40 ~RegisterRegAlloc() { Registry.Remove(this); } 41 42 // Accessors. 43 RegisterRegAlloc *getNext() const { 44 return (RegisterRegAlloc *)MachinePassRegistryNode::getNext(); 45 } 46 47 static RegisterRegAlloc *getList() { 48 return (RegisterRegAlloc *)Registry.getList(); 49 } 50 51 static FunctionPassCtor getDefault() { 52 return (FunctionPassCtor)Registry.getDefault(); 53 } 54 55 static void setDefault(FunctionPassCtor C) { 56 Registry.setDefault((MachinePassCtor)C); 57 } 58 59 static void setListener(MachinePassRegistryListener *L) { 60 Registry.setListener(L); 61 } 62 }; 63 64 } // end namespace llvm 65 66 #endif // LLVM_CODEGEN_REGALLOCREGISTRY_H 67