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 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 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 946 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

◆ 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 87 of file GCNRegPressure.h.

References AVGPR, and VGPR.

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

◆ 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 97 of file GCNRegPressure.h.

References getSGPRNum(), and getVGPRNum().

◆ getRegKind()

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

Definition at line 167 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 95 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 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 91 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 149 of file GCNRegPressure.h.

References GCNRegPressure().

◆ operator+=()

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

Definition at line 153 of file GCNRegPressure.h.

References GCNRegPressure(), I, and RHS.

◆ operator-=()

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

Definition at line 159 of file GCNRegPressure.h.

References GCNRegPressure(), I, and RHS.

◆ operator==()

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

Definition at line 147 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 195 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: