LLVM: llvm::AMDGPULegalizerInfo Class Reference (original) (raw)

#include "[Target/AMDGPU/AMDGPULegalizerInfo.h](AMDGPULegalizerInfo%5F8h%5Fsource.html)"

Public Member Functions
AMDGPULegalizerInfo (const GCNSubtarget &ST, const GCNTargetMachine &TM)
bool legalizeCustom (LegalizerHelper &Helper, MachineInstr &MI, LostDebugLocObserver &LocObserver) const override
Called for instructions with the Custom LegalizationAction.
Register getSegmentAperture (unsigned AddrSpace, MachineRegisterInfo &MRI, MachineIRBuilder &B) const
bool legalizeAddrSpaceCast (MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B) const
bool legalizeFroundeven (MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B) const
bool legalizeFceil (MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B) const
bool legalizeFrem (MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B) const
bool legalizeIntrinsicTrunc (MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B) const
bool legalizeITOFP (MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B, bool Signed) const
bool legalizeFPTOI (MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B, bool Signed) const
bool legalizeMinNumMaxNum (LegalizerHelper &Helper, MachineInstr &MI) const
bool legalizeExtractVectorElt (MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B) const
bool legalizeInsertVectorElt (MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B) const
bool legalizeSinCos (MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B) const
bool buildPCRelGlobalAddress (Register DstReg, LLT PtrTy, MachineIRBuilder &B, const GlobalValue *GV, int64_t Offset, unsigned GAFlags=SIInstrInfo::MO_NONE) const
void buildAbsGlobalAddress (Register DstReg, LLT PtrTy, MachineIRBuilder &B, const GlobalValue *GV, MachineRegisterInfo &MRI) const
bool legalizeGlobalValue (MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B) const
bool legalizeLoad (LegalizerHelper &Helper, MachineInstr &MI) const
bool legalizeStore (LegalizerHelper &Helper, MachineInstr &MI) const
bool legalizeFMad (MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B) const
bool legalizeAtomicCmpXChg (MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B) const
std::pair< Register, Register > getScaledLogInput (MachineIRBuilder &B, Register Src, unsigned Flags) const
bool legalizeFlog2 (MachineInstr &MI, MachineIRBuilder &B) const
bool legalizeFlogCommon (MachineInstr &MI, MachineIRBuilder &B) const
bool legalizeFlogUnsafe (MachineIRBuilder &B, Register Dst, Register Src, bool IsLog10, unsigned Flags) const
bool legalizeFExp2 (MachineInstr &MI, MachineIRBuilder &B) const
bool legalizeFExpUnsafeImpl (MachineIRBuilder &B, Register Dst, Register Src, unsigned Flags, bool IsExp10) const
bool legalizeFExpUnsafe (MachineIRBuilder &B, Register Dst, Register Src, unsigned Flags) const
bool legalizeFExp10Unsafe (MachineIRBuilder &B, Register Dst, Register Src, unsigned Flags) const
bool legalizeFExp (MachineInstr &MI, MachineIRBuilder &B) const
bool legalizeFPow (MachineInstr &MI, MachineIRBuilder &B) const
bool legalizeFFloor (MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B) const
bool legalizeBuildVector (MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B) const
void buildMultiply (LegalizerHelper &Helper, MutableArrayRef< Register > Accum, ArrayRef< Register > Src0, ArrayRef< Register > Src1, bool UsePartialMad64_32, bool SeparateOddAlignedProducts) const
bool legalizeMul (LegalizerHelper &Helper, MachineInstr &MI) const
bool legalizeCTLZ_CTTZ (MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B) const
bool legalizeCTLZ_ZERO_UNDEF (MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B) const
void buildLoadInputValue (Register DstReg, MachineIRBuilder &B, const ArgDescriptor *Arg, const TargetRegisterClass *ArgRC, LLT ArgTy) const
bool legalizeWorkGroupId (MachineInstr &MI, MachineIRBuilder &B, AMDGPUFunctionArgInfo::PreloadedValue ClusterIdPV, AMDGPUFunctionArgInfo::PreloadedValue ClusterMaxIdPV, AMDGPUFunctionArgInfo::PreloadedValue ClusterWorkGroupIdPV) const
bool loadInputValue (Register DstReg, MachineIRBuilder &B, AMDGPUFunctionArgInfo::PreloadedValue ArgType) const
bool legalizePointerAsRsrcIntrin (MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B) const
To create a buffer resource from a 64-bit pointer, mask off the upper 32 bits of the pointer and replace them with the stride argument, then merge_values everything together.
bool legalizePreloadedArgIntrin (MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B, AMDGPUFunctionArgInfo::PreloadedValue ArgType) const
bool legalizeWorkitemIDIntrinsic (MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B, unsigned Dim, AMDGPUFunctionArgInfo::PreloadedValue ArgType) const
MachinePointerInfo getKernargSegmentPtrInfo (MachineFunction &MF) const
Register getKernargParameterPtr (MachineIRBuilder &B, int64_t Offset) const
bool legalizeKernargMemParameter (MachineInstr &MI, MachineIRBuilder &B, uint64_t Offset, Align Alignment=Align(4)) const
Legalize a value that's loaded from kernel arguments.
bool legalizeUnsignedDIV_REM (MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B) const
void legalizeUnsignedDIV_REM32Impl (MachineIRBuilder &B, Register DstDivReg, Register DstRemReg, Register Num, Register Den) const
void legalizeUnsignedDIV_REM64Impl (MachineIRBuilder &B, Register DstDivReg, Register DstRemReg, Register Num, Register Den) const
bool legalizeSignedDIV_REM (MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B) const
bool legalizeFDIV (MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B) const
bool legalizeFDIV16 (MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B) const
bool legalizeFDIV32 (MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B) const
bool legalizeFDIV64 (MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B) const
bool legalizeFFREXP (MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B) const
bool legalizeFastUnsafeFDIV (MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B) const
bool legalizeFastUnsafeFDIV64 (MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B) const
bool legalizeFDIVFastIntrin (MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B) const
bool legalizeFSQRTF16 (MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B) const
bool legalizeFSQRTF32 (MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B) const
bool legalizeFSQRTF64 (MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B) const
bool legalizeFSQRT (MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B) const
bool legalizeRsqClampIntrinsic (MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B) const
bool getImplicitArgPtr (Register DstReg, MachineRegisterInfo &MRI, MachineIRBuilder &B) const
bool legalizeImplicitArgPtr (MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B) const
bool getLDSKernelId (Register DstReg, MachineRegisterInfo &MRI, MachineIRBuilder &B) const
bool legalizeLDSKernelId (MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B) const
bool legalizeIsAddrSpace (MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B, unsigned AddrSpace) const
std::pair< Register, unsigned > splitBufferOffsets (MachineIRBuilder &B, Register OrigOffset) const
Register handleD16VData (MachineIRBuilder &B, MachineRegisterInfo &MRI, Register Reg, bool ImageStore=false) const
Handle register layout difference for f16 images for some subtargets.
Register fixStoreSourceType (MachineIRBuilder &B, Register VData, LLT MemTy, bool IsFormat) const
bool legalizeBufferStore (MachineInstr &MI, LegalizerHelper &Helper, bool IsTyped, bool IsFormat) const
bool legalizeBufferLoad (MachineInstr &MI, LegalizerHelper &Helper, bool IsFormat, bool IsTyped) const
bool legalizeBufferAtomic (MachineInstr &MI, MachineIRBuilder &B, Intrinsic::ID IID) const
bool legalizeBVHIntersectRayIntrinsic (MachineInstr &MI, MachineIRBuilder &B) const
bool legalizeBVHDualOrBVH8IntersectRayIntrinsic (MachineInstr &MI, MachineIRBuilder &B) const
bool legalizeLaneOp (LegalizerHelper &Helper, MachineInstr &MI, Intrinsic::ID IID) const
bool legalizeBVHIntrinsic (MachineInstr &MI, MachineIRBuilder &B) const
bool legalizeStackSave (MachineInstr &MI, MachineIRBuilder &B) const
bool legalizeWaveID (MachineInstr &MI, MachineIRBuilder &B) const
bool legalizeConstHwRegRead (MachineInstr &MI, MachineIRBuilder &B, AMDGPU::Hwreg::Id HwReg, unsigned LowBit, unsigned Width) const
bool legalizeGetFPEnv (MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B) const
bool legalizeSetFPEnv (MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B) const
bool legalizeImageIntrinsic (MachineInstr &MI, MachineIRBuilder &B, GISelChangeObserver &Observer, const AMDGPU::ImageDimIntrinsicInfo *ImageDimIntr) const
Rewrite image intrinsics to use register layouts expected by the subtarget.
bool legalizeSBufferLoad (LegalizerHelper &Helper, MachineInstr &MI) const
bool legalizeSBufferPrefetch (LegalizerHelper &Helper, MachineInstr &MI) const
bool legalizeTrap (MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B) const
bool legalizeTrapEndpgm (MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B) const
bool legalizeTrapHsaQueuePtr (MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B) const
bool legalizeTrapHsa (MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B) const
bool legalizeDebugTrap (MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B) const
bool legalizeIntrinsic (LegalizerHelper &Helper, MachineInstr &MI) const override
Public Member Functions inherited from llvm::LegalizerInfo
virtual ~LegalizerInfo ()=default
const LegacyLegalizerInfo & getLegacyLegalizerInfo () const
LegacyLegalizerInfo & getLegacyLegalizerInfo ()
unsigned getOpcodeIdxForOpcode (unsigned Opcode) const
unsigned getActionDefinitionsIdx (unsigned Opcode) const
void verify (const MCInstrInfo &MII) const
Perform simple self-diagnostic and assert if there is anything obviously wrong with the actions set up.
const LegalizeRuleSet & getActionDefinitions (unsigned Opcode) const
Get the action definitions for the given opcode.
LegalizeRuleSet & getActionDefinitionsBuilder (unsigned Opcode)
Get the action definition builder for the given opcode.
LegalizeRuleSet & getActionDefinitionsBuilder (std::initializer_list< unsigned > Opcodes)
Get the action definition builder for the given set of opcodes.
void aliasActionDefinitions (unsigned OpcodeTo, unsigned OpcodeFrom)
LegalizeActionStep getAction (const LegalityQuery &Query) const
Determine what action should be taken to legalize the described instruction.
LegalizeActionStep getAction (const MachineInstr &MI, const MachineRegisterInfo &MRI) const
Determine what action should be taken to legalize the given generic instruction.
bool isLegal (const LegalityQuery &Query) const
bool isLegalOrCustom (const LegalityQuery &Query) const
bool isLegal (const MachineInstr &MI, const MachineRegisterInfo &MRI) const
bool isLegalOrCustom (const MachineInstr &MI, const MachineRegisterInfo &MRI) const
virtual unsigned getExtOpcodeForWideningConstant (LLT SmallTy) const
Return the opcode (SEXT/ZEXT/ANYEXT) that should be performed while widening a constant of type SmallTy which targets can override.

