LLVM 20.0.0git
|
This is a minimal scheduler strategy. More...
#include "Target/AMDGPU/GCNSchedStrategy.h"
Public Member Functions | |
GCNSchedStrategy (const MachineSchedContext *C) | |
SUnit * | pickNode (bool &IsTopNode) override |
Pick the best node to balance the schedule. Implements MachineSchedStrategy. | |
void | schedNode (SUnit *SU, bool IsTopNode) override |
Update the scheduler's state after scheduling a node. | |
void | initialize (ScheduleDAGMI *DAG) override |
Initialize the strategy after building the DAG for a new region. | |
unsigned | getTargetOccupancy () |
void | setTargetOccupancy (unsigned Occ) |
GCNSchedStageID | getCurrentStage () |
bool | advanceStage () |
bool | hasNextStage () const |
GCNSchedStageID | getNextStage () const |
GCNDownwardRPTracker * | getDownwardTracker () |
GCNUpwardRPTracker * | getUpwardTracker () |
Public Member Functions inherited from llvm::GenericScheduler | |
GenericScheduler (const MachineSchedContext *C) | |
void | initPolicy (MachineBasicBlock::iterator Begin, MachineBasicBlock::iterator End, unsigned NumRegionInstrs) override |
Initialize the per-region scheduling policy. | |
void | dumpPolicy () const override |
bool | shouldTrackPressure () const override |
Check if pressure tracking is needed before building the DAG and initializing this strategy. | |
bool | shouldTrackLaneMasks () const override |
Returns true if lanemasks should be tracked. | |
void | initialize (ScheduleDAGMI *dag) override |
Initialize the strategy after building the DAG for a new region. | |
SUnit * | pickNode (bool &IsTopNode) override |
Pick the best node to balance the schedule. Implements MachineSchedStrategy. | |
void | schedNode (SUnit *SU, bool IsTopNode) override |
Update the scheduler's state after scheduling a node. | |
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. | |
void | registerRoots () override |
Notify this strategy that all roots have been released (including those that depend on EntrySU or ExitSU). | |
Public Member Functions inherited from llvm::MachineSchedStrategy | |
virtual | ~MachineSchedStrategy ()=default |
virtual void | initPolicy (MachineBasicBlock::iterator Begin, MachineBasicBlock::iterator End, unsigned NumRegionInstrs) |
Optionally override the per-region scheduling policy. | |
virtual MachineSchedPolicy | getPolicy () const |
virtual void | dumpPolicy () const |
virtual bool | shouldTrackPressure () const |
Check if pressure tracking is needed before building the DAG and initializing this strategy. | |
virtual bool | shouldTrackLaneMasks () const |
Returns true if lanemasks should be tracked. | |
virtual bool | doMBBSchedRegionsTopDown () const |
virtual void | initialize (ScheduleDAGMI *DAG)=0 |
Initialize the strategy after building the DAG for a new region. | |
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. | |
virtual void | registerRoots () |
Notify this strategy that all roots have been released (including those that depend on EntrySU or ExitSU). | |
virtual SUnit * | pickNode (bool &IsTopNode)=0 |
Pick the next node to schedule, or return NULL. | |
virtual void | scheduleTree (unsigned SubtreeID) |
Scheduler callback to notify that a new subtree is scheduled. | |
virtual void | schedNode (SUnit *SU, bool IsTopNode)=0 |
Notify MachineSchedStrategy that ScheduleDAGMI has scheduled an instruction and updated scheduled/remaining flags in the DAG nodes. | |
virtual void | releaseTopNode (SUnit *SU)=0 |
When all predecessor dependencies have been resolved, free this node for top-down scheduling. | |
virtual void | releaseBottomNode (SUnit *SU)=0 |
When all successor dependencies have been resolved, free this node for bottom-up scheduling. | |
Public Attributes | |
bool | HasHighPressure |
bool | KnownExcessRP = false |
unsigned | ErrorMargin = 3 |
const unsigned | HighRPSGPRBias = 7 |
const unsigned | HighRPVGPRBias = 7 |
unsigned | SGPRCriticalLimit |
unsigned | VGPRCriticalLimit |
unsigned | SGPRLimitBias = 0 |
unsigned | VGPRLimitBias = 0 |
Protected Member Functions | |
SUnit * | pickNodeBidirectional (bool &IsTopNode) |
void | pickNodeFromQueue (SchedBoundary &Zone, const CandPolicy &ZonePolicy, const RegPressureTracker &RPTracker, SchedCandidate &Cand, bool IsBottomUp) |
void | initCandidate (SchedCandidate &Cand, SUnit *SU, bool AtTop, const RegPressureTracker &RPTracker, const SIRegisterInfo *SRI, unsigned SGPRPressure, unsigned VGPRPressure, bool IsBottomUp) |
Protected Member Functions inherited from llvm::GenericScheduler | |
void | checkAcyclicLatency () |
Set IsAcyclicLatencyLimited if the acyclic path is longer than the cyclic critical path by more cycles than it takes to drain the instruction buffer. | |
void | initCandidate (SchedCandidate &Cand, SUnit *SU, bool AtTop, const RegPressureTracker &RPTracker, RegPressureTracker &TempTracker) |
virtual bool | tryCandidate (SchedCandidate &Cand, SchedCandidate &TryCand, SchedBoundary *Zone) const |
Apply a set of heuristics to a new candidate. | |
SUnit * | pickNodeBidirectional (bool &IsTopNode) |
Pick the best candidate node from either the top or bottom queue. | |
void | pickNodeFromQueue (SchedBoundary &Zone, const CandPolicy &ZonePolicy, const RegPressureTracker &RPTracker, SchedCandidate &Candidate) |
Pick the best candidate from the queue. | |
void | reschedulePhysReg (SUnit *SU, bool isTop) |
Protected Member Functions inherited from llvm::GenericSchedulerBase | |
GenericSchedulerBase (const MachineSchedContext *C) | |
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 | |
std::vector< unsigned > | Pressure |
std::vector< unsigned > | MaxPressure |
unsigned | SGPRExcessLimit |
unsigned | VGPRExcessLimit |
unsigned | TargetOccupancy |
MachineFunction * | MF |
SmallVector< GCNSchedStageID, 4 > | SchedStages |
SmallVectorImpl< GCNSchedStageID >::iterator | CurrentStage = nullptr |
GCNDownwardRPTracker | DownwardTracker |
GCNUpwardRPTracker | UpwardTracker |
Protected Attributes inherited from llvm::GenericScheduler | |
ScheduleDAGMILive * | DAG = nullptr |
SchedBoundary | Top |
SchedBoundary | Bot |
SchedCandidate | TopCand |
Candidate last picked from Top boundary. | |
SchedCandidate | BotCand |
Candidate last picked from Bot boundary. | |
Protected Attributes inherited from llvm::GenericSchedulerBase | |
const MachineSchedContext * | Context |
const TargetSchedModel * | SchedModel = nullptr |
const TargetRegisterInfo * | TRI = nullptr |
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 , NextDefUse , NodeOrder } |
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) |
This is a minimal scheduler strategy.
The main difference between this and the GenericScheduler is that GCNSchedStrategy uses different heuristics to determine excess/critical pressure sets.
Definition at line 43 of file GCNSchedStrategy.h.
GCNSchedStrategy::GCNSchedStrategy | ( | const MachineSchedContext * | C | ) |
Definition at line 68 of file GCNSchedStrategy.cpp.
bool GCNSchedStrategy::advanceStage | ( | ) |
Definition at line 499 of file GCNSchedStrategy.cpp.
References assert(), llvm::SmallVectorTemplateCommon< T, typename >::begin(), CurrentStage, llvm::SmallVectorTemplateCommon< T, typename >::end(), and SchedStages.
GCNSchedStageID GCNSchedStrategy::getCurrentStage | ( | ) |
Definition at line 494 of file GCNSchedStrategy.cpp.
References assert(), CurrentStage, llvm::SmallVectorTemplateCommon< T, typename >::end(), and SchedStages.
|
inline |
Definition at line 129 of file GCNSchedStrategy.h.
References DownwardTracker.
GCNSchedStageID GCNSchedStrategy::getNextStage | ( | ) | const |
Definition at line 514 of file GCNSchedStrategy.cpp.
References assert(), CurrentStage, llvm::SmallVectorTemplateCommon< T, typename >::end(), and SchedStages.
Referenced by llvm::GCNSchedStage::revertScheduling().
|
inline |
Definition at line 116 of file GCNSchedStrategy.h.
References TargetOccupancy.
Referenced by llvm::GCNSchedStage::checkScheduling(), and llvm::UnclusteredHighRPStage::shouldRevertScheduling().
|
inline |
Definition at line 131 of file GCNSchedStrategy.h.
References UpwardTracker.
bool GCNSchedStrategy::hasNextStage | ( | ) | const |
Definition at line 509 of file GCNSchedStrategy.cpp.
References assert(), CurrentStage, llvm::SmallVectorTemplateCommon< T, typename >::end(), and SchedStages.
Referenced by llvm::PreRARematStage::initGCNSchedStage(), and llvm::GCNSchedStage::revertScheduling().
|
protected |
Definition at line 191 of file GCNSchedStrategy.cpp.
References llvm::GenericSchedulerBase::SchedCandidate::AtTop, canUsePressureDiffs(), llvm::RegPressureDelta::CriticalMax, llvm::GenericScheduler::DAG, DownwardTracker, llvm::errs(), llvm::RegPressureDelta::Excess, GCNTrackers, llvm::ScheduleDAGMILive::getPressureDiff(), getRegisterPressures(), HasHighPressure, llvm::ScheduleDAGMILive::isTrackingPressure(), MaxPressure, Pressure, llvm::report_fatal_error(), llvm::GenericSchedulerBase::SchedCandidate::RPDelta, llvm::PressureChange::setUnitInc(), SGPRCriticalLimit, SGPRExcessLimit, llvm::GenericSchedulerBase::SchedCandidate::SU, UpwardTracker, VGPRCriticalLimit, and VGPRExcessLimit.
Referenced by pickNodeFromQueue().
|
overridevirtual |
Initialize the strategy after building the DAG for a new region.
Reimplemented from llvm::GenericScheduler.
Definition at line 73 of file GCNSchedStrategy.cpp.
References llvm::alignDown(), llvm::GenericSchedulerBase::Context, llvm::GenericScheduler::DAG, llvm::dbgs(), ErrorMargin, llvm::AMDGPU::IsaInfo::getAddressableNumVGPRs(), llvm::MachineFunction::getInfo(), llvm::SIMachineFunctionInfo::getMinAllowedOccupancy(), llvm::RegisterClassInfo::getNumAllocatableRegs(), llvm::SIMachineFunctionInfo::getOccupancy(), llvm::MachineFunction::getSubtarget(), llvm::AMDGPU::IsaInfo::getVGPRAllocGranule(), llvm::GenericScheduler::initialize(), KnownExcessRP, LLVM_DEBUG, llvm::ScheduleDAG::MF, MF, llvm::MachineSchedContext::RegClassInfo, RelaxedOcc, SGPRCriticalLimit, SGPRExcessLimit, SGPRLimitBias, TargetOccupancy, VGPRCriticalLimit, VGPRExcessLimit, and VGPRLimitBias.
Pick the best node to balance the schedule. Implements MachineSchedStrategy.
Reimplemented from llvm::GenericScheduler.
Definition at line 439 of file GCNSchedStrategy.cpp.
References assert(), llvm::SchedBoundary::Available, llvm::GenericScheduler::Bot, llvm::GenericScheduler::BotCand, llvm::ScheduleDAGMI::bottom(), llvm::GenericScheduler::DAG, llvm::dbgs(), llvm::ReadyQueue::empty(), llvm::ScheduleDAGMILive::getBotRPTracker(), llvm::SUnit::getInstr(), llvm::ScheduleDAGMILive::getTopRPTracker(), llvm::SUnit::isBottomReady(), llvm::SUnit::isScheduled, llvm::SUnit::isTopReady(), LLVM_DEBUG, llvm::GenericSchedulerBase::NoCand, llvm::SUnit::NodeNum, llvm::MachineSchedPolicy::OnlyBottomUp, llvm::MachineSchedPolicy::OnlyTopDown, llvm::SchedBoundary::Pending, pickNodeBidirectional(), pickNodeFromQueue(), llvm::SchedBoundary::pickOnlyChoice(), llvm::GenericSchedulerBase::SchedCandidate::Reason, llvm::GenericSchedulerBase::RegionPolicy, llvm::SchedBoundary::removeReady(), llvm::GenericSchedulerBase::SchedCandidate::reset(), llvm::GenericSchedulerBase::SchedCandidate::SU, llvm::ScheduleDAGMI::top(), llvm::GenericScheduler::Top, and llvm::GenericScheduler::TopCand.
Definition at line 358 of file GCNSchedStrategy.cpp.
References assert(), llvm::GenericScheduler::Bot, llvm::GenericScheduler::BotCand, llvm::GenericScheduler::DAG, llvm::dbgs(), llvm::ScheduleDAGMILive::getBotRPTracker(), llvm::ScheduleDAGMILive::getTopRPTracker(), llvm::SUnit::isScheduled, llvm::GenericSchedulerBase::SchedCandidate::isValid(), LLVM_DEBUG, llvm::GenericSchedulerBase::NoCand, pickNodeFromQueue(), llvm::SchedBoundary::pickOnlyChoice(), llvm::GenericSchedulerBase::SchedCandidate::Policy, llvm::GenericSchedulerBase::SchedCandidate::Reason, llvm::GenericSchedulerBase::SchedCandidate::reset(), llvm::GenericSchedulerBase::setPolicy(), llvm::GenericSchedulerBase::SchedCandidate::SU, llvm::GenericScheduler::Top, llvm::GenericScheduler::TopCand, llvm::GenericSchedulerBase::traceCandidate(), llvm::GenericScheduler::tryCandidate(), and llvm::VerifyScheduling.
Referenced by pickNode().
|
protected |
Definition at line 316 of file GCNSchedStrategy.cpp.
References llvm::GenericSchedulerBase::SchedCandidate::AtTop, llvm::SchedBoundary::Available, llvm::SchedBoundary::DAG, llvm::GenericScheduler::DAG, DownwardTracker, GCNTrackers, llvm::RegPressureTracker::getRegSetPressureAtPos(), initCandidate(), llvm::GenericSchedulerBase::SchedCandidate::initResourceDelta(), llvm::SchedBoundary::isTop(), llvm::ScheduleDAGMILive::isTrackingPressure(), LLVM_DEBUG, llvm::GenericSchedulerBase::NoCand, Pressure, llvm::GenericSchedulerBase::SchedCandidate::Reason, llvm::GenericSchedulerBase::SchedCandidate::ResDelta, llvm::GenericSchedulerBase::SchedModel, llvm::GenericSchedulerBase::SchedCandidate::setBest(), llvm::GenericSchedulerBase::traceCandidate(), llvm::GenericSchedulerBase::TRI, llvm::GenericScheduler::tryCandidate(), and UpwardTracker.
Referenced by pickNode(), and pickNodeBidirectional().
Update the scheduler's state after scheduling a node.
This is the same node that was just returned by pickNode(). However, ScheduleDAGMILive needs to update it's state based on the current cycle before MachineSchedStrategy does.
FIXME: Eventually, we may bundle physreg copies rather than rescheduling them here. See comments in biasPhysReg.
Reimplemented from llvm::GenericScheduler.
Definition at line 484 of file GCNSchedStrategy.cpp.
References llvm::GCNDownwardRPTracker::advance(), DownwardTracker, GCNTrackers, llvm::SUnit::getInstr(), MI, llvm::GCNUpwardRPTracker::recede(), llvm::GenericScheduler::schedNode(), and UpwardTracker.
|
inline |
Definition at line 118 of file GCNSchedStrategy.h.
References TargetOccupancy.
Referenced by llvm::GCNIterativeScheduler::scheduleLegacyMaxOccupancy().
|
protected |
Definition at line 72 of file GCNSchedStrategy.h.
Referenced by advanceStage(), getCurrentStage(), getNextStage(), and hasNextStage().
|
mutableprotected |
Definition at line 75 of file GCNSchedStrategy.h.
Referenced by getDownwardTracker(), initCandidate(), pickNodeFromQueue(), and schedNode().
unsigned llvm::GCNSchedStrategy::ErrorMargin = 3 |
Definition at line 92 of file GCNSchedStrategy.h.
Referenced by initialize().
bool llvm::GCNSchedStrategy::HasHighPressure |
Definition at line 83 of file GCNSchedStrategy.h.
Referenced by llvm::GCNSchedStage::finalizeGCNRegion(), initCandidate(), and llvm::GCNSchedStage::initGCNRegion().
Definition at line 95 of file GCNSchedStrategy.h.
Referenced by llvm::UnclusteredHighRPStage::initGCNSchedStage().
Definition at line 98 of file GCNSchedStrategy.h.
Referenced by llvm::UnclusteredHighRPStage::initGCNSchedStage().
bool llvm::GCNSchedStrategy::KnownExcessRP = false |
Definition at line 87 of file GCNSchedStrategy.h.
Referenced by llvm::GCNSchedStage::initGCNRegion(), and initialize().
|
protected |
Definition at line 58 of file GCNSchedStrategy.h.
Referenced by initCandidate().
|
protected |
Definition at line 66 of file GCNSchedStrategy.h.
Referenced by initialize().
|
protected |
Definition at line 56 of file GCNSchedStrategy.h.
Referenced by initCandidate(), and pickNodeFromQueue().
|
protected |
Definition at line 69 of file GCNSchedStrategy.h.
Referenced by advanceStage(), llvm::GCNMaxILPSchedStrategy::GCNMaxILPSchedStrategy(), llvm::GCNMaxMemoryClauseSchedStrategy::GCNMaxMemoryClauseSchedStrategy(), llvm::GCNMaxOccupancySchedStrategy::GCNMaxOccupancySchedStrategy(), getCurrentStage(), getNextStage(), and hasNextStage().
unsigned llvm::GCNSchedStrategy::SGPRCriticalLimit |
Definition at line 100 of file GCNSchedStrategy.h.
Referenced by llvm::GCNSchedStage::checkScheduling(), initCandidate(), and initialize().
|
protected |
Definition at line 60 of file GCNSchedStrategy.h.
Referenced by initCandidate(), and initialize().
unsigned llvm::GCNSchedStrategy::SGPRLimitBias = 0 |
Definition at line 104 of file GCNSchedStrategy.h.
Referenced by llvm::UnclusteredHighRPStage::finalizeGCNSchedStage(), llvm::UnclusteredHighRPStage::initGCNSchedStage(), and initialize().
|
protected |
Definition at line 64 of file GCNSchedStrategy.h.
Referenced by getTargetOccupancy(), initialize(), and setTargetOccupancy().
|
mutableprotected |
Definition at line 78 of file GCNSchedStrategy.h.
Referenced by getUpwardTracker(), initCandidate(), pickNodeFromQueue(), and schedNode().
unsigned llvm::GCNSchedStrategy::VGPRCriticalLimit |
Definition at line 102 of file GCNSchedStrategy.h.
Referenced by llvm::GCNSchedStage::checkScheduling(), initCandidate(), and initialize().
|
protected |
Definition at line 62 of file GCNSchedStrategy.h.
Referenced by initCandidate(), and initialize().
unsigned llvm::GCNSchedStrategy::VGPRLimitBias = 0 |
Definition at line 106 of file GCNSchedStrategy.h.
Referenced by llvm::UnclusteredHighRPStage::finalizeGCNSchedStage(), llvm::UnclusteredHighRPStage::initGCNSchedStage(), and initialize().