LLVM API Documentation

SchedulerRegistry.h

Go to the documentation of this file.
00001 //===-- llvm/CodeGen/SchedulerRegistry.h ------------------------*- C++ -*-===//
00002 //
00003 //                     The LLVM Compiler Infrastructure
00004 //
00005 // This file is distributed under the University of Illinois Open Source
00006 // License. See LICENSE.TXT for details.
00007 //
00008 //===----------------------------------------------------------------------===//
00009 //
00010 // This file contains the implementation for instruction scheduler function
00011 // pass registry (RegisterScheduler).
00012 //
00013 //===----------------------------------------------------------------------===//
00014 
00015 #ifndef LLVM_CODEGENSCHEDULERREGISTRY_H
00016 #define LLVM_CODEGENSCHEDULERREGISTRY_H
00017 
00018 #include "llvm/CodeGen/MachinePassRegistry.h"
00019 
00020 namespace llvm {
00021 
00022 //===----------------------------------------------------------------------===//
00023 ///
00024 /// RegisterScheduler class - Track the registration of instruction schedulers.
00025 ///
00026 //===----------------------------------------------------------------------===//
00027 
00028 class SelectionDAGISel;
00029 class ScheduleDAG;
00030 class SelectionDAG;
00031 class MachineBasicBlock;
00032 
00033 class RegisterScheduler : public MachinePassRegistryNode {
00034 public:
00035   typedef ScheduleDAG *(*FunctionPassCtor)(SelectionDAGISel*, bool);
00036 
00037   static MachinePassRegistry Registry;
00038 
00039   RegisterScheduler(const char *N, const char *D, FunctionPassCtor C)
00040   : MachinePassRegistryNode(N, D, (MachinePassCtor)C)
00041   { Registry.Add(this); }
00042   ~RegisterScheduler() { Registry.Remove(this); }
00043   
00044 
00045   // Accessors.
00046   //
00047   RegisterScheduler *getNext() const {
00048     return (RegisterScheduler *)MachinePassRegistryNode::getNext();
00049   }
00050   static RegisterScheduler *getList() {
00051     return (RegisterScheduler *)Registry.getList();
00052   }
00053   static FunctionPassCtor getDefault() {
00054     return (FunctionPassCtor)Registry.getDefault();
00055   }
00056   static void setDefault(FunctionPassCtor C) {
00057     Registry.setDefault((MachinePassCtor)C);
00058   }
00059   static void setListener(MachinePassRegistryListener *L) {
00060     Registry.setListener(L);
00061   }
00062 };
00063 
00064 /// createBURRListDAGScheduler - This creates a bottom up register usage
00065 /// reduction list scheduler.
00066 ScheduleDAG* createBURRListDAGScheduler(SelectionDAGISel *IS,
00067                                         bool Fast);
00068 
00069 /// createTDRRListDAGScheduler - This creates a top down register usage
00070 /// reduction list scheduler.
00071 ScheduleDAG* createTDRRListDAGScheduler(SelectionDAGISel *IS,
00072                                         bool Fast);
00073 
00074 /// createTDListDAGScheduler - This creates a top-down list scheduler with
00075 /// a hazard recognizer.
00076 ScheduleDAG* createTDListDAGScheduler(SelectionDAGISel *IS,
00077                                       bool Fast);
00078 
00079 /// createFastDAGScheduler - This creates a "fast" scheduler.
00080 ///
00081 ScheduleDAG *createFastDAGScheduler(SelectionDAGISel *IS,
00082                                     bool Fast);
00083 
00084 /// createDefaultScheduler - This creates an instruction scheduler appropriate
00085 /// for the target.
00086 ScheduleDAG* createDefaultScheduler(SelectionDAGISel *IS,
00087                                     bool Fast);
00088 
00089 } // end namespace llvm
00090 
00091 #endif