Definition at line 30 of file AMDGPULegalizerInfo.h.

Definition at line 688 of file AMDGPULegalizerInfo.cpp.

References llvm::alignTo(), llvm::LegalityPredicates::all(), AllS32Vectors, AllS64Vectors, AllVectors, llvm::LegalizeRuleSet::alwaysLegal(), assert(), llvm::bit_floor(), llvm::LegalizeRuleSet::bitcastIf(), bitcastToRegisterType(), bitcastToVectorElement32(), llvm::AMDGPUAS::BUFFER_FAT_POINTER, llvm::AMDGPUAS::BUFFER_RESOURCE, llvm::AMDGPUAS::BUFFER_STRIDED_POINTER, llvm::LegalizeMutations::changeTo(), llvm::LegalizeRuleSet::clampMaxNumElements(), llvm::LegalizeRuleSet::clampMaxNumElementsStrict(), llvm::LegalizeRuleSet::clampNumElements(), llvm::LegalizeRuleSet::clampScalar(), llvm::LegalizeRuleSet::clampScalarOrElt(), llvm::LegacyLegalizerInfo::computeTables(), llvm::AMDGPUAS::CONSTANT_ADDRESS, llvm::AMDGPUAS::CONSTANT_ADDRESS_32BIT, llvm::LegalizeRuleSet::custom(), llvm::LegalizeRuleSet::customFor(), llvm::LegalizeRuleSet::customIf(), llvm::LegalityPredicates::elementTypeIs(), elementTypeIsLegal(), F32, F64, llvm::LegalizeRuleSet::fewerElementsIf(), fewerEltsToSize64Vector(), llvm::LLT::fixed_vector(), llvm::AMDGPUAS::FLAT_ADDRESS, llvm::LegalizerInfo::getActionDefinitionsBuilder(), llvm::LLT::getAddressSpace(), llvm::LLT::getElementType(), llvm::ElementCount::getFixed(), llvm::LegalizerInfo::getLegacyLegalizerInfo(), llvm::LLT::getNumElements(), llvm::TargetMachine::getPointerSizeInBits(), llvm::LLT::getScalarSizeInBits(), getScalarTypeFromMemDesc(), llvm::SIRegisterInfo::getSGPRClassForBitWidth(), llvm::LLT::getSizeInBits(), llvm::AMDGPUAS::GLOBAL_ADDRESS, llvm::has_single_bit(), hasBufferRsrcWorkaround(), isIllegalRegisterType(), isLoadStoreLegal(), llvm::LegalityPredicates::isPointer(), llvm::LLT::isPointer(), llvm::isPowerOf2_32(), isRegisterClassType(), isRegisterType(), llvm::LegalityPredicates::isScalar(), isSmallOddVector(), isTruncStoreToSizePowerOf2(), llvm::LLT::isVector(), isWideVec16(), llvm::LegalityPredicates::largerThan(), llvm::LegalizeRuleSet::legalFor(), llvm::LegalizeRuleSet::legalForCartesianProduct(), llvm::LegalizeRuleSet::legalIf(), llvm::AMDGPUAS::LOCAL_ADDRESS, llvm::Log2_32_Ceil(), llvm::LegalizeRuleSet::lower(), llvm::LegalizeRuleSet::lowerFor(), llvm::LegalizeRuleSet::lowerIf(), MaxRegisterSize, MaxScalar, llvm::LegalizeRuleSet::maxScalar(), llvm::LegalizeRuleSet::maxScalarIf(), maxSizeForAddrSpace(), llvm::LegalizeRuleSet::minScalar(), llvm::LegalizeRuleSet::minScalarOrElt(), llvm::LegalityQuery::MMODescrs, llvm::LegalizeRuleSet::moreElementsIf(), moreElementsToNextExistingRegClass(), moreEltsToNext32Bit(), llvm::Mul, llvm::NotAtomic, numElementsNotEven(), oneMoreElement(), llvm::LLT::pointer(), llvm::AMDGPUAS::PRIVATE_ADDRESS, llvm::AMDGPUAS::REGION_ADDRESS, S1, S128, S16, S256, S32, S512, S64, S8, llvm::LegalityPredicates::sameSize(), llvm::LLT::scalar(), llvm::LegalizeMutations::scalarize(), llvm::LegalizeRuleSet::scalarize(), llvm::LegalityPredicates::scalarNarrowerThan(), llvm::LegalityPredicates::scalarOrEltNarrowerThan(), llvm::LegalityPredicates::scalarOrEltWiderThan(), llvm::LLT::scalarOrVector(), llvm::LegalizeRuleSet::scalarSameSizeAs(), llvm::AMDGPUSubtarget::SEA_ISLANDS, shouldBitcastLoadStoreType(), shouldWidenLoad(), llvm::LegalityPredicates::sizeIs(), sizeIsMultipleOf32(), llvm::LegalityPredicates::smallerThan(), llvm::LegalityPredicates::typeInSet(), llvm::LegalityPredicates::typeIs(), llvm::LegalityPredicates::typeIsNot(), llvm::LegalityQuery::Types, llvm::LegalizeRuleSet::unsupported(), unsupported(), llvm::LegalizeRuleSet::unsupportedFor(), llvm::LegalizeRuleSet::unsupportedIf(), V16S32, V16S64, V2BF16, V2F16, V2S16, V2S32, V2S64, V2S8, V32S32, V4S16, V4S32, vectorSmallerThan(), vectorWiderThan(), verify, llvm::LegalizeRuleSet::widenScalarIf(), llvm::LegalizeMutations::widenScalarOrEltToNextPow2(), llvm::LegalizeRuleSet::widenScalarToNextMultipleOf(), and llvm::LegalizeRuleSet::widenScalarToNextPow2().

