14#ifndef LLVM_LIB_TARGET_AMDGPU_GCNSUBTARGET_H 
   15#define LLVM_LIB_TARGET_AMDGPU_GCNSUBTARGET_H 
   26#define GET_SUBTARGETINFO_HEADER 
   27#include "AMDGPUGenSubtargetInfo.inc" 
   31class GCNTargetMachine;
 
   52  std::unique_ptr<const SelectionDAGTargetInfo> TSInfo;
 
   55  std::unique_ptr<AMDGPUCallLowering> CallLoweringInfo;
 
   56  std::unique_ptr<InlineAsmLowering> InlineAsmLoweringInfo;
 
   57  std::unique_ptr<InstructionSelector> InstSelector;
 
   59  std::unique_ptr<AMDGPURegisterBankInfo> RegBankInfo;
 
  320    return &FrameLowering;
 
 
  328    return &InstrInfo.getRegisterInfo();
 
 
  334    return CallLoweringInfo.get();
 
 
  338    return InlineAsmLoweringInfo.get();
 
 
  342    return InstSelector.get();
 
 
  346    return Legalizer.get();
 
 
  350    return RegBankInfo.get();
 
 
  371      return (64 * 4) * ((1 << 18) - 1);
 
  375      return (64 * 4) * ((1 << 15) - 1);
 
  378    return (256 * 4) * ((1 << 13) - 1);
 
 
 1043  bool useAA() 
const override;
 
 1480                                    unsigned DynamicVGPRBlockSize) 
const;
 
 1491                                                 unsigned LDSSize = 0,
 
 1492                                                 unsigned NumSGPRs = 0,
 
 1493                                                 unsigned NumVGPRs = 0) 
const;
 
 1647                              std::pair<unsigned, unsigned> WavesPerEU,
 
 1648                              unsigned PreloadedSGPRs,
 
 1649                              unsigned ReservedNumSGPRs) 
const;
 
 1700                          unsigned DynamicVGPRBlockSize)
 const {
 
 1702                                           DynamicVGPRBlockSize);
 
 
 1708                          unsigned DynamicVGPRBlockSize)
 const {
 
 1710                                           DynamicVGPRBlockSize);
 
 
 1717                     std::pair<unsigned, unsigned> NumVGPRBounds) 
const;
 
 1763    return hasFeature(AMDGPU::FeatureWavefrontSize32) ||
 
 1764           hasFeature(AMDGPU::FeatureWavefrontSize64);
 
 
 
 1939  bool ImplicitBufferPtr = 
false;
 
 1941  bool PrivateSegmentBuffer = 
false;
 
 1943  bool DispatchPtr = 
false;
 
 1945  bool QueuePtr = 
false;
 
 1947  bool KernargSegmentPtr = 
false;
 
 1949  bool DispatchID = 
false;
 
 1951  bool FlatScratchInit = 
false;
 
 1953  bool PrivateSegmentSize = 
false;
 
 1955  unsigned NumKernargPreloadSGPRs = 0;
 
 1957  unsigned NumUsedUserSGPRs = 0;
 
 
This file describes how to lower LLVM calls to machine code calls.
 
This file declares the targeting of the RegisterBankInfo class for AMDGPU.
 
Base class for AMDGPU specific classes of TargetSubtarget.
 
SI DAG Lowering interface definition.
 
Interface definition for SIInstrInfo.
 
unsigned getWavefrontSizeLog2() const
 
AMDGPUSubtarget(Triple TT)
 
unsigned getMaxWavesPerEU() const
 
unsigned getWavefrontSize() const
 
bool hasMemoryAtomicFaddF32DenormalSupport() const
 
bool hasD16Images() const
 
bool hasMinimum3Maximum3F32() const
 
InstrItineraryData InstrItins
 
bool useVGPRIndexMode() const
 
bool HasIEEEMinimumMaximumInsts
 
bool hasAtomicDsPkAdd16Insts() const
 
bool hasFlatGVSMode() const
 
bool HasLdsBranchVmemWARHazard
 
bool hasPermlane32Swap() const
 
