1 //===-- llvm/CodeGen/SchedulerRegistry.h ------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file was developed by the James M. Laskey and is distributed under
6 // the University of Illinois Open Source License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file contains the implementation for instruction scheduler function
11 // pass registry (RegisterScheduler).
13 //===----------------------------------------------------------------------===//
15 #ifndef LLVM_CODEGENSCHEDULERREGISTRY_H
16 #define LLVM_CODEGENSCHEDULERREGISTRY_H
18 #include "llvm/CodeGen/MachinePassRegistry.h"
22 //===----------------------------------------------------------------------===//
24 /// RegisterScheduler class - Track the registration of instruction schedulers.
26 //===----------------------------------------------------------------------===//
28 class SelectionDAGISel;
31 class MachineBasicBlock;
33 class RegisterScheduler : public MachinePassRegistryNode {
37 typedef ScheduleDAG *(*FunctionPassCtor)(SelectionDAGISel*, SelectionDAG*,
40 static MachinePassRegistry Registry;
42 RegisterScheduler(const char *N, const char *D, FunctionPassCtor C)
43 : MachinePassRegistryNode(N, D, (MachinePassCtor)C)
44 { Registry.Add(this); }
45 ~RegisterScheduler() { Registry.Remove(this); }
50 RegisterScheduler *getNext() const {
51 return (RegisterScheduler *)MachinePassRegistryNode::getNext();
53 static RegisterScheduler *getList() {
54 return (RegisterScheduler *)Registry.getList();
56 static FunctionPassCtor getDefault() {
57 return (FunctionPassCtor)Registry.getDefault();
59 static void setDefault(FunctionPassCtor C) {
60 Registry.setDefault((MachinePassCtor)C);
62 static void setListener(MachinePassRegistryListener *L) {
63 Registry.setListener(L);
68 } // end namespace llvm