buildAbsGlobalAddress()

buildLoadInputValue()

Definition at line 4512 of file AMDGPULegalizerInfo.cpp.

References assert(), B(), llvm::countr_zero(), llvm::getFunctionLiveInPhysReg(), llvm::ArgDescriptor::getMask(), llvm::ArgDescriptor::getRegister(), llvm::ArgDescriptor::isMasked(), llvm::MCRegister::isPhysical(), llvm::Register::isVirtual(), S32, and llvm::LLT::scalar().

Referenced by loadInputValue().

buildMultiply()

Definition at line 4117 of file AMDGPULegalizerInfo.cpp.

References llvm::Add, assert(), B(), llvm::MutableArrayRef< T >::drop_front(), llvm::GISelValueTracking::getKnownBits(), llvm::LegalizerHelper::getValueTracking(), llvm::Hi, llvm::KnownBits::isZero(), llvm::Lo, llvm::LegalizerHelper::MIRBuilder, llvm::Mul, llvm::MutableArrayRef(), llvm::SmallVectorTemplateBase< T, bool >::push_back(), Register, S1, S32, S64, llvm::LLT::scalar(), and llvm::ArrayRef< T >::size().

Referenced by legalizeMul().

buildPCRelGlobalAddress()

fixStoreSourceType()

getImplicitArgPtr()

getKernargParameterPtr()

getKernargSegmentPtrInfo()

getLDSKernelId()

getScaledLogInput()

getSegmentAperture()

Definition at line 2305 of file AMDGPULegalizerInfo.cpp.