bool partialVCCWritesUpdateVCCZ() const
Writes to VCC_LO/VCC_HI update the VCCZ flag.
 
bool hasPkFmacF16Inst() const
 
bool HasAtomicFMinFMaxF64FlatInsts
 
bool hasPkMinMax3Insts() const
 
bool hasDot2Insts() const
 
bool hasD16LoadStore() const
 
bool HasExtendedImageInsts
 
bool hasMergedShaders() const
 
bool hasSDWAScalar() const
 
bool supportsBackOffBarrier() const
 
bool hasScalarCompareEq64() const
 
bool has1_5xVGPRs() const
 
int getLDSBankCount() const
 
bool hasSafeCUPrefetch() const
 
bool hasOnlyRevVALUShifts() const
 
bool hasImageStoreD16Bug() const
 
bool hasNonNSAEncoding() const
 
bool hasUsableDivScaleConditionOutput() const
Condition output from div_scale is usable.
 
void mirFileLoaded(MachineFunction &MF) const override
 
bool hasUsableDSOffset() const
True if the offset field of DS instructions works as expected.
 
bool loadStoreOptEnabled() const
 
bool enableSubRegLiveness() const override
 
bool hasDPPWavefrontShifts() const
 
unsigned getSGPRAllocGranule() const
 
bool hasAtomicFMinFMaxF64FlatInsts() const
 
bool hasLdsAtomicAddF64() const
 
bool hasFlatLgkmVMemCountInOrder() const
 
bool Has45BitNumRecordsBufferResource
 
bool flatScratchIsPointer() const
 
bool hasFP8ConversionInsts() const
 
bool hasShift64HighRegBug() const
 
bool hasDot7Insts() const
 
bool HasScalarDwordx3Loads
 
bool hasApertureRegs() const
 
unsigned MaxPrivateElementSize
 
bool unsafeDSOffsetFoldingEnabled() const
 
bool hasBitOp3Insts() const
 
bool hasFPAtomicToDenormModeHazard() const
 
unsigned getAddressableNumArchVGPRs() const
 
bool hasFlatInstOffsets() const
 
bool vmemWriteNeedsExpWaitcnt() const
 
bool hasAtomicFMinFMaxF32FlatInsts() const
 
bool shouldClusterStores() const
 
unsigned getMinNumSGPRs(unsigned WavesPerEU) const
 
unsigned getSGPREncodingGranule() const
 
bool hasIEEEMinimumMaximumInsts() const
 
void ParseSubtargetFeatures(StringRef CPU, StringRef TuneCPU, StringRef FS)
 
bool hasLdsBranchVmemWARHazard() const
 
bool hasDefaultComponentZero() const
 
bool hasGetWaveIdInst() const
 
bool hasCompressedExport() const
Return true if the target's EXP instruction has the COMPR flag, which affects the meaning of the EN (...
 
bool hasGFX90AInsts() const
 
bool hasDstSelForwardingHazard() const
 
void setScalarizeGlobalBehavior(bool b)
 
bool hasRelaxedBufferOOBMode() const
 
bool hasPkAddMinMaxInsts() const
 
bool hasExtendedImageInsts() const
 
bool hasVmemWriteVgprInOrder() const
 
bool hasBCNT(unsigned Size) const
 
unsigned getSNopBits() const
 
bool HasTransposeLoadF4F6Insts
 
bool HasFlatAtomicFaddF32Inst
 
bool hasLDSLoadB96_B128() const
Returns true if the target supports global_load_lds_dwordx3/global_load_lds_dwordx4 or buffer_load_dw...
 
bool has1024AddressableVGPRs() const
 
bool supportsAgentScopeFineGrainedRemoteMemoryAtomics() const
 
bool hasFlatScratchInsts() const
 
bool HasFlatSegmentOffsetBug
 
bool hasMultiDwordFlatScratchAddressing() const
 
bool hasArchitectedSGPRs() const
 
bool hasFmaakFmamkF64Insts() const
 
bool hasTanhInsts() const
 
bool hasScaleOffset() const
 
bool hasDenormModeInst() const
 
