LLVM 23.0.0git
llvm::CandidateHeuristics Class Reference

CandidateHeuristics contains state and implementations to facilitate making per instruction scheduling decisions; it contains methods used in tryCandidate to decide which instruction to schedule next. More...

#include "Target/AMDGPU/AMDGPUCoExecSchedStrategy.h"

Public Member Functions

 CandidateHeuristics ()=default
void initialize (ScheduleDAGMI *DAG, const TargetSchedModel *SchedModel, const TargetRegisterInfo *TRI)
void updateForScheduling (SUnit *SU)
 Update the state to reflect that SU is going to be scheduled.
void sortHWUIResources ()
 Sort the HWUInfo vector.
bool tryCriticalResource (GenericSchedulerBase::SchedCandidate &TryCand, GenericSchedulerBase::SchedCandidate &Cand, SchedBoundary *Zone) const
 Check for critical resource consumption.
bool tryCriticalResourceDependency (GenericSchedulerBase::SchedCandidate &TryCand, GenericSchedulerBase::SchedCandidate &Cand, SchedBoundary *Zone) const
 Check for dependencies of instructions that use prioritized HardwareUnits.
void dumpRegionSummary ()

Protected Member Functions

void collectHWUIPressure ()
 Walk over the region and collect total usage per HardwareUnit.
unsigned getHWUICyclesForInst (SUnit *SU)
 Compute the blocking cycles for the appropriate HardwareUnit given an SU.
HardwareUnitInfogetHWUIFromFlavor (AMDGPU::InstructionFlavor Flavor)
 Given a Flavor , find the corresponding HardwareUnit.

Protected Attributes

ScheduleDAGMIDAG
const SIInstrInfoSII
const SIRegisterInfoSRI
const TargetSchedModelSchedModel
SmallVector< HardwareUnitInfo, 8 > HWUInfo

Detailed Description

CandidateHeuristics contains state and implementations to facilitate making per instruction scheduling decisions; it contains methods used in tryCandidate to decide which instruction to schedule next.

Definition at line 246 of file AMDGPUCoExecSchedStrategy.h.

Constructor & Destructor Documentation

◆ CandidateHeuristics()

llvm::CandidateHeuristics::CandidateHeuristics ( )
default

References DAG, SchedModel, and TRI.

Member Function Documentation

◆ collectHWUIPressure()

void CandidateHeuristics::collectHWUIPressure ( )
protected

Walk over the region and collect total usage per HardwareUnit.

Definition at line 227 of file AMDGPUCoExecSchedStrategy.cpp.

References llvm::AMDGPU::classifyFlavor(), DAG, dumpRegionSummary(), getHWUICyclesForInst(), HWUInfo, LLVM_DEBUG, SchedModel, and SII.

Referenced by initialize().

◆ dumpRegionSummary()

void CandidateHeuristics::dumpRegionSummary ( )

◆ getHWUICyclesForInst()

unsigned CandidateHeuristics::getHWUICyclesForInst ( SUnit * SU)
protected

Compute the blocking cycles for the appropriate HardwareUnit given an SU.

Definition at line 184 of file AMDGPUCoExecSchedStrategy.cpp.

References assert(), DAG, and SchedModel.

Referenced by collectHWUIPressure(), and updateForScheduling().

◆ getHWUIFromFlavor()

HardwareUnitInfo * CandidateHeuristics::getHWUIFromFlavor ( AMDGPU::InstructionFlavor Flavor)
protected

Given a Flavor , find the corresponding HardwareUnit.

Returns
the mapped HardwareUnit.

Definition at line 175 of file AMDGPUCoExecSchedStrategy.cpp.

References HWUInfo.

Referenced by updateForScheduling().

◆ initialize()

◆ sortHWUIResources()

void CandidateHeuristics::sortHWUIResources ( )

Sort the HWUInfo vector.

After sorting, the HardwareUnits that are highest priority are first. Priority is determined by maximizing coexecution and keeping the critical HardwareUnit busy.

Definition at line 256 of file AMDGPUCoExecSchedStrategy.cpp.

References A(), B(), HWUInfo, and llvm::sort().

◆ tryCriticalResource()

bool CandidateHeuristics::tryCriticalResource ( GenericSchedulerBase::SchedCandidate & TryCand,
GenericSchedulerBase::SchedCandidate & Cand,
SchedBoundary * Zone ) const

Check for critical resource consumption.

Prefer the candidate that uses the most prioritized HardwareUnit. If both candidates use the same HarwareUnit, prefer the candidate with higher priority on that HardwareUnit.

Definition at line 363 of file AMDGPUCoExecSchedStrategy.cpp.

References llvm::HardwareUnitInfo::contains(), llvm::AMDGPU::DS, llvm::HardwareUnitInfo::getHigherPriority(), llvm::HardwareUnitInfo::getType(), HWUInfo, I, llvm::GenericSchedulerBase::SchedCandidate::Reason, llvm::GenericSchedulerBase::RegCritical, llvm::GenericSchedulerBase::SchedCandidate::SU, and tryCriticalResourceDependency().

◆ tryCriticalResourceDependency()

bool CandidateHeuristics::tryCriticalResourceDependency ( GenericSchedulerBase::SchedCandidate & TryCand,
GenericSchedulerBase::SchedCandidate & Cand,
SchedBoundary * Zone ) const

Check for dependencies of instructions that use prioritized HardwareUnits.

Prefer the candidate that is a dependency of an instruction that uses the most prioritized HardwareUnit. If both candidates enable the same HardwareUnit, prefer the candidate that enables the higher priority instruction on that HardwareUnit.

Definition at line 276 of file AMDGPUCoExecSchedStrategy.cpp.

References llvm::AMDGPU::classifyFlavor(), DAG, llvm::AMDGPU::DS, llvm::Enabled, llvm::SUnit::getHeight(), llvm::SUnit::getInstr(), llvm::HardwareUnitInfo::getNextTargetSU(), llvm::HardwareUnitInfo::getType(), HWUInfo, I, llvm::GenericSchedulerBase::SchedCandidate::Reason, llvm::GenericSchedulerBase::RegCritical, SII, llvm::GenericSchedulerBase::SchedCandidate::SU, and llvm::AMDGPU::WMMA.

Referenced by tryCriticalResource().

◆ updateForScheduling()

void CandidateHeuristics::updateForScheduling ( SUnit * SU)

Update the state to reflect that SU is going to be scheduled.

Definition at line 196 of file AMDGPUCoExecSchedStrategy.cpp.

References assert(), llvm::AMDGPU::classifyFlavor(), getHWUICyclesForInst(), getHWUIFromFlavor(), llvm::SUnit::getInstr(), llvm::HardwareUnitInfo::markScheduled(), and SII.

Member Data Documentation

◆ DAG

◆ HWUInfo

◆ SchedModel

const TargetSchedModel* llvm::CandidateHeuristics::SchedModel
protected

◆ SII

const SIInstrInfo* llvm::CandidateHeuristics::SII
protected

◆ SRI

const SIRegisterInfo* llvm::CandidateHeuristics::SRI
protected

Definition at line 250 of file AMDGPUCoExecSchedStrategy.h.

Referenced by initialize().


The documentation for this class was generated from the following files: