LLVM 17.0.0git
Typedefs | Enumerations | Functions | Variables
GCNHazardRecognizer.cpp File Reference
#include "GCNHazardRecognizer.h"
#include "GCNSubtarget.h"
#include "MCTargetDesc/AMDGPUMCTargetDesc.h"
#include "SIMachineFunctionInfo.h"
#include "llvm/CodeGen/MachineFunction.h"
#include "llvm/CodeGen/ScheduleDAG.h"
#include "llvm/TargetParser/TargetParser.h"

Go to the source code of this file.

Typedefs

typedef function_ref< bool(const MachineInstr &, int WaitStates)> IsExpiredFn
 
typedef function_ref< unsigned int(const MachineInstr &)> GetNumWaitStatesFn
 

Enumerations

enum  HazardFnResult { HazardFound , HazardExpired , NoHazardFound }
 

Functions

static bool shouldRunLdsBranchVmemWARHazardFixup (const MachineFunction &MF, const GCNSubtarget &ST)
 
static bool isDivFMas (unsigned Opcode)
 
static bool isSGetReg (unsigned Opcode)
 
static bool isSSetReg (unsigned Opcode)
 
static bool isRWLane (unsigned Opcode)
 
static bool isRFE (unsigned Opcode)
 
static bool isSMovRel (unsigned Opcode)
 
static bool isDGEMM (unsigned Opcode)
 
static bool isXDL (const GCNSubtarget &ST, const MachineInstr &MI)
 
static bool isSendMsgTraceDataOrGDS (const SIInstrInfo &TII, const MachineInstr &MI)
 
static bool isPermlane (const MachineInstr &MI)
 
static bool isLdsDma (const MachineInstr &MI)
 
static unsigned getHWReg (const SIInstrInfo *TII, const MachineInstr &RegInstr)
 
static void insertNoopsInBundle (MachineInstr *MI, const SIInstrInfo &TII, unsigned Quantity)
 
template<typename StateT >
static bool hasHazard (StateT State, function_ref< HazardFnResult(StateT &, const MachineInstr &)> IsHazard, function_ref< void(StateT &, const MachineInstr &)> UpdateState, const MachineBasicBlock *MBB, MachineBasicBlock::const_reverse_instr_iterator I, DenseSet< const MachineBasicBlock * > &Visited)
 
static int getWaitStatesSince (GCNHazardRecognizer::IsHazardFn IsHazard, const MachineBasicBlock *MBB, MachineBasicBlock::const_reverse_instr_iterator I, int WaitStates, IsExpiredFn IsExpired, DenseSet< const MachineBasicBlock * > &Visited, GetNumWaitStatesFn GetNumWaitStates=SIInstrInfo::getNumWaitStates)
 
static int getWaitStatesSince (GCNHazardRecognizer::IsHazardFn IsHazard, const MachineInstr *MI, IsExpiredFn IsExpired)
 
static void addRegUnits (const SIRegisterInfo &TRI, BitVector &BV, MCRegister Reg)
 
static void addRegsToSet (const SIRegisterInfo &TRI, iterator_range< MachineInstr::const_mop_iterator > Ops, BitVector &DefSet, BitVector &UseSet)
 
static bool breaksSMEMSoftClause (MachineInstr *MI)
 
static bool breaksVMEMSoftClause (MachineInstr *MI)
 
static bool isStoreCountWaitZero (const MachineInstr &I)
 

Variables

static cl::opt< unsigned, false, MFMAPaddingRatioParser > MFMAPaddingRatio ("amdgpu-mfma-padding-ratio", cl::init(0), cl::Hidden, cl::desc("Fill a percentage of the latency between " "neighboring MFMA with s_nops."))
 

Typedef Documentation

◆ GetNumWaitStatesFn

Definition at line 448 of file GCNHazardRecognizer.cpp.

◆ IsExpiredFn

typedef function_ref<bool(const MachineInstr &, int WaitStates)> IsExpiredFn

Definition at line 447 of file GCNHazardRecognizer.cpp.

Enumeration Type Documentation

◆ HazardFnResult

Enumerator
HazardFound 
HazardExpired 
NoHazardFound 

Definition at line 445 of file GCNHazardRecognizer.cpp.

Function Documentation

◆ addRegsToSet()

static void addRegsToSet ( const SIRegisterInfo TRI,
iterator_range< MachineInstr::const_mop_iterator Ops,
BitVector DefSet,
BitVector UseSet 
)
static

Definition at line 595 of file GCNHazardRecognizer.cpp.