References llvm::AMDGPU::AMDHSA_COV5, assert(), B(), llvm::commonAlignment(), llvm::AMDGPUAS::CONSTANT_ADDRESS, llvm::AMDGPU::getAMDHSACodeObjectVersion(), llvm::MachineFunction::getFunction(), getKernargSegmentPtrInfo(), llvm::MachineFunction::getMachineMemOperand(), llvm::GlobalValue::getParent(), llvm::MachineFunction::getSubtarget(), llvm::MachinePointerInfo::getWithOffset(), llvm::AMDGPUFunctionArgInfo::KERNARG_SEGMENT_PTR, loadInputValue(), llvm::AMDGPUAS::LOCAL_ADDRESS, llvm::MachineMemOperand::MODereferenceable, llvm::MachineMemOperand::MOInvariant, llvm::MachineMemOperand::MOLoad, MRI, llvm::Offset, llvm::LLT::pointer(), llvm::AMDGPUAS::PRIVATE_ADDRESS, llvm::AMDGPUTargetLowering::PRIVATE_BASE, llvm::AMDGPUFunctionArgInfo::QUEUE_PTR, Register, S32, S64, llvm::LLT::scalar(), and llvm::AMDGPUTargetLowering::SHARED_BASE.

Referenced by legalizeAddrSpaceCast(), and legalizeIsAddrSpace().

handleD16VData()

Handle register layout difference for f16 images for some subtargets.

Definition at line 6190 of file AMDGPULegalizerInfo.cpp.

References assert(), B(), llvm::LLT::fixed_vector(), llvm::LLT::getElementType(), llvm::LLT::getNumElements(), I, llvm::LLT::isVector(), llvm_unreachable, MRI, llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::SmallVectorImpl< T >::resize(), S16, S32, and llvm::LLT::scalar().

Referenced by fixStoreSourceType(), and legalizeImageIntrinsic().

legalizeAddrSpaceCast()

Definition at line 2412 of file AMDGPULegalizerInfo.cpp.

References llvm::AllOnes, assert(), B(), llvm::cast(), llvm::AMDGPUAS::CONSTANT_ADDRESS_32BIT, llvm::AMDGPUAS::FLAT_ADDRESS, llvm::LLT::getAddressSpace(), llvm::MachineFunction::getInfo(), llvm::AMDGPUTargetMachine::getNullPointerValue(), getReg(), getSegmentAperture(), llvm::LLT::getSizeInBits(), llvm::MachineFunction::getTarget(), llvm::CmpInst::ICMP_NE, llvm::isa(), isKnownNonNull(), llvm::AMDGPUTargetMachine::isNoopAddrSpaceCast(), llvm::Register::isValid(), llvm::LLT::isVector(), llvm::AMDGPUAS::LOCAL_ADDRESS, MI, MRI, llvm::AMDGPUAS::PRIVATE_ADDRESS, Register, S32, S64, llvm::LLT::scalar(), and llvm::Sub.

Referenced by legalizeCustom(), and legalizeIntrinsic().

legalizeAtomicCmpXChg()

legalizeBufferAtomic()

legalizeBufferLoad()

Definition at line 6397 of file AMDGPULegalizerInfo.cpp.

References assert(), B(), llvm::LegalizerHelper::bitcastDst(), buildBufferLoad(), castBufferRsrcArgToV4I32(), castBufferRsrcFromV4I32(), llvm::GISelChangeObserver::changedInstr(), llvm::LLT::changeElementSize(), llvm::GISelChangeObserver::changingInstr(), llvm::divideCeil(), llvm::LLT::fixed_vector(), llvm::Format, getBitcastRegisterType(), llvm::MachineMemOperand::getMemoryType(), llvm::LLT::getScalarType(), llvm::LLT::getSizeInBits(), hasBufferRsrcWorkaround(), I, MI, llvm::LegalizerHelper::MIRBuilder, MRI, N, llvm::LegalizerHelper::Observer, Opc, llvm::SmallVectorTemplateBase< T, bool >::push_back(), S32, llvm::LLT::scalar(), shouldBitcastLoadStoreType(), splitBufferOffsets(), and llvm::SmallVectorImpl< T >::truncate().

Referenced by legalizeIntrinsic().

legalizeBufferStore()

Definition at line 6285 of file AMDGPULegalizerInfo.cpp.

References B(), castBufferRsrcArgToV4I32(), fixStoreSourceType(), llvm::Format, llvm::MachineMemOperand::getMemoryType(), llvm::LLT::getScalarType(), llvm::MachineMemOperand::getSize(), llvm::LLT::getSizeInBits(), llvm::LocationSize::getValue(), MI, llvm::LegalizerHelper::MIRBuilder, MRI, Opc, S32, llvm::LLT::scalar(), and splitBufferOffsets().

Referenced by legalizeIntrinsic().

legalizeBuildVector()

legalizeBVHDualOrBVH8IntersectRayIntrinsic()

Definition at line 7597 of file AMDGPULegalizerInfo.cpp.

References assert(), B(), llvm::cast(), llvm::LLVMContext::diagnose(), llvm::LLT::fixed_vector(), llvm::Function::getContext(), llvm::AMDGPU::getMIMGOpcode(), MI, S32, llvm::LLT::scalar(), and V2S32.

Referenced by legalizeIntrinsic().

legalizeBVHIntersectRayIntrinsic()

Definition at line 7445 of file AMDGPULegalizerInfo.cpp.

References AbstractManglingParser< Derived, Alloc >::Ops, assert(), B(), llvm::LLVMContext::diagnose(), llvm::LLT::fixed_vector(), llvm::Function::getContext(), llvm::AMDGPU::getMIMGOpcode(), llvm::AMDGPU::isGFX11(), llvm::AMDGPU::isGFX11Plus(), llvm::AMDGPU::isGFX12Plus(), MI, MRI, R2, S16, S32, llvm::LLT::scalar(), V2S16, and V3S32.

Referenced by legalizeIntrinsic().

legalizeBVHIntrinsic()

legalizeConstHwRegRead()

legalizeCTLZ_CTTZ()

legalizeCTLZ_ZERO_UNDEF()

legalizeCustom()

Called for instructions with the Custom LegalizationAction.

Reimplemented from llvm::LegalizerInfo.

Definition at line 2201 of file AMDGPULegalizerInfo.cpp.

