LLVM 24.0.0git
llvm::GCNRegPressure Struct Reference

#include "Target/AMDGPU/GCNRegPressure.h"

Public Types

enum  RegKind {
  SGPR , VGPR , AGPR , AVGPR ,
  TOTAL_KINDS
}

Public Member Functions

 GCNRegPressure ()
bool empty () const
void clear ()
unsigned getNumRegs (RegKind Kind) const
unsigned getSGPRNum () const
unsigned getVGPRNum (bool UnifiedVGPRFile) const
unsigned getArchVGPRNum () const
unsigned getAGPRNum () const
unsigned getAVGPRNum () const
std::pair< unsigned, unsigned > getBankedVGPRNum (unsigned ArchLimit, unsigned AccLimit) const
unsigned getVGPRTuplesWeight () const
unsigned getSGPRTuplesWeight () const
unsigned getOccupancy (const GCNSubtarget &ST, unsigned DynamicVGPRBlockSize) const
unsigned getVGPRSpills (MachineFunction &MF, unsigned ArchVGPRThreshold, unsigned AGPRThreshold, unsigned CombinedThreshold)
void inc (unsigned Reg, LaneBitmask PrevMask, LaneBitmask NewMask, const MachineRegisterInfo &MRI)
bool less (const MachineFunction &MF, const GCNRegPressure &O, unsigned MaxOccupancy=std::numeric_limits< unsigned >::max()) const
 Compares this GCNRegpressure to O, returning true if this is less.
bool operator== (const GCNRegPressure &O) const
bool operator!= (const GCNRegPressure &O) const
GCNRegPressure & operator+= (const GCNRegPressure &RHS)
GCNRegPressure & operator-= (const GCNRegPressure &RHS)
void dump () const

Static Public Member Functions

static constexpr const char * getName (RegKind Kind)
static unsigned getUnifiedVGPRNum (unsigned NumArchVGPRs, unsigned NumAGPRs, unsigned NumAVGPRs)
 Returns the aggregated VGPR pressure, assuming NumArchVGPRs ArchVGPRs NumAGPRs AGPRS, and NumAVGPRs AVGPRs for a target with a unified VGPR file.
static unsigned getBankedUnifiedVGPRNum (unsigned NumArchVGPRs, unsigned NumAGPRs)
 Returns the aggregated VGPR pressure for NumArchVGPRs ArchVGPRs and NumAGPRs AGPRs, with AVGPRs already distributed across the banks.
static RegKind getRegKind (unsigned Reg, const MachineRegisterInfo &MRI)

Friends

GCNRegPressure maxPerRegFile (const GCNRegPressure &P1, const GCNRegPressure &P2)
Printable print (const GCNRegPressure &RP, const GCNSubtarget *ST=nullptr, unsigned DynamicVGPRBlockSize=0)

Detailed Description

Definition at line 33 of file GCNRegPressure.h.

Member Enumeration Documentation

◆ RegKind

Enumerator
SGPR 
VGPR 
AGPR 
AVGPR 
TOTAL_KINDS 

Definition at line 34 of file GCNRegPressure.h.

Constructor & Destructor Documentation

◆ GCNRegPressure()

llvm::GCNRegPressure::GCNRegPressure ( )
inline

Definition at line 42 of file GCNRegPressure.h.

References clear().

Referenced by less(), maxPerRegFile, operator!=(), operator+=(), operator-=(), operator==(), and print.

Member Function Documentation

◆ clear()

void llvm::GCNRegPressure::clear ( )
inline

Definition at line 50 of file GCNRegPressure.h.

Referenced by GCNRegPressure().

◆ dump()

void GCNRegPressure::dump ( ) const

Definition at line 948 of file GCNRegPressure.cpp.

References llvm::dbgs(), and print.

◆ empty()

bool llvm::GCNRegPressure::empty ( ) const
inline

Definition at line 46 of file GCNRegPressure.h.

References AGPR, AVGPR, SGPR, and VGPR.

Referenced by llvm::GCNIterativeScheduler::scheduleRegion().

◆ getAGPRNum()

unsigned llvm::GCNRegPressure::getAGPRNum ( ) const
inline
Returns
the AccVGPR32 pressure

Definition at line 97 of file GCNRegPressure.h.

