Index: include/llvm/CodeGen/MachineScheduler.h =================================================================== --- include/llvm/CodeGen/MachineScheduler.h +++ include/llvm/CodeGen/MachineScheduler.h @@ -130,6 +130,18 @@ virtual ~MachineSchedContext(); }; +/// Base class for a machine scheduler class that can run at any point. +class MachineSchedulerBase : public MachineSchedContext, + public MachineFunctionPass { +public: + MachineSchedulerBase(char &ID): MachineFunctionPass(ID) {} + + void print(raw_ostream &O, const Module* = nullptr) const override; + +protected: + void scheduleRegions(ScheduleDAGInstrs &Scheduler, bool FixKillFlags); +}; + /// MachineSchedRegistry provides a selection of available machine instruction /// schedulers. class MachineSchedRegistry : public MachinePassRegistryNode { Index: include/llvm/CodeGen/PostRASchedulerList.h =================================================================== --- /dev/null +++ include/llvm/CodeGen/PostRASchedulerList.h @@ -0,0 +1,61 @@ +/**/ + +#include "llvm/Analysis/AliasAnalysis.h" +#include "llvm/CodeGen/LatencyPriorityQueue.h" +#include "llvm/CodeGen/MachineDominators.h" +#include "llvm/CodeGen/MachineFunctionPass.h" +#include "llvm/CodeGen/MachineLoopInfo.h" +#include "llvm/CodeGen/MachineRegisterInfo.h" +#include "llvm/CodeGen/Passes.h" +#include "llvm/CodeGen/RegisterClassInfo.h" +#include "llvm/CodeGen/ScheduleDAGInstrs.h" +#include "llvm/CodeGen/ScheduleHazardRecognizer.h" +#include "llvm/CodeGen/SchedulerRegistry.h" +#include "llvm/CodeGen/TargetInstrInfo.h" +#include "llvm/CodeGen/TargetLowering.h" +#include "llvm/CodeGen/TargetPassConfig.h" +#include "llvm/CodeGen/TargetRegisterInfo.h" +#include "llvm/CodeGen/TargetSubtargetInfo.h" + +#ifndef LLVM_CODEGEN_PostRASchedulerList_H +#define LLVM_CODEGEN_PostRASchedulerList_H + +namespace llvm { + + class PostRAScheduler : public MachineFunctionPass { + const TargetInstrInfo *TII; + RegisterClassInfo RegClassInfo; + + public: + static char ID; + PostRAScheduler() : MachineFunctionPass(ID) {} + + void getAnalysisUsage(AnalysisUsage &AU) const override { + AU.setPreservesCFG(); + AU.addRequired(); + AU.addRequired(); + AU.addRequired(); + AU.addPreserved(); + AU.addRequired(); + AU.addPreserved(); + MachineFunctionPass::getAnalysisUsage(AU); + } + + MachineFunctionProperties getRequiredProperties() const override { + return MachineFunctionProperties().set( + MachineFunctionProperties::Property::NoVRegs); + } + + bool runOnMachineFunction(MachineFunction &Fn) override; + + private: + bool enablePostRAScheduler( + const TargetSubtargetInfo &ST, CodeGenOpt::Level OptLevel, + TargetSubtargetInfo::AntiDepBreakMode &Mode, + TargetSubtargetInfo::RegClassVector &CriticalPathRCs) const; + }; + + +} // end namespace llvm + +#endif // LLVM_CODEGEN_PostRASchedulerList_H \ No newline at end of file Index: lib/CodeGen/MachineScheduler.cpp =================================================================== --- lib/CodeGen/MachineScheduler.cpp +++ lib/CodeGen/MachineScheduler.cpp @@ -143,18 +143,6 @@ namespace { -/// Base class for a machine scheduler class that can run at any point. -class MachineSchedulerBase : public MachineSchedContext, - public MachineFunctionPass { -public: - MachineSchedulerBase(char &ID): MachineFunctionPass(ID) {} - - void print(raw_ostream &O, const Module* = nullptr) const override; - -protected: - void scheduleRegions(ScheduleDAGInstrs &Scheduler, bool FixKillFlags); -}; - /// MachineScheduler runs after coalescing and before register allocation. class MachineScheduler : public MachineSchedulerBase { public: Index: lib/CodeGen/PostRASchedulerList.cpp =================================================================== --- lib/CodeGen/PostRASchedulerList.cpp +++ lib/CodeGen/PostRASchedulerList.cpp @@ -18,6 +18,7 @@ // //===----------------------------------------------------------------------===// +#include "llvm/CodeGen/PostRASchedulerList.h" #include "AggressiveAntiDepBreaker.h" #include "AntiDepBreaker.h" #include "CriticalAntiDepBreaker.h" @@ -76,38 +77,7 @@ AntiDepBreaker::~AntiDepBreaker() { } namespace { - class PostRAScheduler : public MachineFunctionPass { - const TargetInstrInfo *TII; - RegisterClassInfo RegClassInfo; - public: - static char ID; - PostRAScheduler() : MachineFunctionPass(ID) {} - - void getAnalysisUsage(AnalysisUsage &AU) const override { - AU.setPreservesCFG(); - AU.addRequired(); - AU.addRequired(); - AU.addRequired(); - AU.addPreserved(); - AU.addRequired(); - AU.addPreserved(); - MachineFunctionPass::getAnalysisUsage(AU); - } - - MachineFunctionProperties getRequiredProperties() const override { - return MachineFunctionProperties().set( - MachineFunctionProperties::Property::NoVRegs); - } - - bool runOnMachineFunction(MachineFunction &Fn) override; - - private: - bool enablePostRAScheduler( - const TargetSubtargetInfo &ST, CodeGenOpt::Level OptLevel, - TargetSubtargetInfo::AntiDepBreakMode &Mode, - TargetSubtargetInfo::RegClassVector &CriticalPathRCs) const; - }; char PostRAScheduler::ID = 0; class SchedulePostRATDList : public ScheduleDAGInstrs {