References B(), legalizeAddrSpaceCast(), legalizeAtomicCmpXChg(), legalizeBuildVector(), legalizeCTLZ_CTTZ(), legalizeCTLZ_ZERO_UNDEF(), legalizeDebugTrap(), legalizeExtractVectorElt(), legalizeFceil(), legalizeFDIV(), legalizeFExp(), legalizeFExp2(), legalizeFFloor(), legalizeFFREXP(), legalizeFlog2(), legalizeFlogCommon(), legalizeFMad(), legalizeFPow(), legalizeFPTOI(), legalizeFrem(), legalizeFroundeven(), legalizeFSQRT(), legalizeGetFPEnv(), legalizeGlobalValue(), legalizeInsertVectorElt(), legalizeIntrinsicTrunc(), legalizeITOFP(), legalizeLoad(), legalizeMinNumMaxNum(), legalizeMul(), legalizeSetFPEnv(), legalizeSignedDIV_REM(), legalizeSinCos(), legalizeStackSave(), legalizeStore(), legalizeTrap(), legalizeUnsignedDIV_REM(), llvm_unreachable, MI, llvm::LegalizerHelper::MIRBuilder, and MRI.

legalizeDebugTrap()

legalizeExtractVectorElt()

Definition at line 2866 of file AMDGPULegalizerInfo.cpp.

References assert(), B(), llvm::LLT::changeElementType(), llvm::LLT::getElementType(), llvm::getIConstantVRegValWithLookThrough(), llvm::LLT::getNumElements(), llvm::LLT::getSizeInBits(), llvm::LLT::isPointer(), MI, MRI, and llvm::LLT::scalar().

Referenced by legalizeCustom().

legalizeFastUnsafeFDIV()

legalizeFastUnsafeFDIV64()

legalizeFceil()

legalizeFDIV()

legalizeFDIV16()

legalizeFDIV32()

Definition at line 5354 of file AMDGPULegalizerInfo.cpp.

References assert(), B(), llvm::DenormalMode::Dynamic, llvm::DenormalMode::getIEEE(), llvm::SIMachineFunctionInfo::getMode(), legalizeFastUnsafeFDIV(), MI, MRI, llvm::Mul, S1, S32, llvm::LLT::scalar(), SPDenormModeBitField, and toggleSPDenormMode().

Referenced by legalizeFDIV().

legalizeFDIV64()

Definition at line 5441 of file AMDGPULegalizerInfo.cpp.

References llvm::ArrayRef(), B(), llvm::CmpInst::ICMP_EQ, legalizeFastUnsafeFDIV64(), MI, MRI, llvm::Mul, S1, S32, S64, and llvm::LLT::scalar().

Referenced by legalizeFDIV().

legalizeFDIVFastIntrin()

legalizeFExp()

Definition at line 3835 of file AMDGPULegalizerInfo.cpp.

References A(), allowApproxFunc(), assert(), B(), llvm::CallingConv::C, CH, F32, llvm::CmpInst::FCMP_OGT, llvm::CmpInst::FCMP_OLT, llvm::MachineInstr::FmNoInfs, llvm::APFloat::getInf(), getMad(), llvm::APFloatBase::IEEEsingle(), legalizeFExp10Unsafe(), legalizeFExpUnsafe(), legalizeFExpUnsafeImpl(), llvm:🔢:log2ef, MI, MRI, llvm::LLT::scalar(), and X.

Referenced by legalizeCustom().

legalizeFExp10Unsafe()

legalizeFExp2()

legalizeFExpUnsafe()

legalizeFExpUnsafeImpl()

legalizeFFloor()

Definition at line 4026 of file AMDGPULegalizerInfo.cpp.

References assert(), B(), llvm::bit_cast(), F64, llvm::CmpInst::FCMP_ORD, llvm::LLT::float64(), llvm::MachineInstr::FmNoNans, llvm::SIMachineFunctionInfo::getMode(), llvm::SIModeRegisterDefaults::IEEE, MI, MRI, S1, llvm::LLT::scalar(), and stripAnySourceMods().

Referenced by legalizeCustom().

legalizeFFREXP()

legalizeFlog2()

legalizeFlogCommon()

Definition at line 3520 of file AMDGPULegalizerInfo.cpp.

References assert(), B(), llvm::CallingConv::C, CH, F32, llvm::CmpInst::FCMP_OLT, llvm::MachineInstr::FmAfn, llvm::MachineInstr::FmContract, llvm::MachineInstr::FmNoInfs, llvm::MachineInstr::FmNoNans, llvm::APFloat::getInf(), getMad(), getScaledLogInput(), llvm::MachineFunction::getTarget(), llvm::APFloatBase::IEEEsingle(), legalizeFlogUnsafe(), MI, MRI, llvm::TargetOptions::NoNaNsFPMath, llvm::TargetMachine::Options, llvm::LLT::scalar(), X, and Y.

Referenced by legalizeCustom().

legalizeFlogUnsafe()

legalizeFMad()

Definition at line 3353 of file AMDGPULegalizerInfo.cpp.

References assert(), B(), llvm::LLT::float16(), llvm::LLT::float32(), llvm::SIModeRegisterDefaults::FP32Denormals, llvm::SIModeRegisterDefaults::FP64FP16Denormals, llvm::MachineFunction::getInfo(), llvm::SIMachineFunctionInfo::getMode(), llvm::DenormalMode::getPreserveSign(), llvm::LegalizerHelper::Legalized, llvm::LegalizerHelper::lowerFMad(), MI, and MRI.

Referenced by legalizeCustom().

legalizeFPow()

legalizeFPTOI()

Definition at line 2784 of file AMDGPULegalizerInfo.cpp.

References assert(), B(), llvm::bit_cast(), llvm::Hi, llvm::Lo, MI, MRI, llvm::Mul, S32, S64, llvm::LLT::scalar(), and llvm::Signed.

Referenced by legalizeCustom().

legalizeFrem()

legalizeFroundeven()

legalizeFSQRT()

legalizeFSQRTF16()

legalizeFSQRTF32()

Definition at line 5609 of file AMDGPULegalizerInfo.cpp.

References allowApproxFunc(), B(), F32, llvm::CmpInst::FCMP_OGT, llvm::CmpInst::FCMP_OLE, llvm::fcPosInf, llvm::fcZero, MI, MRI, needsDenormHandlingF32(), S1, llvm::LLT::scalar(), and X.

Referenced by legalizeFSQRT().

legalizeFSQRTF64()

Definition at line 5690 of file AMDGPULegalizerInfo.cpp.

References assert(), B(), F64, llvm::CmpInst::FCMP_OLT, llvm::fcPosInf, llvm::fcZero, MI, MRI, S1, S32, llvm::LLT::scalar(), and X.