bool hasPrivEnabledTrap2NopBug() const
 
bool hasMFMAInlineLiteralBug() const
 
bool NegativeScratchOffsetBug
 
bool hasCvtScaleForwardingHazard() const
 
unsigned getTotalNumVGPRs() const
 
unsigned getMinWavesPerEU() const override
 
bool hasSMemTimeInst() const
 
bool hasUnalignedDSAccessEnabled() const
 
bool hasTensorCvtLutInsts() const
 
bool hasNegativeScratchOffsetBug() const
 
const SIInstrInfo * getInstrInfo() const override
 
unsigned getMaxWorkGroupsPerCU(unsigned FlatWorkGroupSize) const override
 
bool AutoWaitcntBeforeBarrier
 
bool hasDot1Insts() const
 
bool hasDot3Insts() const
 
unsigned getConstantBusLimit(unsigned Opcode) const
 
bool hasMADIntraFwdBug() const
 
bool hasVALUMaskWriteHazard() const
 
const InlineAsmLowering * getInlineAsmLowering() const override
 
bool hasAutoWaitcntBeforeBarrier() const
 
bool hasNSAClauseBug() const
 
bool hasAtomicFaddRtnInsts() const
 
unsigned getTotalNumSGPRs() const
 
bool hasGFX1250Insts() const
 
bool HasLdsBarrierArriveAtomic
 
const InstrItineraryData * getInstrItineraryData() const override
 
bool hasSafeSmemPrefetch() const
 
void adjustSchedDependency(SUnit *Def, int DefOpIdx, SUnit *Use, int UseOpIdx, SDep &Dep, const TargetSchedModel *SchedModel) const override
 
void overridePostRASchedPolicy(MachineSchedPolicy &Policy, const SchedRegion &Region) const override
 
bool HasShaderCyclesHiLoRegisters
 
unsigned getMaxLocalMemSizeWithWaveCount(unsigned WaveCount, const Function &) const
Return the amount of LDS that can be used that will not restrict the occupancy lower than WaveCount.
 
bool needsAlignedVGPRs() const
Return if operations acting on VGPR tuples require even alignment.
 
bool hasGFX10_3Insts() const
 
Align getStackAlignment() const
 
bool privateMemoryResourceIsRangeChecked() const
 
bool hasScalarSubwordLoads() const
 
bool hasDot11Insts() const
 
bool enableFlatScratch() const
 
bool hasDsAtomicAsyncBarrierArriveB64PipeBug() const
 
bool hasMin3Max3PKF16() const
 
bool hasUnalignedBufferAccess() const
 
bool hasOffset3fBug() const
 
bool hasDwordx3LoadStores() const
 
bool hasSignedScratchOffsets() const
 
bool HasPrivEnabledTrap2NopBug
 
bool hasGlobalAddTidInsts() const
 
bool hasSGPRInitBug() const
 
bool hasFlatScrRegister() const
 
bool hasFmaMixBF16Insts() const
 
bool hasGetPCZeroExtension() const
 
bool hasPermLane64() const
 
bool HasBVHDualAndBVH8Insts
 
bool requiresNopBeforeDeallocVGPRs() const
 
unsigned getMinNumVGPRs(unsigned WavesPerEU, unsigned DynamicVGPRBlockSize) const
 
bool hasVMemToLDSLoad() const
 
bool supportsGetDoorbellID() const
 
bool supportsWave32() const
 
bool hasVcmpxExecWARHazard() const
 
bool isTgSplitEnabled() const
 
bool hasFlatAtomicFaddF32Inst() const
 
bool hasKernargPreload() const
 
unsigned getMaxNumAGPRs(const Function &F) const
 
bool hasReadM0MovRelInterpHazard() const
 
bool isDynamicVGPREnabled() const
 
const SIRegisterInfo * getRegisterInfo() const override
 
bool hasRequiredExportPriority() const
 
bool hasDOTOpSelHazard() const
 
bool hasLdsWaitVMSRC() const
 
bool hasMSAALoadDstSelBug() const
 
