blob: 481747dc163eea6a997e9b6e82b62580fc429c33 [file] [log] [blame]
Andrew Scull5e1ddfa2018-08-14 10:06:54 +01001//===- 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
22class FunctionPass;
23
24//===----------------------------------------------------------------------===//
25///
26/// RegisterRegAlloc class - Track the registration of register allocators.
27///
28//===----------------------------------------------------------------------===//
29class RegisterRegAlloc : public MachinePassRegistryNode {
30public:
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