mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-01 08:23:21 +01:00
7e48e82adb
instruction index across each part. Instruction indices are used to make live range queries, and live ranges can extend beyond scheduling region boundaries. Refactor the ScheduleDAGSDNodes class some more so that it doesn't have to worry about this additional information. llvm-svn: 64288
92 lines
3.0 KiB
C++
92 lines
3.0 KiB
C++
//===-- llvm/CodeGen/SchedulerRegistry.h ------------------------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file contains the implementation for instruction scheduler function
|
|
// pass registry (RegisterScheduler).
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_CODEGENSCHEDULERREGISTRY_H
|
|
#define LLVM_CODEGENSCHEDULERREGISTRY_H
|
|
|
|
#include "llvm/CodeGen/MachinePassRegistry.h"
|
|
|
|
namespace llvm {
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
///
|
|
/// RegisterScheduler class - Track the registration of instruction schedulers.
|
|
///
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
class SelectionDAGISel;
|
|
class ScheduleDAGSDNodes;
|
|
class SelectionDAG;
|
|
class MachineBasicBlock;
|
|
|
|
class RegisterScheduler : public MachinePassRegistryNode {
|
|
public:
|
|
typedef ScheduleDAGSDNodes *(*FunctionPassCtor)(SelectionDAGISel*, bool);
|
|
|
|
static MachinePassRegistry Registry;
|
|
|
|
RegisterScheduler(const char *N, const char *D, FunctionPassCtor C)
|
|
: MachinePassRegistryNode(N, D, (MachinePassCtor)C)
|
|
{ Registry.Add(this); }
|
|
~RegisterScheduler() { Registry.Remove(this); }
|
|
|
|
|
|
// Accessors.
|
|
//
|
|
RegisterScheduler *getNext() const {
|
|
return (RegisterScheduler *)MachinePassRegistryNode::getNext();
|
|
}
|
|
static RegisterScheduler *getList() {
|
|
return (RegisterScheduler *)Registry.getList();
|
|
}
|
|
static FunctionPassCtor getDefault() {
|
|
return (FunctionPassCtor)Registry.getDefault();
|
|
}
|
|
static void setDefault(FunctionPassCtor C) {
|
|
Registry.setDefault((MachinePassCtor)C);
|
|
}
|
|
static void setListener(MachinePassRegistryListener *L) {
|
|
Registry.setListener(L);
|
|
}
|
|
};
|
|
|
|
/// createBURRListDAGScheduler - This creates a bottom up register usage
|
|
/// reduction list scheduler.
|
|
ScheduleDAGSDNodes *createBURRListDAGScheduler(SelectionDAGISel *IS,
|
|
bool Fast);
|
|
|
|
/// createTDRRListDAGScheduler - This creates a top down register usage
|
|
/// reduction list scheduler.
|
|
ScheduleDAGSDNodes *createTDRRListDAGScheduler(SelectionDAGISel *IS,
|
|
bool Fast);
|
|
|
|
/// createTDListDAGScheduler - This creates a top-down list scheduler with
|
|
/// a hazard recognizer.
|
|
ScheduleDAGSDNodes *createTDListDAGScheduler(SelectionDAGISel *IS,
|
|
bool Fast);
|
|
|
|
/// createFastDAGScheduler - This creates a "fast" scheduler.
|
|
///
|
|
ScheduleDAGSDNodes *createFastDAGScheduler(SelectionDAGISel *IS,
|
|
bool Fast);
|
|
|
|
/// createDefaultScheduler - This creates an instruction scheduler appropriate
|
|
/// for the target.
|
|
ScheduleDAGSDNodes *createDefaultScheduler(SelectionDAGISel *IS,
|
|
bool Fast);
|
|
|
|
} // end namespace llvm
|
|
|
|
#endif
|