const TargetRegisterClass * getBoolRC() const
 
unsigned getBaseMaxNumVGPRs(const Function &F, std::pair< unsigned, unsigned > NumVGPRBounds) const
 
bool hasFmaakFmamkF32Insts() const
 
bool HasMinimum3Maximum3F32
 
InstructionSelector * getInstructionSelector() const override
 
unsigned getVGPREncodingGranule() const
 
bool NegativeUnalignedScratchOffsetBug
 
bool hasHardClauses() const
 
bool hasExtendedWaitCounts() const
 
bool hasBVHDualAndBVH8Insts() const
 
bool hasMinimum3Maximum3PKF16() const
 
bool hasLshlAddU64Inst() const
 
bool hasLDSMisalignedBug() const
 
bool HasPartialNSAEncoding
 
bool d16PreservesUnusedBits() const
 
bool hasFmacF64Inst() const
 
bool RequiresWaitsBeforeSystemScopeStores
 
bool hasXF32Insts() const
 
bool hasInstPrefetch() const
 
bool hasAddPC64Inst() const
 
unsigned maxHardClauseLength() const
 
bool hasAshrPkInsts() const
 
bool isMesaGfxShader(const Function &F) const
 
bool hasVcmpxPermlaneHazard() const
 
bool hasUserSGPRInit16Bug() const
 
bool DynamicVGPRBlockSize32
 
bool hasExportInsts() const
 
bool hasVINTERPEncoding() const
 
bool hasGloballyAddressableScratch() const
 
const AMDGPURegisterBankInfo * getRegBankInfo() const override
 
bool hasAddSubU64Insts() const
 
bool hasLegacyGeometry() const
 
bool has64BitLiterals() const
 
TrapHandlerAbi getTrapHandlerAbi() const
 
bool isCuModeEnabled() const
 
bool hasScalarAtomics() const
 
const SIFrameLowering * getFrameLowering() const override
 
bool hasUnalignedScratchAccess() const
 
bool zeroesHigh16BitsOfDest(unsigned Opcode) const
Returns if the result of this instruction with a 16-bit result returned in a 32-bit register implicit...
 
bool hasMinimum3Maximum3F16() const
 
bool HasMinimum3Maximum3F16
 
bool hasSDWAOutModsVOPC() const
 
bool hasAtomicFMinFMaxF32GlobalInsts() const
 
unsigned getBaseMaxNumSGPRs(const Function &F, std::pair< unsigned, unsigned > WavesPerEU, unsigned PreloadedSGPRs, unsigned ReservedNumSGPRs) const
 
bool hasLdsBarrierArriveAtomic() const
 
bool hasGFX950Insts() const
 
bool has45BitNumRecordsBufferResource() const
 
const AMDGPU::IsaInfo::AMDGPUTargetID & getTargetID() const
 
unsigned getMaxNumPreloadedSGPRs() const
 
bool hasAtomicCSubNoRtnInsts() const
 
bool hasScalarFlatScratchInsts() const
 
GCNSubtarget & initializeSubtargetDependencies(const Triple &TT, StringRef GPU, StringRef FS)
 
bool has12DWordStoreHazard() const
 
bool hasVALUPartialForwardingHazard() const
 
bool hasNoDataDepHazard() const
 
void overrideSchedPolicy(MachineSchedPolicy &Policy, const SchedRegion &Region) const override
 
bool useVGPRBlockOpsForCSR() const
 
bool HasTensorCvtLutInsts
 
std::pair< unsigned, unsigned > computeOccupancy(const Function &F, unsigned LDSSize=0, unsigned NumSGPRs=0, unsigned NumVGPRs=0) const
Subtarget's minimum/maximum occupancy, in number of waves per EU, that can be achieved when the only ...
 
bool hasUnalignedDSAccess() const
 
bool hasAddMinMaxInsts() const
 
bool needsKernArgPreloadProlog() const
 
bool hasRestrictedSOffset() const
 
bool hasMin3Max3_16() const
 
bool hasGFX10_AEncoding() const
 
bool hasFP8E5M3Insts() const
 
