X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=blobdiff_plain;f=include%2Fllvm%2FCodeGen%2FMachineScheduler.h;h=358fd5a3732a6377db705c6b5a66f09a043abdcf;hp=e80e14e5ccf75541f5d22a2bc229a157687554a6;hb=20a42bb20d43b80e322c95dd99b64a5a4566fe08;hpb=c16fc548515f2fd01bc2cbe4befd822a636cc154 diff --git a/include/llvm/CodeGen/MachineScheduler.h b/include/llvm/CodeGen/MachineScheduler.h index e80e14e5ccf..358fd5a3732 100644 --- a/include/llvm/CodeGen/MachineScheduler.h +++ b/include/llvm/CodeGen/MachineScheduler.h @@ -77,6 +77,7 @@ #ifndef LLVM_CODEGEN_MACHINESCHEDULER_H #define LLVM_CODEGEN_MACHINESCHEDULER_H +#include "llvm/Analysis/AliasAnalysis.h" #include "llvm/CodeGen/MachinePassRegistry.h" #include "llvm/CodeGen/RegisterPressure.h" #include "llvm/CodeGen/ScheduleDAGInstrs.h" @@ -87,7 +88,6 @@ namespace llvm { extern cl::opt ForceTopDown; extern cl::opt ForceBottomUp; -class AliasAnalysis; class LiveIntervals; class MachineDominatorTree; class MachineLoopInfo; @@ -156,8 +156,12 @@ struct MachineSchedPolicy { bool OnlyTopDown; bool OnlyBottomUp; + // Disable heuristic that tries to fetch nodes from long dependency chains + // first. + bool DisableLatencyHeuristic; + MachineSchedPolicy(): ShouldTrackPressure(false), OnlyTopDown(false), - OnlyBottomUp(false) {} + OnlyBottomUp(false), DisableLatencyHeuristic(false) {} }; /// MachineSchedStrategy - Interface to the scheduling algorithm used by @@ -175,6 +179,8 @@ public: MachineBasicBlock::iterator End, unsigned NumRegionInstrs) {} + virtual void dumpPolicy() {} + /// Check if pressure tracking is needed before building the DAG and /// initializing this strategy. Called after initPolicy. virtual bool shouldTrackPressure() const { return true; } @@ -222,6 +228,7 @@ public: class ScheduleDAGMI : public ScheduleDAGInstrs { protected: AliasAnalysis *AA; + LiveIntervals *LIS; std::unique_ptr SchedImpl; /// Topo - A topological ordering for SUnits which permits fast IsReachable @@ -248,11 +255,11 @@ protected: #endif public: ScheduleDAGMI(MachineSchedContext *C, std::unique_ptr S, - bool IsPostRA) - : ScheduleDAGInstrs(*C->MF, C->MLI, IsPostRA, - /*RemoveKillFlags=*/IsPostRA, C->LIS), - AA(C->AA), SchedImpl(std::move(S)), Topo(SUnits, &ExitSU), CurrentTop(), - CurrentBottom(), NextClusterPred(nullptr), NextClusterSucc(nullptr) { + bool RemoveKillFlags) + : ScheduleDAGInstrs(*C->MF, C->MLI, RemoveKillFlags), AA(C->AA), + LIS(C->LIS), SchedImpl(std::move(S)), Topo(SUnits, &ExitSU), + CurrentTop(), CurrentBottom(), NextClusterPred(nullptr), + NextClusterSucc(nullptr) { #ifndef NDEBUG NumInstrsScheduled = 0; #endif @@ -261,6 +268,9 @@ public: // Provide a vtable anchor ~ScheduleDAGMI() override; + // Returns LiveIntervals instance for use in DAG mutators and such. + LiveIntervals *getLIS() const { return LIS; } + /// Return true if this DAG supports VReg liveness and RegPressure. virtual bool hasVRegLiveness() const { return false; } @@ -380,7 +390,7 @@ protected: public: ScheduleDAGMILive(MachineSchedContext *C, std::unique_ptr S) - : ScheduleDAGMI(C, std::move(S), /*IsPostRA=*/false), + : ScheduleDAGMI(C, std::move(S), /*RemoveKillFlags=*/false), RegClassInfo(C->RegClassInfo), DFSResult(nullptr), ShouldTrackPressure(false), RPTracker(RegPressure), TopRPTracker(TopPressure), BotRPTracker(BotPressure) {} @@ -858,6 +868,8 @@ public: MachineBasicBlock::iterator End, unsigned NumRegionInstrs) override; + void dumpPolicy() override; + bool shouldTrackPressure() const override { return RegionPolicy.ShouldTrackPressure; } @@ -915,7 +927,7 @@ public: MachineBasicBlock::iterator End, unsigned NumRegionInstrs) override { /* no configurable policy */ - }; + } /// PostRA scheduling does not track pressure. bool shouldTrackPressure() const override { return false; }