LLVM 22.0.0git
|
PostGenericScheduler - Interface to the scheduling algorithm used by ScheduleDAGMI. More...
#include "llvm/CodeGen/MachineScheduler.h"
Public Member Functions | |
PostGenericScheduler (const MachineSchedContext *C) | |
~PostGenericScheduler () override=default | |
void | initPolicy (MachineBasicBlock::iterator Begin, MachineBasicBlock::iterator End, unsigned NumRegionInstrs) override |
Optionally override the per-region scheduling policy. | |
bool | shouldTrackPressure () const override |
PostRA scheduling does not track pressure. | |
void | initialize (ScheduleDAGMI *Dag) override |
Initialize the strategy after building the DAG for a new region. | |
void | registerRoots () override |
Notify this strategy that all roots have been released (including those that depend on EntrySU or ExitSU). | |
SUnit * | pickNode (bool &IsTopNode) override |
Pick the next node to schedule. | |
SUnit * | pickNodeBidirectional (bool &IsTopNode) |
Pick the best candidate node from either the top or bottom queue. | |
void | scheduleTree (unsigned SubtreeID) override |
Scheduler callback to notify that a new subtree is scheduled. | |
void | schedNode (SUnit *SU, bool IsTopNode) override |
Called after ScheduleDAGMI has scheduled an instruction and updated scheduled/remaining flags in the DAG nodes. | |
void | releaseTopNode (SUnit *SU) override |
When all predecessor dependencies have been resolved, free this node for top-down scheduling. | |
void | releaseBottomNode (SUnit *SU) override |
When all successor dependencies have been resolved, free this node for bottom-up scheduling. | |
Public Member Functions inherited from llvm::MachineSchedStrategy | |
virtual | ~MachineSchedStrategy ()=default |
virtual void | dumpPolicy () const |
virtual bool | shouldTrackLaneMasks () const |
Returns true if lanemasks should be tracked. | |
virtual bool | doMBBSchedRegionsTopDown () const |
virtual void | enterMBB (MachineBasicBlock *MBB) |
Tell the strategy that MBB is about to be processed. | |
virtual void | leaveMBB () |
Tell the strategy that current MBB is done. |
Protected Member Functions | |
virtual bool | tryCandidate (SchedCandidate &Cand, SchedCandidate &TryCand) |
Apply a set of heuristics to a new candidate for PostRA scheduling. | |
void | pickNodeFromQueue (SchedBoundary &Zone, SchedCandidate &Cand) |
Protected Member Functions inherited from llvm::GenericSchedulerBase | |
GenericSchedulerBase (const MachineSchedContext *C) | |
LLVM_ABI void | setPolicy (CandPolicy &Policy, bool IsPostRA, SchedBoundary &CurrZone, SchedBoundary *OtherZone) |
Set the CandPolicy given a scheduling zone given the current resources and latencies inside and outside the zone. | |
MachineSchedPolicy | getPolicy () const override |
void | traceCandidate (const SchedCandidate &Cand) |
Protected Attributes | |
ScheduleDAGMI * | DAG = nullptr |
SchedBoundary | Top |
SchedBoundary | Bot |
SchedCandidate | TopCand |
Candidate last picked from Top boundary. | |
SchedCandidate | BotCand |
Candidate last picked from Bot boundary. | |
unsigned | TopClusterID |
unsigned | BotClusterID |
Protected Attributes inherited from llvm::GenericSchedulerBase | |
const MachineSchedContext * | Context |
const TargetSchedModel * | SchedModel = nullptr |
const TargetRegisterInfo * | TRI = nullptr |
unsigned | TopIdx = 0 |
unsigned | BotIdx = 0 |
unsigned | NumRegionInstrs = 0 |
MachineSchedPolicy | RegionPolicy |
SchedRemainder | Rem |
Additional Inherited Members | |
Public Types inherited from llvm::GenericSchedulerBase | |
enum | CandReason : uint8_t { NoCand , Only1 , PhysReg , RegExcess , RegCritical , Stall , Cluster , Weak , RegMax , ResourceReduce , ResourceDemand , BotHeightReduce , BotPathReduce , TopDepthReduce , TopPathReduce , NodeOrder , FirstValid } |
Represent the type of SchedCandidate found within a single queue. More... | |
Static Public Member Functions inherited from llvm::GenericSchedulerBase | |
static const char * | getReasonStr (GenericSchedulerBase::CandReason Reason) |
PostGenericScheduler - Interface to the scheduling algorithm used by ScheduleDAGMI.
Callbacks from ScheduleDAGMI: initPolicy -> initialize(DAG) -> registerRoots -> pickNode ...
Definition at line 1338 of file MachineScheduler.h.
|
inline |
Definition at line 1353 of file MachineScheduler.h.
References Bot, llvm::CallingConv::C, llvm::GenericSchedulerBase::GenericSchedulerBase(), and Top.
Referenced by llvm::AArch64PostRASchedStrategy::AArch64PostRASchedStrategy(), and llvm::PPCPostRASchedStrategy::PPCPostRASchedStrategy().
|
overridedefault |
References initPolicy(), and llvm::GenericSchedulerBase::NumRegionInstrs.
|
overridevirtual |
Initialize the strategy after building the DAG for a new region.
Implements llvm::MachineSchedStrategy.
Reimplemented in llvm::PPCPostRASchedStrategy.
Definition at line 4301 of file MachineScheduler.cpp.
References Bot, BotClusterID, DAG, llvm::InvalidClusterId, llvm::GenericSchedulerBase::Rem, llvm::GenericSchedulerBase::SchedModel, Top, TopClusterID, and llvm::GenericSchedulerBase::TRI.
Referenced by llvm::PPCPostRASchedStrategy::initialize().
|
overridevirtual |
Optionally override the per-region scheduling policy.
Reimplemented from llvm::MachineSchedStrategy.
Definition at line 4323 of file MachineScheduler.cpp.
References llvm::MISched::Bidirectional, llvm::GenericSchedulerBase::BotIdx, llvm::MISched::BottomUp, llvm::MachineFunction::getSubtarget(), llvm::GenericSchedulerBase::NumRegionInstrs, llvm::TargetSubtargetInfo::overridePostRASchedPolicy(), llvm::PostRADirection, llvm::GenericSchedulerBase::RegionPolicy, and llvm::MISched::TopDown.
Referenced by ~PostGenericScheduler().
Pick the next node to schedule.
Implements llvm::MachineSchedStrategy.
Reimplemented in llvm::PPCPostRASchedStrategy.
Definition at line 4520 of file MachineScheduler.cpp.
References assert(), Bot, BotCand, llvm::GenericSchedulerBase::BotIdx, DAG, llvm::dbgs(), llvm::SUnit::getInstr(), llvm::SUnit::isBottomReady(), llvm::SUnit::isScheduled, llvm::SUnit::isTopReady(), LLVM_DEBUG, llvm::GenericSchedulerBase::NoCand, llvm::SUnit::NodeNum, llvm::GenericSchedulerBase::NumRegionInstrs, llvm::GenericSchedulerBase::Only1, pickNodeBidirectional(), pickNodeFromQueue(), llvm::GenericSchedulerBase::RegionPolicy, llvm::GenericSchedulerBase::setPolicy(), Top, TopCand, llvm::GenericSchedulerBase::TopIdx, and tracePick().
Referenced by llvm::PPCPostRASchedStrategy::pickNode().
Pick the best candidate node from either the top or bottom queue.
Definition at line 4439 of file MachineScheduler.cpp.
References assert(), llvm::GenericSchedulerBase::SchedCandidate::AtTop, Bot, BotCand, llvm::dbgs(), LLVM_DEBUG, llvm::GenericSchedulerBase::NoCand, llvm::GenericSchedulerBase::Only1, pickNodeFromQueue(), llvm::GenericSchedulerBase::SchedCandidate::reset(), llvm::GenericSchedulerBase::SchedCandidate::setBest(), llvm::GenericSchedulerBase::setPolicy(), llvm::GenericSchedulerBase::SchedCandidate::SU, Top, TopCand, llvm::GenericSchedulerBase::traceCandidate(), tracePick(), tryCandidate(), and llvm::VerifyScheduling.
Referenced by pickNode().
|
protected |
Definition at line 4423 of file MachineScheduler.cpp.
References llvm::GenericSchedulerBase::SchedCandidate::AtTop, llvm::SchedBoundary::Available, DAG, llvm::GenericSchedulerBase::SchedCandidate::initResourceDelta(), llvm::SchedBoundary::isTop(), LLVM_DEBUG, llvm::GenericSchedulerBase::SchedCandidate::Policy, llvm::GenericSchedulerBase::SchedModel, llvm::GenericSchedulerBase::SchedCandidate::setBest(), llvm::GenericSchedulerBase::SchedCandidate::SU, llvm::GenericSchedulerBase::traceCandidate(), and tryCandidate().
Referenced by pickNode(), and pickNodeBidirectional().
|
overridevirtual |
Notify this strategy that all roots have been released (including those that depend on EntrySU or ExitSU).
Reimplemented from llvm::MachineSchedStrategy.
Definition at line 4353 of file MachineScheduler.cpp.
References Bot, DAG, llvm::dbgs(), llvm::DumpCriticalPathLength, llvm::errs(), llvm::SUnit::getDepth(), LLVM_DEBUG, and llvm::GenericSchedulerBase::Rem.
|
inlineoverridevirtual |
When all successor dependencies have been resolved, free this node for bottom-up scheduling.
Implements llvm::MachineSchedStrategy.
Definition at line 1387 of file MachineScheduler.h.
References Bot, BotCand, llvm::SUnit::BotReadyCycle, and llvm::SUnit::isScheduled.
|
inlineoverridevirtual |
When all predecessor dependencies have been resolved, free this node for top-down scheduling.
Implements llvm::MachineSchedStrategy.
Definition at line 1380 of file MachineScheduler.h.
References llvm::SUnit::isScheduled, Top, TopCand, and llvm::SUnit::TopReadyCycle.
Called after ScheduleDAGMI has scheduled an instruction and updated scheduled/remaining flags in the DAG nodes.
Implements llvm::MachineSchedStrategy.
Definition at line 4589 of file MachineScheduler.cpp.
References Bot, BotClusterID, llvm::SUnit::BotReadyCycle, llvm::SUnit::ParentClusterIdx, Top, TopClusterID, and llvm::SUnit::TopReadyCycle.
|
inlineoverridevirtual |
Scheduler callback to notify that a new subtree is scheduled.
Reimplemented from llvm::MachineSchedStrategy.
Definition at line 1374 of file MachineScheduler.h.
References llvm_unreachable.
|
inlineoverridevirtual |
PostRA scheduling does not track pressure.
Reimplemented from llvm::MachineSchedStrategy.
Definition at line 1364 of file MachineScheduler.h.
|
protectedvirtual |
Apply a set of heuristics to a new candidate for PostRA scheduling.
Cand | provides the policy and current best candidate. |
TryCand | refers to the next SUnit candidate, otherwise uninitialized. |
true
if TryCand is better than Cand (Reason is NOT NoCand) Reimplemented in llvm::AArch64PostRASchedStrategy, and llvm::PPCPostRASchedStrategy.
Definition at line 4372 of file MachineScheduler.cpp.
References llvm::GenericSchedulerBase::SchedCandidate::AtTop, Bot, BotClusterID, llvm::GenericSchedulerBase::Cluster, llvm::GenericSchedulerBase::SchedResourceDelta::CritResources, llvm::GenericSchedulerBase::SchedResourceDelta::DemandedResources, llvm::GenericSchedulerBase::FirstValid, llvm::isTheSameCluster(), llvm::GenericSchedulerBase::SchedCandidate::isValid(), llvm::GenericSchedulerBase::NoCand, llvm::SUnit::NodeNum, llvm::GenericSchedulerBase::NodeOrder, llvm::SUnit::ParentClusterIdx, llvm::GenericSchedulerBase::SchedCandidate::Policy, llvm::GenericSchedulerBase::SchedCandidate::Reason, llvm::GenericSchedulerBase::CandPolicy::ReduceLatency, llvm::GenericSchedulerBase::SchedCandidate::ResDelta, llvm::GenericSchedulerBase::ResourceDemand, llvm::GenericSchedulerBase::ResourceReduce, llvm::GenericSchedulerBase::Stall, llvm::GenericSchedulerBase::SchedCandidate::SU, Top, TopClusterID, llvm::tryGreater(), llvm::tryLatency(), and llvm::tryLess().
Referenced by pickNodeBidirectional(), pickNodeFromQueue(), and llvm::AArch64PostRASchedStrategy::tryCandidate().
|
protected |
Definition at line 1342 of file MachineScheduler.h.
Referenced by initialize(), pickNode(), pickNodeBidirectional(), PostGenericScheduler(), registerRoots(), releaseBottomNode(), schedNode(), and tryCandidate().
|
protected |
Candidate last picked from Bot boundary.
Definition at line 1347 of file MachineScheduler.h.
Referenced by pickNode(), pickNodeBidirectional(), and releaseBottomNode().
|
protected |
Definition at line 1350 of file MachineScheduler.h.
Referenced by initialize(), schedNode(), tryCandidate(), and llvm::PPCPostRASchedStrategy::tryCandidate().
|
protected |
Definition at line 1340 of file MachineScheduler.h.
Referenced by initialize(), pickNode(), pickNodeFromQueue(), and registerRoots().
|
protected |
Definition at line 1341 of file MachineScheduler.h.
Referenced by initialize(), pickNode(), pickNodeBidirectional(), PostGenericScheduler(), releaseTopNode(), schedNode(), tryCandidate(), and llvm::PPCPostRASchedStrategy::tryCandidate().
|
protected |
Candidate last picked from Top boundary.
Definition at line 1345 of file MachineScheduler.h.
Referenced by pickNode(), pickNodeBidirectional(), and releaseTopNode().
|
protected |
Definition at line 1349 of file MachineScheduler.h.
Referenced by initialize(), schedNode(), tryCandidate(), and llvm::PPCPostRASchedStrategy::tryCandidate().