bool hasFlatSegmentOffsetBug() const
 
unsigned getMaxNumVGPRs(unsigned WavesPerEU, unsigned DynamicVGPRBlockSize) const
 
unsigned getVGPRAllocGranule(unsigned DynamicVGPRBlockSize) const
 
bool hasEmulatedSystemScopeAtomics() const
 
bool hasMadU64U32NoCarry() const
 
unsigned getSetRegWaitStates() const
Number of hazard wait states for s_setreg_b32/s_setreg_imm32_b32.
 
const SITargetLowering * getTargetLowering() const override
 
bool HasVcmpxPermlaneHazard
 
bool hasPackedFP32Ops() const
 
bool hasTransForwardingHazard() const
 
bool hasDot6Insts() const
 
bool hasGFX940Insts() const
 
bool hasFullRate64Ops() const
 
bool hasScalarStores() const
 
bool isTrapHandlerEnabled() const
 
bool enableMachineScheduler() const override
 
bool hasLDSFPAtomicAddF64() const
 
bool HasAtomicFlatPkAdd16Insts
 
bool hasFlatGlobalInsts() const
 
bool HasGloballyAddressableScratch
 
bool hasDX10ClampMode() const
 
unsigned getNSAThreshold(const MachineFunction &MF) const
 
bool HasAtomicFMinFMaxF32GlobalInsts
 
bool getScalarizeGlobalBehavior() const
 
bool HasAtomicFMinFMaxF32FlatInsts
 
bool HasPseudoScalarTrans
 
bool hasReadM0LdsDmaHazard() const
 
bool hasScalarSMulU64() const
 
unsigned getKnownHighZeroBitsForFrameIndex() const
Return the number of high bits known to be zero for a frame index.
 
bool hasScratchBaseForwardingHazard() const
 
bool HasShaderCyclesRegister
 
bool hasIntMinMax64() const
 
bool hasShaderCyclesHiLoRegisters() const
 
bool HasDefaultComponentBroadcast
 
bool hasScalarPackInsts() const
 
bool hasNSAEncoding() const
 
bool requiresDisjointEarlyClobberAndUndef() const override
 
bool hasVALUReadSGPRHazard() const
 
bool hasSMemRealTime() const
 
bool hasFlatAddressSpace() const
 
bool hasDPPBroadcasts() const
 
bool usePRTStrictNull() const
 
bool hasVmemPrefInsts() const
 
unsigned getAddressableNumVGPRs(unsigned DynamicVGPRBlockSize) const
 
bool HasFP8ConversionInsts
 
bool hasInstFwdPrefetchBug() const
 
bool hasAtomicFMinFMaxF64GlobalInsts() const
 
unsigned getReservedNumSGPRs(const MachineFunction &MF) const
 
bool hasUnalignedScratchAccessEnabled() const
 
bool hasNullExportTarget() const
Return true if the target's EXP instruction supports the NULL export target.
 
bool UnalignedScratchAccess
 
bool hasAtomicFlatPkAdd16Insts() const
 
bool HasImageGather4D16Bug
 
bool hasDot13Insts() const
 
bool ldsRequiresM0Init() const
Return if most LDS instructions have an m0 use that require m0 to be initialized.
 
bool HasSMEMtoVectorWriteHazard
 
bool HasAtomicFaddNoRtnInsts
 
bool hasSMEMtoVectorWriteHazard() const
 
bool useAA() const override
 
bool hasVGPRIndexMode() const
 
bool HasAtomicBufferGlobalPkAddF16Insts
 
unsigned getOccupancyWithNumVGPRs(unsigned VGPRs, unsigned DynamicVGPRBlockSize) const
Return the maximum number of waves per SIMD for kernels using VGPRs VGPRs.
 
bool hasUnalignedBufferAccessEnabled() const
 
bool isWaveSizeKnown() const
Returns if the wavesize of this subtarget is known reliable.
 
unsigned getMaxPrivateElementSize(bool ForBufferRSrc=false) const
 
unsigned getMinFlatWorkGroupSize() const override
 
bool HasAtomicCSubNoRtnInsts
 