Referenced by legalizeFSQRT().

legalizeGetFPEnv()

legalizeGlobalValue()

Definition at line 3132 of file AMDGPULegalizerInfo.cpp.

References llvm::AMDGPUMachineFunction::allocateLDSGlobal(), B(), buildAbsGlobalAddress(), buildPCRelGlobalAddress(), llvm::cast(), llvm::AMDGPUAS::CONSTANT_ADDRESS, llvm::LLVMContext::diagnose(), llvm::DS_Warning, llvm::Function::getContext(), llvm::MachineFunction::getFunction(), llvm::MachinePointerInfo::getGOT(), llvm::MachineFunction::getInfo(), llvm::MachineFunction::getMachineMemOperand(), llvm::Value::getName(), llvm::LLT::getSizeInBits(), llvm::GlobalValue::getValueType(), llvm::GlobalValue::hasExternalLinkage(), llvm::AMDGPUMachineFunction::isModuleEntryFunction(), llvm::AMDGPU::isNamedBarrier(), llvm::AMDGPUAS::LOCAL_ADDRESS, MI, llvm::SIInstrInfo::MO_ABS32_LO, llvm::SIInstrInfo::MO_GOTPCREL32, llvm::SIInstrInfo::MO_REL32, llvm::MachineMemOperand::MODereferenceable, llvm::MachineMemOperand::MOInvariant, llvm::MachineMemOperand::MOLoad, MRI, llvm::LLT::pointer(), llvm::AMDGPUAS::REGION_ADDRESS, S32, llvm::LLT::scalar(), llvm::AMDGPUMachineFunction::setDynLDSAlign(), llvm::SITargetLowering::shouldEmitFixup(), llvm::SITargetLowering::shouldEmitPCReloc(), and llvm::SITargetLowering::shouldUseLDSConstAddress().

Referenced by legalizeCustom().

legalizeImageIntrinsic()

Rewrite image intrinsics to use register layouts expected by the subtarget.

Depending on the subtarget, load/store with 16-bit element data need to be rewritten to use the low half of 32-bit registers, or directly use a packed layout. 16-bit addresses should also sometimes be packed into 32-bit registers.

We don't want to directly select image instructions just yet, but also want to exposes all register repacking to the legalizer/combiners. We also don't want a selected instruction entering RegBankSelect. In order to avoid defining a multitude of intermediate image instructions, directly hack on the intrinsic's arguments. In cases like a16 addresses, this requires padding now unnecessary arguments with $noreg.

Definition at line 6823 of file AMDGPULegalizerInfo.cpp.

References llvm::ArrayRef(), assert(), llvm::AMDGPU::MIMGBaseOpcodeInfo::Atomic, llvm::AMDGPU::MIMGBaseOpcodeInfo::AtomicX2, B(), llvm::AMDGPU::ImageDimIntrinsicInfo::BaseOpcode, llvm::AMDGPU::MIMGBaseOpcodeInfo::BaseOpcode, llvm::GISelChangeObserver::changedInstr(), llvm::GISelChangeObserver::changingInstr(), Concat, convertImageAddrToPacked(), llvm::AMDGPU::ImageDimIntrinsicInfo::CoordStart, llvm::MachineOperand::CreateImm(), llvm::AMDGPU::ImageDimIntrinsicInfo::DMaskIndex, llvm::LLT::fixed_vector(), llvm::AMDGPU::MIMGBaseOpcodeInfo::Gather4, llvm::ElementCount::getFixed(), llvm::SrcOp::getImm(), llvm::AMDGPU::getMIMGBaseOpcodeInfo(), llvm::SrcOp::getReg(), llvm::LLT::getScalarType(), llvm::LLT::getSizeInBits(), llvm::AMDGPU::MIMGBaseOpcodeInfo::Gradients, llvm::AMDGPU::ImageDimIntrinsicInfo::GradientStart, handleD16VData(), I, llvm::LLT::isVector(), llvm::make_scope_exit(), MI, MRI, llvm::AMDGPU::MIMGBaseOpcodeInfo::NoReturn, llvm::AMDGPU::ImageDimIntrinsicInfo::NumVAddrs, packImage16bitOpsToDwords(), llvm::popcount(), llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::SmallVectorImpl< T >::resize(), S16, S32, llvm::AMDGPU::MIMGBaseOpcodeInfo::Sampler, llvm::LLT::scalar(), llvm::LLT::scalarOrVector(), llvm::SmallVectorTemplateCommon< T, typename >::size(), llvm::AMDGPU::MIMGBaseOpcodeInfo::Store, V2S16, V4S16, and llvm::AMDGPU::ImageDimIntrinsicInfo::VAddrStart.

Referenced by legalizeIntrinsic().

legalizeImplicitArgPtr()

legalizeInsertVectorElt()

Definition at line 2917 of file AMDGPULegalizerInfo.cpp.

References assert(), B(), llvm::LLT::changeElementType(), llvm::LLT::getElementType(), llvm::getIConstantVRegValWithLookThrough(), llvm::LLT::getNumElements(), llvm::LLT::getSizeInBits(), llvm::LLT::isPointer(), MI, MRI, llvm::SmallVectorTemplateBase< T, bool >::push_back(), and llvm::LLT::scalar().

Referenced by legalizeCustom().

legalizeIntrinsic()

Returns

true if MI is either legal or has been legalized and false if not legal. Return true if MI is either legal or has been legalized and false if not legal.

Reimplemented from llvm::LegalizerInfo.

Definition at line 7738 of file AMDGPULegalizerInfo.cpp.

