Home | History | Annotate | Download | only in CodeGen
      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