bool hasImageInsts() const
 
bool HasAtomicDsPkAdd16Insts
 
bool hasImageGather4D16Bug() const
 
bool HasRequiredExportPriority
 
bool hasDot10Insts() const
 
bool hasSPackHL() const
Return true if the target has the S_PACK_HL_B32_B16 instruction.
 
bool hasVMEMtoScalarWriteHazard() const
 
bool hasCvtFP8VOP1Bug() const
 
bool supportsMinMaxDenormModes() const
 
bool supportsWave64() const
 
bool RelaxedBufferOOBMode
 
bool HasAtomicBufferPkAddBF16Inst
 
bool hasNegativeUnalignedScratchOffsetBug() const
 
bool hasFormattedMUBUFInsts() const
 
bool hasFlatScratchSVSMode() const
 
bool HasMSAALoadDstSelBug
 
bool hasHalfRate64Ops() const
 
bool hasAtomicFaddInsts() const
 
bool HasAtomicBufferGlobalPkAddF16NoRtnInsts
 
bool HasMinimum3Maximum3PKF16
 
bool hasPermlane16Swap() const
 
bool hasNSAtoVMEMBug() const
 
bool HasArchitectedFlatScratch
 
unsigned getNSAMaxSize(bool HasSampler=false) const
 
bool hasAtomicBufferGlobalPkAddF16NoRtnInsts() const
 
bool hasMIMG_R128() const
 
unsigned getOccupancyWithNumSGPRs(unsigned SGPRs) const
Return the maximum number of waves per SIMD for kernels using SGPRs SGPRs.
 
bool hasAtomicBufferPkAddBF16Inst() const
 
bool HasAgentScopeFineGrainedRemoteMemoryAtomics
 
unsigned getMaxFlatWorkGroupSize() const override
 
bool hasDot5Insts() const
 
unsigned getMaxNumUserSGPRs() const
 
bool hasTransposeLoadF4F6Insts() const
 
bool hasMadU32Inst() const
 
bool hasAtomicFaddNoRtnInsts() const
 
unsigned MaxHardClauseLength
The maximum number of instructions that may be placed within an S_CLAUSE, which is one greater than t...
 
bool hasPermLaneX16() const
 
bool hasFlatScratchSVSSwizzleBug() const
 
bool hasFlatBufferGlobalAtomicFaddF64Inst() const
 
bool HasEmulatedSystemScopeAtomics
 
bool hasNoF16PseudoScalarTransInlineConstants() const
 
bool hasScalarDwordx3Loads() const
 
bool hasVDecCoExecHazard() const
 
bool hasSignedGVSOffset() const
 
bool requiresWaitXCntBeforeAtomicStores() const
 
bool hasLDSFPAtomicAddF32() const
 
unsigned getWavesPerEUForWorkGroup(unsigned FlatWorkGroupSize) const override
 
bool haveRoundOpsF64() const
Have v_trunc_f64, v_ceil_f64, v_rndne_f64.
 
bool hasDelayAlu() const
Return true if the target has the S_DELAY_ALU instruction.
 
bool hasReadM0SendMsgHazard() const
 
bool AssemblerPermissiveWavesize
 
bool hasDot8Insts() const
 
bool hasVectorMulU64() const
 
bool hasScalarMulHiInsts() const
 
bool hasPseudoScalarTrans() const
 
const LegalizerInfo * getLegalizerInfo() const override
 
bool requiresWaitIdleBeforeGetReg() const
 
bool hasPointSampleAccel() const
 
bool hasDot12Insts() const
 
bool hasDS96AndDS128() const
 
bool HasAtomicFMinFMaxF64GlobalInsts
 
bool hasReadM0LdsDirectHazard() const
 
bool useFlatForGlobal() const
 
static bool hasHalfRate64Ops(const TargetSubtargetInfo &STI)
 
bool hasVOPDInsts() const
 
bool hasGFX10_BEncoding() const
 
Generation getGeneration() const
 
GCNSubtarget(const Triple &TT, StringRef GPU, StringRef FS, const GCNTargetMachine &TM)
 