References assert(), B(), llvm::cast(), llvm::GISelChangeObserver::changedInstr(), llvm::GISelChangeObserver::changingInstr(), llvm::AMDGPUFunctionArgInfo::CLUSTER_WORKGROUP_ID_X, llvm::AMDGPUFunctionArgInfo::CLUSTER_WORKGROUP_ID_Y, llvm::AMDGPUFunctionArgInfo::CLUSTER_WORKGROUP_ID_Z, llvm::AMDGPUFunctionArgInfo::CLUSTER_WORKGROUP_MAX_FLAT_ID, llvm::AMDGPUFunctionArgInfo::CLUSTER_WORKGROUP_MAX_ID_X, llvm::AMDGPUFunctionArgInfo::CLUSTER_WORKGROUP_MAX_ID_Y, llvm::AMDGPUFunctionArgInfo::CLUSTER_WORKGROUP_MAX_ID_Z, llvm::AMDGPUFunctionArgInfo::DISPATCH_ID, llvm::AMDGPUFunctionArgInfo::DISPATCH_PTR, llvm::AMDGPU::getImageDimIntrinsicInfo(), llvm::MachineInstr::getOperand(), llvm::AMDGPU::Hwreg::ID_IB_STS2, llvm::AMDGPUFunctionArgInfo::IMPLICIT_BUFFER_PTR, llvm::AMDGPU::isKernel(), llvm::AMDGPUFunctionArgInfo::KERNARG_SEGMENT_PTR, llvm::AMDGPUFunctionArgInfo::LDS_KERNEL_ID, legalizeAddrSpaceCast(), legalizeBufferAtomic(), legalizeBufferLoad(), legalizeBufferStore(), legalizeBVHDualOrBVH8IntersectRayIntrinsic(), legalizeBVHIntersectRayIntrinsic(), legalizeConstHwRegRead(), legalizeFDIVFastIntrin(), legalizeImageIntrinsic(), legalizeImplicitArgPtr(), legalizeIsAddrSpace(), legalizeKernargMemParameter(), legalizeLaneOp(), legalizePointerAsRsrcIntrin(), legalizePreloadedArgIntrin(), legalizeRsqClampIntrinsic(), legalizeSBufferLoad(), legalizeSBufferPrefetch(), legalizeWaveID(), legalizeWorkGroupId(), legalizeWorkitemIDIntrinsic(), llvm::AMDGPUAS::LOCAL_ADDRESS, llvm::SI::KernelInputOffsets::LOCAL_SIZE_X, llvm::SI::KernelInputOffsets::LOCAL_SIZE_Y, llvm::SI::KernelInputOffsets::LOCAL_SIZE_Z, MI, llvm::LegalizerHelper::MIRBuilder, MRI, llvm::SI::KernelInputOffsets::NGROUPS_X, llvm::SI::KernelInputOffsets::NGROUPS_Y, llvm::SI::KernelInputOffsets::NGROUPS_Z, llvm::LegalizerHelper::Observer, llvm::AMDGPUAS::PRIVATE_ADDRESS, llvm::AMDGPUFunctionArgInfo::QUEUE_PTR, S32, S64, llvm::LLT::scalar(), llvm::MachineOperand::setMBB(), std::swap(), TRI, verifyCFIntrinsic(), llvm::AMDGPUFunctionArgInfo::WORKGROUP_ID_X, llvm::AMDGPUFunctionArgInfo::WORKGROUP_ID_Y, llvm::AMDGPUFunctionArgInfo::WORKGROUP_ID_Z, llvm::AMDGPUFunctionArgInfo::WORKITEM_ID_X, llvm::AMDGPUFunctionArgInfo::WORKITEM_ID_Y, and llvm::AMDGPUFunctionArgInfo::WORKITEM_ID_Z.

legalizeIntrinsicTrunc()

Definition at line 2682 of file AMDGPULegalizerInfo.cpp.

References assert(), B(), extractF64Exponent(), llvm::Hi, llvm::CmpInst::ICMP_SGT, llvm::CmpInst::ICMP_SLT, MI, MRI, S1, S32, S64, and llvm::LLT::scalar().

Referenced by legalizeCustom().

legalizeIsAddrSpace()

Definition at line 6106 of file AMDGPULegalizerInfo.cpp.

References B(), getReg(), getSegmentAperture(), llvm::CmpInst::ICMP_EQ, llvm::CmpInst::ICMP_ULT, MI, MRI, llvm::AMDGPUAS::PRIVATE_ADDRESS, Register, S32, and llvm::LLT::scalar().

Referenced by legalizeIntrinsic().

legalizeITOFP()

legalizeKernargMemParameter()

legalizeLaneOp()

Definition at line 5837 of file AMDGPULegalizerInfo.cpp.

References B(), llvm::LLT::changeElementCount(), llvm::LLT::getElementType(), llvm::ElementCount::getFixed(), llvm::MachineInstrBuilder::getReg(), llvm::LLT::getSizeInBits(), llvm::AMDGPU::isLegalDPALU_DPPControl(), llvm_unreachable, MI, llvm::LegalizerHelper::MIRBuilder, MRI, llvm::SmallVectorTemplateBase< T, bool >::push_back(), S32, llvm::LLT::scalar(), and Size.

Referenced by legalizeIntrinsic().

legalizeLDSKernelId()

legalizeLoad()

Definition at line 3246 of file AMDGPULegalizerInfo.cpp.

References B(), castBufferRsrcFromV4I32(), llvm::GISelChangeObserver::changedInstr(), llvm::GISelChangeObserver::changingInstr(), llvm::AMDGPUAS::CONSTANT_ADDRESS, llvm::AMDGPUAS::CONSTANT_ADDRESS_32BIT, llvm::LLT::getAddressSpace(), llvm::MachineMemOperand::getAlign(), llvm::MachineFunction::getMachineMemOperand(), llvm::MachineMemOperand::getMemoryType(), llvm::LLT::getSizeInBits(), hasBufferRsrcWorkaround(), isRegisterType(), llvm::LLT::isVector(), MI, llvm::LegalizerHelper::MIRBuilder, MRI, llvm::LegalizerHelper::Observer, llvm::LLT::pointer(), llvm::PowerOf2Ceil(), shouldWidenLoad(), llvm::Align::value(), and widenToNextPowerOf2().

Referenced by legalizeCustom().

legalizeMinNumMaxNum()

legalizeMul()

Definition at line 4370 of file AMDGPULegalizerInfo.cpp.

References assert(), B(), buildMultiply(), llvm::AMDGPUSubtarget::GFX10, MI, llvm::LegalizerHelper::MIRBuilder, MRI, llvm::SmallVectorTemplateBase< T, bool >::push_back(), S32, llvm::LLT::scalar(), and Size.

Referenced by legalizeCustom().

legalizePointerAsRsrcIntrin()

legalizePreloadedArgIntrin()

legalizeRsqClampIntrinsic()

legalizeSBufferLoad()

