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 20namespace llvm { 21 22//===----------------------------------------------------------------------===// 23/// 24/// RegisterRegAlloc class - Track the registration of register allocators. 25/// 26//===----------------------------------------------------------------------===// 27class RegisterRegAlloc : public MachinePassRegistryNode { 28 29public: 30 31 typedef FunctionPass *(*FunctionPassCtor)(); 32 33 static MachinePassRegistry Registry; 34 35 RegisterRegAlloc(const char *N, const char *D, FunctionPassCtor C) 36 : MachinePassRegistryNode(N, D, (MachinePassCtor)C) 37 { 38 Registry.Add(this); 39 } 40 ~RegisterRegAlloc() { Registry.Remove(this); } 41 42 43 // Accessors. 44 // 45 RegisterRegAlloc *getNext() const { 46 return (RegisterRegAlloc *)MachinePassRegistryNode::getNext(); 47 } 48 static RegisterRegAlloc *getList() { 49 return (RegisterRegAlloc *)Registry.getList(); 50 } 51 static FunctionPassCtor getDefault() { 52 return (FunctionPassCtor)Registry.getDefault(); 53 } 54 static void setDefault(FunctionPassCtor C) { 55 Registry.setDefault((MachinePassCtor)C); 56 } 57 static void setListener(MachinePassRegistryListener *L) { 58 Registry.setListener(L); 59 } 60 61}; 62 63} // end namespace llvm 64 65 66#endif 67