unsigned getMaxNumSGPRs(unsigned WavesPerEU, bool Addressable) const
 
bool hasVOP3Literal() const
 
bool hasAtomicBufferGlobalPkAddF16Insts() const
 
std::pair< unsigned, unsigned > getMaxNumVectorRegs(const Function &F) const
Return a pair of maximum numbers of VGPRs and AGPRs that meet the number of waves per execution unit ...
 
bool hasNoSdstCMPX() const
 
bool isXNACKEnabled() const
 
bool hasScalarAddSub64() const
 
bool hasSplitBarriers() const
 
bool hasUnpackedD16VMem() const
 
bool enableEarlyIfConversion() const override
 
bool hasSMRDReadVALUDefHazard() const
A read of an SGPR by SMRD instruction requires 4 wait states when the SGPR was written by a VALU inst...
 
bool hasSGetShaderCyclesInst() const
 
bool hasRFEHazards() const
 
bool hasVMEMReadSGPRVALUDefHazard() const
A read of an SGPR by a VMEM instruction requires 5 wait states when the SGPR was written by a VALU In...
 
bool hasFlatScratchSTMode() const
 
unsigned getBaseReservedNumSGPRs(const bool HasFlatScratch) const
 
bool hasGWSSemaReleaseAll() const
 
bool hasDPALU_DPP() const
 
bool enableSIScheduler() const
 
bool hasAtomicGlobalPkAddBF16Inst() const
 
bool HasVMEMtoScalarWriteHazard
 
bool HasAtomicGlobalPkAddBF16Inst
 
bool hasUnalignedAccessMode() const
 
unsigned getAddressableNumSGPRs() const
 
bool hasReadVCCZBug() const
Extra wait hazard is needed in some cases before s_cbranch_vccnz/s_cbranch_vccz.
 
bool HasAtomicFaddRtnInsts
 
bool HasRestrictedSOffset
 
unsigned getDynamicVGPRBlockSize() const
 
bool hasFmaMixInsts() const
 
bool HasVALUTransUseHazard
 
bool hasPackedTID() const
 
bool setRegModeNeedsVNOPs() const
 
bool HasVcmpxExecWARHazard
 
bool hasAddNoCarry() const
 
bool ScalarFlatScratchInsts
 
bool requiresWaitsBeforeSystemScopeStores() const
 
bool hasVALUTransUseHazard() const
 
bool hasShaderCyclesRegister() const
 
bool HasMFMAInlineLiteralBug
 
bool HasVmemWriteVgprInOrder
 
bool UnalignedBufferAccess
 
bool hasSALUFloatInsts() const
 
bool EnableUnsafeDSOffsetFolding
 
bool isPreciseMemoryEnabled() const
 
bool hasDPPSrc1SGPR() const
 
unsigned getMaxWaveScratchSize() const
 
bool HasDefaultComponentZero
 
bool HasMemoryAtomicFaddF32DenormalSupport
 
bool hasMTBUFInsts() const
 
bool hasDot4Insts() const
 
bool flatScratchIsArchitected() const
 
bool hasPartialNSAEncoding() const
 
bool HasInstFwdPrefetchBug
 
void checkSubtargetFeatures(const Function &F) const
Diagnose inconsistent subtarget features before attempting to codegen function F.
 
bool Has1024AddressableVGPRs
 
bool hasSetPrioIncWgInst() const
 
const SelectionDAGTargetInfo * getSelectionDAGInfo() const override
 
bool hasDot9Insts() const
 
bool UseBlockVGPROpsForCSR
 
bool hasAtomicCSub() const
 
AMDGPU::IsaInfo::AMDGPUTargetID TargetID
 
bool hasDefaultComponentBroadcast() const
 
bool requiresCodeObjectV6() const
 
const CallLowering * getCallLowering() const override
 
bool hasLdsDirect() const
 
bool hasGWSAutoReplay() const
 
bool HasFlatBufferGlobalAtomicFaddF64Inst
 
static unsigned getNumUserSGPRForField(UserSGPRID ID)
 