References AGPR.

Referenced by llvm::GCNRPTarget::getNumRegsBenefit(), getVGPRSpills(), and llvm::GCNRPTarget::isSaveBeneficial().

◆ getArchVGPRNum()

unsigned llvm::GCNRegPressure::getArchVGPRNum ( ) const
inline
Returns
the ArchVGPR32 pressure, plus the AVGPRS which we assume will be allocated as VGPR

Definition at line 95 of file GCNRegPressure.h.

References AVGPR, and VGPR.

Referenced by llvm::GCNRPTarget::getNumRegsBenefit(), getVGPRSpills(), and llvm::GCNRPTarget::isSaveBeneficial().

◆ getAVGPRNum()

unsigned llvm::GCNRegPressure::getAVGPRNum ( ) const
inline
Returns
the AVGPR32 pressure

Definition at line 99 of file GCNRegPressure.h.

References AVGPR.

◆ getBankedUnifiedVGPRNum()

unsigned llvm::GCNRegPressure::getBankedUnifiedVGPRNum ( unsigned NumArchVGPRs,
unsigned NumAGPRs )
inlinestatic

Returns the aggregated VGPR pressure for NumArchVGPRs ArchVGPRs and NumAGPRs AGPRs, with AVGPRs already distributed across the banks.

Definition at line 87 of file GCNRegPressure.h.

References getUnifiedVGPRNum().

Referenced by llvm::GCNSchedStage::checkScheduling(), and llvm::GCNSchedStrategy::getRegisterPressures().

◆ getBankedVGPRNum()

std::pair< unsigned, unsigned > llvm::GCNRegPressure::getBankedVGPRNum ( unsigned ArchLimit,
unsigned AccLimit ) const
inline
Returns
the ArchVGPR32 and AccVGPR32 pressure after distributing the bank-agnostic AVGPR pressure across the two banks. Follow the register allocator, first charge AVGPRs to the ArchVGPR bank up to ArchLimit, then to the AccVGPR bank up to AccLimit. AVGPRs that fit in neither bank are charged to the ArchVGPR bank so that they show up as excess.

Definition at line 106 of file GCNRegPressure.h.

References AGPR, AVGPR, and VGPR.

◆ getName()

constexpr const char * llvm::GCNRegPressure::getName ( RegKind Kind)
inlinestaticconstexpr

Definition at line 36 of file GCNRegPressure.h.

References assert(), and TOTAL_KINDS.

Referenced by llvm::dumpMaxRegPressure().

◆ getNumRegs()

unsigned llvm::GCNRegPressure::getNumRegs ( RegKind Kind) const
inline

Definition at line 52 of file GCNRegPressure.h.

References assert(), and TOTAL_KINDS.

Referenced by llvm::dumpMaxRegPressure().

◆ getOccupancy()

unsigned llvm::GCNRegPressure::getOccupancy ( const GCNSubtarget & ST,
unsigned DynamicVGPRBlockSize ) const
inline

Definition at line 124 of file GCNRegPressure.h.

References getSGPRNum(), and getVGPRNum().

◆ getRegKind()

RegKind llvm::GCNRegPressure::getRegKind ( unsigned Reg,
const MachineRegisterInfo & MRI )
inlinestatic

Definition at line 194 of file GCNRegPressure.h.

References getRegKind(), MRI, Reg, and TRI.

Referenced by llvm::dumpMaxRegPressure(), llvm::getLiveRegs(), getRegKind(), and inc().

◆ getSGPRNum()

unsigned llvm::GCNRegPressure::getSGPRNum ( ) const
inline

◆ getSGPRTuplesWeight()

unsigned llvm::GCNRegPressure::getSGPRTuplesWeight ( ) const
inline

Definition at line 122 of file GCNRegPressure.h.

References SGPR, and TOTAL_KINDS.

Referenced by less().

◆ getUnifiedVGPRNum()

unsigned llvm::GCNRegPressure::getUnifiedVGPRNum ( unsigned NumArchVGPRs,
unsigned NumAGPRs,
unsigned NumAVGPRs )
inlinestatic

Returns the aggregated VGPR pressure, assuming NumArchVGPRs ArchVGPRs NumAGPRs AGPRS, and NumAVGPRs AVGPRs for a target with a unified VGPR file.

