1193323Sed//===-- llvm/CodeGen/RegAllocRegistry.h -------------------------*- C++ -*-===//
2193323Sed//
3193323Sed//                     The LLVM Compiler Infrastructure
4193323Sed//
5193323Sed// This file is distributed under the University of Illinois Open Source
6193323Sed// License. See LICENSE.TXT for details.
7193323Sed//
8193323Sed//===----------------------------------------------------------------------===//
9193323Sed//
10193323Sed// This file contains the implementation for register allocator function
11193323Sed// pass registry (RegisterRegAlloc).
12193323Sed//
13193323Sed//===----------------------------------------------------------------------===//
14193323Sed
15249423Sdim#ifndef LLVM_CODEGEN_REGALLOCREGISTRY_H
16249423Sdim#define LLVM_CODEGEN_REGALLOCREGISTRY_H
17193323Sed
18193323Sed#include "llvm/CodeGen/MachinePassRegistry.h"
19193323Sed
20193323Sednamespace llvm {
21193323Sed
22193323Sed//===----------------------------------------------------------------------===//
23193323Sed///
24193323Sed/// RegisterRegAlloc class - Track the registration of register allocators.
25193323Sed///
26193323Sed//===----------------------------------------------------------------------===//
27193323Sedclass RegisterRegAlloc : public MachinePassRegistryNode {
28193323Sed
29193323Sedpublic:
30193323Sed
31193323Sed  typedef FunctionPass *(*FunctionPassCtor)();
32193323Sed
33193323Sed  static MachinePassRegistry Registry;
34193323Sed
35193323Sed  RegisterRegAlloc(const char *N, const char *D, FunctionPassCtor C)
36193323Sed  : MachinePassRegistryNode(N, D, (MachinePassCtor)C)
37198090Srdivacky  {
38198090Srdivacky     Registry.Add(this);
39198090Srdivacky  }
40193323Sed  ~RegisterRegAlloc() { Registry.Remove(this); }
41193323Sed
42193323Sed
43193323Sed  // Accessors.
44193323Sed  //
45193323Sed  RegisterRegAlloc *getNext() const {
46193323Sed    return (RegisterRegAlloc *)MachinePassRegistryNode::getNext();
47193323Sed  }
48193323Sed  static RegisterRegAlloc *getList() {
49193323Sed    return (RegisterRegAlloc *)Registry.getList();
50193323Sed  }
51193323Sed  static FunctionPassCtor getDefault() {
52193323Sed    return (FunctionPassCtor)Registry.getDefault();
53193323Sed  }
54193323Sed  static void setDefault(FunctionPassCtor C) {
55193323Sed    Registry.setDefault((MachinePassCtor)C);
56193323Sed  }
57193323Sed  static void setListener(MachinePassRegistryListener *L) {
58193323Sed    Registry.setListener(L);
59193323Sed  }
60193323Sed
61193323Sed};
62193323Sed
63193323Sed} // end namespace llvm
64193323Sed
65193323Sed
66193323Sed#endif
67