bool hasKernargSegmentPtr() const
 
void allocKernargPreloadSGPRs(unsigned NumSGPRs)
 
bool hasDispatchID() const
 
bool hasPrivateSegmentBuffer() const
 
unsigned getNumFreeUserSGPRs()
 
bool hasImplicitBufferPtr() const
 
unsigned getNumKernargPreloadSGPRs() const
 
bool hasPrivateSegmentSize() const
 
unsigned getNumUsedUserSGPRs() const
 
bool hasDispatchPtr() const
 
GCNUserSGPRUsageInfo(const Function &F, const GCNSubtarget &ST)
 
bool hasFlatScratchInit() const
 
Itinerary data supplied by a subtarget to be used by a target.
 
const TargetRegisterClass * getBoolRC() const
 
Scheduling unit. This is a node in the scheduling DAG.
 
Targets can subclass this to parameterize the SelectionDAG lowering and instruction selection process...
 
StringRef - Represent a constant reference to a string, i.e.
 
Provide an instruction scheduling machine model to CodeGen passes.
 
TargetSubtargetInfo - Generic base class for all target subtargets.
 
Triple - Helper class for working with autoconf configuration names.
 
A Use represents the edge between a Value definition and its users.
 
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
 
unsigned getVGPREncodingGranule(const MCSubtargetInfo *STI, std::optional< bool > EnableWavefrontSize32)
 
unsigned getTotalNumVGPRs(const MCSubtargetInfo *STI)
 
unsigned getWavesPerEUForWorkGroup(const MCSubtargetInfo *STI, unsigned FlatWorkGroupSize)
 
unsigned getMaxWorkGroupsPerCU(const MCSubtargetInfo *STI, unsigned FlatWorkGroupSize)
 
unsigned getMaxFlatWorkGroupSize(const MCSubtargetInfo *STI)
 
unsigned getSGPREncodingGranule(const MCSubtargetInfo *STI)
 
unsigned getAddressableNumSGPRs(const MCSubtargetInfo *STI)
 
unsigned getMinNumSGPRs(const MCSubtargetInfo *STI, unsigned WavesPerEU)
 
unsigned getMinFlatWorkGroupSize(const MCSubtargetInfo *STI)
 
unsigned getVGPRAllocGranule(const MCSubtargetInfo *STI, unsigned DynamicVGPRBlockSize, std::optional< bool > EnableWavefrontSize32)
 
unsigned getMaxNumSGPRs(const MCSubtargetInfo *STI, unsigned WavesPerEU, bool Addressable)
 
unsigned getMinWavesPerEU(const MCSubtargetInfo *STI)
 
unsigned getMaxNumVGPRs(const MCSubtargetInfo *STI, unsigned WavesPerEU, unsigned DynamicVGPRBlockSize)
 
unsigned getSGPRAllocGranule(const MCSubtargetInfo *STI)
 
unsigned getMinNumVGPRs(const MCSubtargetInfo *STI, unsigned WavesPerEU, unsigned DynamicVGPRBlockSize)
 
unsigned getAddressableNumArchVGPRs(const MCSubtargetInfo *STI)
 
unsigned getTotalNumSGPRs(const MCSubtargetInfo *STI)
 
unsigned getAddressableNumVGPRs(const MCSubtargetInfo *STI, unsigned DynamicVGPRBlockSize)
 
LLVM_READNONE constexpr bool isShader(CallingConv::ID CC)
 
unsigned getMaxNumUserSGPRs(const MCSubtargetInfo &STI)
 
unsigned getNSAMaxSize(const MCSubtargetInfo &STI, bool HasSampler)
 
unsigned ID
LLVM IR allows to use arbitrary numbers as calling convention identifiers.
 
This is an optimization pass for GlobalISel generic memory operations.
 
int countl_zero(T Val)
Count number of 0's from the most significant bit to the least stopping at the first 1.
 
This struct is a compact representation of a valid (non-zero power of two) alignment.
 
Define a generic scheduling policy for targets that don't provide their own MachineSchedStrategy.
 
A region of an MBB for scheduling.