Definition at line 75 of file GCNRegPressure.h.

References llvm::alignTo(), and llvm::AMDGPU::IsaInfo::getArchVGPRAllocGranule().

Referenced by getBankedUnifiedVGPRNum(), getVGPRNum(), and llvm::GCNSchedStrategy::initCandidate().

◆ getVGPRNum()

unsigned llvm::GCNRegPressure::getVGPRNum ( bool UnifiedVGPRFile) const
inline
Returns
the aggregated ArchVGPR32, AccVGPR32, and Pseudo AVGPR pressure dependent upon UnifiedVGPRFile

Definition at line 61 of file GCNRegPressure.h.

References AGPR, AVGPR, getUnifiedVGPRNum(), and VGPR.

Referenced by getOccupancy(), getVGPRSpills(), less(), and llvm::GCNRPTarget::satisfied().

◆ getVGPRSpills()

unsigned llvm::GCNRegPressure::getVGPRSpills ( MachineFunction & MF,
unsigned ArchVGPRThreshold,
unsigned AGPRThreshold,
unsigned CombinedThreshold )
inline

◆ getVGPRTuplesWeight()

unsigned llvm::GCNRegPressure::getVGPRTuplesWeight ( ) const
inline

Definition at line 118 of file GCNRegPressure.h.

References AGPR, AVGPR, TOTAL_KINDS, and VGPR.

Referenced by less().

◆ inc()

◆ less()

bool GCNRegPressure::less ( const MachineFunction & MF,
const GCNRegPressure & O,
unsigned MaxOccupancy = std::numeric_limits<unsigned>::max() ) const

Compares this GCNRegpressure to O, returning true if this is less.

Since GCNRegpressure contains different types of pressures, and due to target-specific pecularities (e.g. we care about occupancy rather than raw register usage), we determine if this GCNRegPressure is less than O based on the following tiered comparisons (in order order of precedence):

  1. Better occupancy
  2. Less spilling (first preference to VGPR spills, then to SGPR spills)
  3. Less tuple register pressure (first preference to VGPR tuples if we determine that SGPR pressure is not important)
  4. Less raw register pressure (first preference to VGPR tuples if we determine that SGPR pressure is not important)

Definition at line 148 of file GCNRegPressure.cpp.

References GCNRegPressure(), llvm::MachineFunction::getInfo(), getSGPRNum(), getSGPRTuplesWeight(), llvm::MachineFunction::getSubtarget(), getVGPRNum(), getVGPRTuplesWeight(), and I.

◆ operator!=()

bool llvm::GCNRegPressure::operator!= ( const GCNRegPressure & O) const
inline

Definition at line 176 of file GCNRegPressure.h.

References GCNRegPressure().

◆ operator+=()

GCNRegPressure & llvm::GCNRegPressure::operator+= ( const GCNRegPressure & RHS)
inline

Definition at line 180 of file GCNRegPressure.h.

References GCNRegPressure(), I, and RHS.

◆ operator-=()

GCNRegPressure & llvm::GCNRegPressure::operator-= ( const GCNRegPressure & RHS)
inline

Definition at line 186 of file GCNRegPressure.h.

References GCNRegPressure(), I, and RHS.

◆ operator==()

bool llvm::GCNRegPressure::operator== ( const GCNRegPressure & O) const
inline

Definition at line 174 of file GCNRegPressure.h.

References GCNRegPressure().

◆ maxPerRegFile

GCNRegPressure maxPerRegFile ( const GCNRegPressure & P1,
const GCNRegPressure & P2 )
friend
Returns
the maximum of P1 and P2 for each register file. The VGPR and AVGPR components are queried as one sum, so both come from the operand with the larger sum. The AGPR maximum stays separate also for a unified VGPR file: ArchVGPRs and AGPRs use separate ranges of it, so the unified pressure is the sum of both peaks even when they are at different points.

Definition at line 222 of file GCNRegPressure.h.

References AVGPR, GCNRegPressure(), I, TOTAL_KINDS, and VGPR.

◆ print

Printable print ( const GCNRegPressure & RP,
const GCNSubtarget * ST = nullptr,
unsigned DynamicVGPRBlockSize = 0 )
friend

References GCNRegPressure().

Referenced by dump().


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