Definition at line 7222 of file AMDGPULegalizerInfo.cpp.

References assert(), B(), llvm::LegalizerHelper::bitcastDst(), castBufferRsrcFromV4I32(), llvm::GISelChangeObserver::changedInstr(), llvm::GISelChangeObserver::changingInstr(), getBitcastRegisterType(), llvm::Function::getContext(), llvm::MachineFunction::getFunction(), llvm::MachineFunction::getMachineMemOperand(), getPow2ScalarType(), getPow2VectorType(), llvm::getTypeForLLT(), hasBufferRsrcWorkaround(), llvm::isPowerOf2_32(), MI, llvm::LegalizerHelper::MIRBuilder, llvm::MachineMemOperand::MODereferenceable, llvm::MachineMemOperand::MOInvariant, llvm::MachineMemOperand::MOLoad, llvm::LegalizerHelper::moreElementsVectorDst(), llvm::LegalizerHelper::Observer, Opc, llvm::LLT::scalar(), shouldBitcastLoadStoreType(), Size, and llvm::LegalizerHelper::widenScalarDst().

Referenced by legalizeIntrinsic().

legalizeSBufferPrefetch()

legalizeSetFPEnv()

legalizeSignedDIV_REM()

legalizeSinCos()

legalizeStackSave()

legalizeStore()

legalizeTrap()

legalizeTrapEndpgm()

Definition at line 7318 of file AMDGPULegalizerInfo.cpp.

References llvm::MachineInstrBuilder::addImm(), llvm::MachineInstrBuilder::addMBB(), llvm::MachineBasicBlock::addSuccessor(), B(), llvm::BuildMI(), llvm::MachineFunction::CreateMachineBasicBlock(), DL, llvm::MachineBasicBlock::end(), llvm::MachineBasicBlock::getParent(), MI, MRI, llvm::MachineFunction::push_back(), llvm::MachineBasicBlock::splitAt(), and llvm::MachineBasicBlock::succ_empty().

Referenced by legalizeTrap().

legalizeTrapHsa()

legalizeTrapHsaQueuePtr()

Definition at line 7347 of file AMDGPULegalizerInfo.cpp.

References llvm::AMDGPU::AMDHSA_COV5, B(), llvm::commonAlignment(), llvm::AMDGPUAS::CONSTANT_ADDRESS, llvm::AMDGPU::getAMDHSACodeObjectVersion(), llvm::MachineFunction::getFunction(), getKernargSegmentPtrInfo(), llvm::MachineFunction::getMachineMemOperand(), llvm::GlobalValue::getParent(), llvm::MachinePointerInfo::getWithOffset(), llvm::RegState::Implicit, llvm::AMDGPUFunctionArgInfo::KERNARG_SEGMENT_PTR, llvm::GCNSubtarget::LLVMAMDHSATrap, loadInputValue(), MI, llvm::MachineMemOperand::MODereferenceable, llvm::MachineMemOperand::MOInvariant, llvm::MachineMemOperand::MOLoad, MRI, llvm::Offset, llvm::LLT::pointer(), llvm::AMDGPUFunctionArgInfo::QUEUE_PTR, llvm::AMDGPUTargetLowering::QUEUE_PTR, S64, and llvm::LLT::scalar().

Referenced by legalizeTrap().

legalizeUnsignedDIV_REM()

legalizeUnsignedDIV_REM32Impl()

legalizeUnsignedDIV_REM64Impl()

legalizeWaveID()

legalizeWorkGroupId()

Definition at line 4544 of file AMDGPULegalizerInfo.cpp.

References B(), llvm::AMDGPU::ClusterDimsAttr::FixedDims, llvm::SIMachineFunctionInfo::getClusterDims(), llvm::AMDGPU::ClusterDimsAttr::getKind(), llvm::CmpInst::ICMP_EQ, llvm_unreachable, loadInputValue(), MI, MRI, llvm::AMDGPU::ClusterDimsAttr::NoCluster, S32, llvm::LLT::scalar(), llvm::AMDGPU::ClusterDimsAttr::Unknown, and llvm::AMDGPU::ClusterDimsAttr::VariableDims.

Referenced by legalizeIntrinsic().

legalizeWorkitemIDIntrinsic()

loadInputValue()

Definition at line 4612 of file AMDGPULegalizerInfo.cpp.

References llvm::CallingConv::AMDGPU_Gfx, B(), buildLoadInputValue(), llvm::AMDGPUFunctionArgInfo::CLUSTER_WORKGROUP_ID_X, llvm::AMDGPUFunctionArgInfo::CLUSTER_WORKGROUP_ID_Y, llvm::AMDGPUFunctionArgInfo::CLUSTER_WORKGROUP_ID_Z, llvm::AMDGPUFunctionArgInfo::CLUSTER_WORKGROUP_MAX_FLAT_ID, llvm::AMDGPUFunctionArgInfo::CLUSTER_WORKGROUP_MAX_ID_X, llvm::AMDGPUFunctionArgInfo::CLUSTER_WORKGROUP_MAX_ID_Y, llvm::AMDGPUFunctionArgInfo::CLUSTER_WORKGROUP_MAX_ID_Z, llvm::ArgDescriptor::createRegister(), llvm::SIMachineFunctionInfo::getClusterDims(), llvm::AMDGPU::ClusterDimsAttr::getDims(), llvm::SIMachineFunctionInfo::getPreloadedValue(), llvm::SIMachineFunctionInfo::hasWorkGroupIDZ(), llvm::AMDGPU::isCompute(), llvm::AMDGPU::isEntryFunctionCC(), llvm::AMDGPU::ClusterDimsAttr::isFixedDims(), llvm::AMDGPUFunctionArgInfo::KERNARG_SEGMENT_PTR, N, llvm::LLT::scalar(), llvm::AMDGPUFunctionArgInfo::WORKGROUP_ID_X, llvm::AMDGPUFunctionArgInfo::WORKGROUP_ID_Y, and llvm::AMDGPUFunctionArgInfo::WORKGROUP_ID_Z.

Referenced by getImplicitArgPtr(), getKernargParameterPtr(), getSegmentAperture(), legalizePreloadedArgIntrin(), legalizeTrapHsaQueuePtr(), legalizeWorkGroupId(), and legalizeWorkitemIDIntrinsic().

splitBufferOffsets()


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