References addRegUnits(), and TRI.

◆ addRegUnits()

static void addRegUnits ( const SIRegisterInfo TRI,
BitVector BV,
MCRegister  Reg 
)
static

◆ breaksSMEMSoftClause()

static bool breaksSMEMSoftClause ( MachineInstr MI)
static

Definition at line 608 of file GCNHazardRecognizer.cpp.

References llvm::SIInstrInfo::isSMRD(), and MI.

◆ breaksVMEMSoftClause()

static bool breaksVMEMSoftClause ( MachineInstr MI)
static

◆ getHWReg()

static unsigned getHWReg ( const SIInstrInfo TII,
const MachineInstr RegInstr 
)
static

◆ getWaitStatesSince() [1/2]

static int getWaitStatesSince ( GCNHazardRecognizer::IsHazardFn  IsHazard,
const MachineBasicBlock MBB,
MachineBasicBlock::const_reverse_instr_iterator  I,
int  WaitStates,
IsExpiredFn  IsExpired,
DenseSet< const MachineBasicBlock * > &  Visited,
GetNumWaitStatesFn  GetNumWaitStates = SIInstrInfo::getNumWaitStates 
)
static

◆ getWaitStatesSince() [2/2]

static int getWaitStatesSince ( GCNHazardRecognizer::IsHazardFn  IsHazard,
const MachineInstr MI,
IsExpiredFn  IsExpired 
)
static

Definition at line 531 of file GCNHazardRecognizer.cpp.

References getWaitStatesSince(), and MI.

◆ hasHazard()

template<typename StateT >
static bool hasHazard ( StateT  State,
function_ref< HazardFnResult(StateT &, const MachineInstr &)>  IsHazard,
function_ref< void(StateT &, const MachineInstr &)>  UpdateState,
const MachineBasicBlock MBB,
MachineBasicBlock::const_reverse_instr_iterator  I,
DenseSet< const MachineBasicBlock * > &  Visited 
)
static

◆ insertNoopsInBundle()

static void insertNoopsInBundle ( MachineInstr MI,
const SIInstrInfo TII,
unsigned  Quantity 
)
static

Definition at line 259 of file GCNHazardRecognizer.cpp.

References llvm::MachineInstrBuilder::addImm(), Arg, llvm::BuildMI(), MI, and TII.

◆ isDGEMM()

static bool isDGEMM ( unsigned  Opcode)
static

Definition at line 118 of file GCNHazardRecognizer.cpp.

References llvm::AMDGPU::getMAIIsDGEMM().

Referenced by isXDL().

◆ isDivFMas()

static bool isDivFMas ( unsigned  Opcode)
static

◆ isLdsDma()

static bool isLdsDma ( const MachineInstr MI)
static

◆ isPermlane()

static bool isPermlane ( const MachineInstr MI)
static

Definition at line 163 of file GCNHazardRecognizer.cpp.

References MI.

◆ isRFE()

static bool isRFE ( unsigned  Opcode)
static

◆ isRWLane()

static bool isRWLane ( unsigned  Opcode)
static

◆ isSendMsgTraceDataOrGDS()

static bool isSendMsgTraceDataOrGDS ( const SIInstrInfo TII,
const MachineInstr MI 
)
static

◆ isSGetReg()

static bool isSGetReg ( unsigned  Opcode)
static

◆ isSMovRel()

static bool isSMovRel ( unsigned  Opcode)
static

◆ isSSetReg()

static bool isSSetReg ( unsigned  Opcode)
static

◆ isStoreCountWaitZero()

static bool isStoreCountWaitZero ( const MachineInstr I)
static

Definition at line 1332 of file GCNHazardRecognizer.cpp.

References I.

◆ isXDL()

static bool isXDL ( const GCNSubtarget ST,
const MachineInstr MI 
)
static

◆ shouldRunLdsBranchVmemWARHazardFixup()

static bool shouldRunLdsBranchVmemWARHazardFixup ( const MachineFunction MF,
const GCNSubtarget ST 
)
static

Variable Documentation

◆ MFMAPaddingRatio

cl::opt< unsigned, false, MFMAPaddingRatioParser > MFMAPaddingRatio("amdgpu-mfma-padding-ratio", cl::init(0), cl::Hidden, cl::desc("Fill a percentage of the latency between " "neighboring MFMA with s_nops.")) ( "amdgpu-mfma-padding-ratio"  ,
cl::init(0)  ,
cl::Hidden  ,
cl::desc("Fill a percentage of the latency between " "neighboring MFMA with s_nops.")   
)
static