LLVM: llvm::PostGenericScheduler Class Reference (original) (raw)
PostGenericScheduler - Interface to the scheduling algorithm used by ScheduleDAGMI. More...
#include "[llvm/CodeGen/MachineScheduler.h](MachineScheduler%5F8h%5Fsource.html)"
| 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.
◆ ~PostGenericScheduler()
| llvm::PostGenericScheduler::~PostGenericScheduler ( ) | overridedefault |
|---|
◆ initialize()
| void PostGenericScheduler::initialize ( ScheduleDAGMI * DAG) | overridevirtual |
|---|
◆ initPolicy()
◆ pickNode()
| SUnit * PostGenericScheduler::pickNode ( bool & IsTopNode) | overridevirtual |
|---|
Pick the next node to schedule.
Implements llvm::MachineSchedStrategy.
Reimplemented in llvm::PPCPostRASchedStrategy.
Definition at line 4502 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().
◆ pickNodeBidirectional()
| SUnit * PostGenericScheduler::pickNodeBidirectional | ( | bool & | IsTopNode | ) |
|---|
Pick the best candidate node from either the top or bottom queue.
Definition at line 4421 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().
◆ pickNodeFromQueue()
Definition at line 4405 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().
◆ registerRoots()
| void PostGenericScheduler::registerRoots ( ) | overridevirtual |
|---|
◆ releaseBottomNode()
| void llvm::PostGenericScheduler::releaseBottomNode ( SUnit * SU) | inlineoverridevirtual |
|---|
◆ releaseTopNode()
| void llvm::PostGenericScheduler::releaseTopNode ( SUnit * SU) | inlineoverridevirtual |
|---|
◆ schedNode()
| void PostGenericScheduler::schedNode ( SUnit * SU, bool IsTopNode ) | overridevirtual |
|---|
◆ scheduleTree()
| void llvm::PostGenericScheduler::scheduleTree ( unsigned SubtreeID) | inlineoverridevirtual |
|---|
◆ shouldTrackPressure()
| bool llvm::PostGenericScheduler::shouldTrackPressure ( ) const | inlineoverridevirtual |
|---|
◆ tryCandidate()
Apply a set of heuristics to a new candidate for PostRA scheduling.
Parameters
| Cand | provides the policy and current best candidate. |
|---|---|
| TryCand | refers to the next SUnit candidate, otherwise uninitialized. |
Returns
true if TryCand is better than Cand (Reason is NOT NoCand)
Reimplemented in llvm::AArch64PostRASchedStrategy, and llvm::PPCPostRASchedStrategy.
Definition at line 4354 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().
◆ Bot
◆ BotCand
◆ BotClusterID
| unsigned llvm::PostGenericScheduler::BotClusterID | protected |
|---|
◆ DAG
◆ Top
◆ TopCand
◆ TopClusterID
| unsigned llvm::PostGenericScheduler::TopClusterID | protected |
|---|
The documentation for this class was generated from the following files:
- include/llvm/CodeGen/MachineScheduler.h
- lib/CodeGen/MachineScheduler.cpp