LLVM 22.0.0git
SIISelLowering.cpp File Reference

Custom DAG lowering for SI. More...

Go to the source code of this file.

Classes

struct  DotSrc

Macros

#define DEBUG_TYPE   "si-lower"

Functions

 STATISTIC (NumTailCalls, "Number of tail calls")
static bool denormalModeIsFlushAllF32 (const MachineFunction &MF)
static bool denormalModeIsFlushAllF64F16 (const MachineFunction &MF)
static unsigned findFirstFreeSGPR (CCState &CCInfo)
static EVT memVTFromLoadIntrData (const SITargetLowering &TLI, const DataLayout &DL, Type *Ty, unsigned MaxNumLanes)
static EVT memVTFromLoadIntrReturn (const SITargetLowering &TLI, const DataLayout &DL, Type *Ty, unsigned MaxNumLanes)
static unsigned getIntrMemWidth (unsigned IntrID)
static void getCoopAtomicOperandsInfo (const CallInst &CI, bool IsLoad, TargetLoweringBase::IntrinsicInfo &Info)
static void processPSInputArgs (SmallVectorImpl< ISD::InputArg > &Splits, CallingConv::ID CallConv, ArrayRef< ISD::InputArg > Ins, BitVector &Skipped, FunctionType *FType, SIMachineFunctionInfo *Info)
static ArgDescriptor allocateVGPR32Input (CCState &CCInfo, unsigned Mask=~0u, ArgDescriptor Arg=ArgDescriptor())
static ArgDescriptor allocateSGPR32InputImpl (CCState &CCInfo, const TargetRegisterClass *RC, unsigned NumArgRegs)
static void allocateFixedSGPRInputImpl (CCState &CCInfo, const TargetRegisterClass *RC, MCRegister Reg)
static void allocateSGPR32Input (CCState &CCInfo, ArgDescriptor &Arg)
static void allocateSGPR64Input (CCState &CCInfo, ArgDescriptor &Arg)
static void reservePrivateMemoryRegs (const TargetMachine &TM, MachineFunction &MF, const SIRegisterInfo &TRI, SIMachineFunctionInfo &Info)
static std::pair< MachineBasicBlock *, MachineBasicBlock * > splitBlockForLoop (MachineInstr &MI, MachineBasicBlock &MBB, bool InstInLoop)
static MachineBasicBlock::iterator emitLoadM0FromVGPRLoop (const SIInstrInfo *TII, MachineRegisterInfo &MRI, MachineBasicBlock &OrigBB, MachineBasicBlock &LoopBB, const DebugLoc &DL, const MachineOperand &Idx, unsigned InitReg, unsigned ResultReg, unsigned PhiReg, unsigned InitSaveExecReg, int Offset, bool UseGPRIdxMode, Register &SGPRIdxReg)
static MachineBasicBlock::iterator loadM0FromVGPR (const SIInstrInfo *TII, MachineBasicBlock &MBB, MachineInstr &MI, unsigned InitResultReg, unsigned PhiReg, int Offset, bool UseGPRIdxMode, Register &SGPRIdxReg)
static std::pair< unsigned, int > computeIndirectRegAndOffset (const SIRegisterInfo &TRI, const TargetRegisterClass *SuperRC, unsigned VecReg, int Offset)
static void setM0ToIndexFromSGPR (const SIInstrInfo *TII, MachineRegisterInfo &MRI, MachineInstr &MI, int Offset)
static Register getIndirectSGPRIdx (const SIInstrInfo *TII, MachineRegisterInfo &MRI, MachineInstr &MI, int Offset)
static MachineBasicBlockemitIndirectSrc (MachineInstr &MI, MachineBasicBlock &MBB, const GCNSubtarget &ST)
static MachineBasicBlockemitIndirectDst (MachineInstr &MI, MachineBasicBlock &MBB, const GCNSubtarget &ST)
static MachineBasicBlockExpand64BitScalarArithmetic (MachineInstr &MI, MachineBasicBlock *BB)
static uint32_t getIdentityValueFor32BitWaveReduction (unsigned Opc)
static uint64_t getIdentityValueFor64BitWaveReduction (unsigned Opc)
static bool is32bitWaveReduceOperation (unsigned Opc)
static MachineBasicBlocklowerWaveReduce (MachineInstr &MI, MachineBasicBlock &BB, const GCNSubtarget &ST, unsigned Opc)
static SDValue adjustLoadValueTypeImpl (SDValue Result, EVT LoadVT, const SDLoc &DL, SelectionDAG &DAG, bool Unpacked)
static SDValue lowerICMPIntrinsic (const SITargetLowering &TLI, SDNode *N, SelectionDAG &DAG)
static SDValue lowerFCMPIntrinsic (const SITargetLowering &TLI, SDNode *N, SelectionDAG &DAG)
static SDValue lowerBALLOTIntrinsic (const SITargetLowering &TLI, SDNode *N, SelectionDAG &DAG)
static SDValue lowerLaneOp (const SITargetLowering &TLI, SDNode *N, SelectionDAG &DAG)
static SDNodefindUser (SDValue Value, unsigned Opcode)
 Helper function for LowerBRCOND.
static unsigned getExtOpcodeForPromotedOp (SDValue Op)
static bool isKnownNonNull (SDValue Val, SelectionDAG &DAG, const AMDGPUTargetMachine &TM, unsigned AddrSpace)
 Return true if the value is a known valid address, such that a null check is not necessary.
static bool elementPairIsContiguous (ArrayRef< int > Mask, int Elt)
static bool elementPairIsOddToEven (ArrayRef< int > Mask, int Elt)
static SDValue buildPCRelGlobalAddress (SelectionDAG &DAG, const GlobalValue *GV, const SDLoc &DL, int64_t Offset, EVT PtrVT, unsigned GAFlags=SIInstrInfo::MO_NONE)
static SDValue emitNonHSAIntrinsicError (SelectionDAG &DAG, const SDLoc &DL, EVT VT)
static SDValue emitRemovedIntrinsicError (SelectionDAG &DAG, const SDLoc &DL, EVT VT)
static SDValue getBuildDwordsVector (SelectionDAG &DAG, SDLoc DL, ArrayRef< SDValue > Elts)
static SDValue padEltsToUndef (SelectionDAG &DAG, const SDLoc &DL, EVT CastVT, SDValue Src, int ExtraElts)
static SDValue constructRetValue (SelectionDAG &DAG, MachineSDNode *Result, ArrayRef< EVT > ResultTypes, bool IsTexFail, bool Unpacked, bool IsD16, int DMaskPop, int NumVDataDwords, bool IsAtomicPacked16Bit, const SDLoc &DL)
static bool parseTexFail (SDValue TexFailCtrl, SelectionDAG &DAG, SDValue *TFE, SDValue *LWE, bool &IsTexFail)
static void packImage16bitOpsToDwords (SelectionDAG &DAG, SDValue Op, MVT PackVectorVT, SmallVectorImpl< SDValue > &PackedAddrs, unsigned DimIdx, unsigned EndIdx, unsigned NumGradients)
static SDValue selectSOffset (SDValue SOffset, SelectionDAG &DAG, const GCNSubtarget *Subtarget)
static bool isNoUnsignedWrap (SDValue Addr)
static SDValue getLoadExtOrTrunc (SelectionDAG &DAG, ISD::LoadExtType ExtType, SDValue Op, const SDLoc &SL, EVT VT)
static bool addressMayBeAccessedAsPrivate (const MachineMemOperand *MMO, const SIMachineFunctionInfo &Info)
static SDValue getFPBinOp (SelectionDAG &DAG, unsigned Opcode, const SDLoc &SL, EVT VT, SDValue A, SDValue B, SDValue GlueChain, SDNodeFlags Flags)
static SDValue getFPTernOp (SelectionDAG &DAG, unsigned Opcode, const SDLoc &SL, EVT VT, SDValue A, SDValue B, SDValue C, SDValue GlueChain, SDNodeFlags Flags)
static SDValue getSPDenormModeValue (uint32_t SPDenormMode, SelectionDAG &DAG, const SIMachineFunctionInfo *Info, const GCNSubtarget *ST)
static unsigned getBasePtrIndex (const MemSDNode *N)
 MemSDNode::getBasePtr() does not work for intrinsics, which needs to offset by the chain and intrinsic ID.
static bool bitOpWithConstantIsReducible (unsigned Opc, uint32_t Val)
static uint32_t getConstantPermuteMask (uint32_t C)
static uint32_t getPermuteMask (SDValue V)
static const std::optional< ByteProvider< SDValue > > calculateSrcByte (const SDValue Op, uint64_t DestByte, uint64_t SrcIndex=0, unsigned Depth=0)
static const std::optional< ByteProvider< SDValue > > calculateByteProvider (const SDValue &Op, unsigned Index, unsigned Depth, unsigned StartingIndex=0)
static bool isExtendedFrom16Bits (SDValue &Operand)
static bool addresses16Bits (int Mask)
static bool hasNon16BitAccesses (uint64_t PermMask, SDValue &Op, SDValue &OtherOp)
static SDValue getDWordFromOffset (SelectionDAG &DAG, SDLoc SL, SDValue Src, unsigned DWordOffset)
static SDValue matchPERM (SDNode *N, TargetLowering::DAGCombinerInfo &DCI)
static bool vectorEltWillFoldAway (SDValue Op)
static unsigned minMaxOpcToMin3Max3Opc (unsigned Opc)
static ConstantFPSDNodegetSplatConstantFP (SDValue Op)
static bool supportsMin3Max3 (const GCNSubtarget &Subtarget, unsigned Opc, EVT VT)
static bool isClampZeroToOne (SDValue A, SDValue B)
static SDValue strictFPExtFromF16 (SelectionDAG &DAG, SDValue Src)
 Return the source of an fp_extend from f16 to f32, or a converted FP constant.
static SDValue getMad64_32 (SelectionDAG &DAG, const SDLoc &SL, EVT VT, SDValue N0, SDValue N1, SDValue N2, bool Signed)
static SDValue tryFoldMADwithSRL (SelectionDAG &DAG, const SDLoc &SL, SDValue MulLHS, SDValue MulRHS, SDValue AddRHS)
static std::optional< ByteProvider< SDValue > > handleMulOperand (const SDValue &MulOperand)
static unsigned addPermMasks (unsigned First, unsigned Second)
static void placeSources (ByteProvider< SDValue > &Src0, ByteProvider< SDValue > &Src1, SmallVectorImpl< DotSrc > &Src0s, SmallVectorImpl< DotSrc > &Src1s, int Step)
static SDValue resolveSources (SelectionDAG &DAG, SDLoc SL, SmallVectorImpl< DotSrc > &Srcs, bool IsSigned, bool IsAny)
static void fixMasks (SmallVectorImpl< DotSrc > &Srcs, unsigned ChainLength)
static bool isMul (const SDValue Op)
static std::optional< boolcheckDot4MulSignedness (const SDValue &N, ByteProvider< SDValue > &Src0, ByteProvider< SDValue > &Src1, const SDValue &S0Op, const SDValue &S1Op, const SelectionDAG &DAG)
static unsigned SubIdx2Lane (unsigned Idx)
 Helper function for adjustWritemask.
static bool isFrameIndexOp (SDValue Op)
static SDValue buildSMovImm32 (SelectionDAG &DAG, const SDLoc &DL, uint64_t Val)
static bool isImmConstraint (StringRef Constraint)
static uint64_t clearUnusedBits (uint64_t Val, unsigned Size)
static int getAlignedAGPRClassID (unsigned UnalignedClassID)
static void knownBitsForWorkitemID (const GCNSubtarget &ST, GISelValueTracking &VT, KnownBits &Known, unsigned Dim)
static void knownBitsForSBFE (const MachineInstr &MI, GISelValueTracking &VT, KnownBits &Known, const APInt &DemandedElts, unsigned BFEWidth, bool SExt, unsigned Depth)
static LLVM_ATTRIBUTE_UNUSED bool isCopyFromRegOfInlineAsm (const SDNode *N)
static bool atomicIgnoresDenormalModeOrFPModeIsFTZ (const AtomicRMWInst *RMW)
static OptimizationRemark emitAtomicRMWLegalRemark (const AtomicRMWInst *RMW)
static bool isV2F16OrV2BF16 (Type *Ty)
static bool isV2F16 (Type *Ty)
static bool isV2BF16 (Type *Ty)
static bool isAtomicRMWLegalIntTy (Type *Ty)
static bool isAtomicRMWLegalXChgTy (const AtomicRMWInst *RMW)
static bool globalMemoryFPAtomicIsLegal (const GCNSubtarget &Subtarget, const AtomicRMWInst *RMW, bool HasSystemScope)
static TargetLowering::AtomicExpansionKind atomicSupportedIfLegalIntType (const AtomicRMWInst *RMW)
static bool flatInstrMayAccessPrivate (const Instruction *I)
 Return if a flat address space atomicrmw can access private memory.
static TargetLowering::AtomicExpansionKind getPrivateAtomicExpansionKind (const GCNSubtarget &STI)
static bool hasCFUser (const Value *V, SmallPtrSet< const Value *, 16 > &Visited, unsigned WaveSize)
static void convertScratchAtomicToFlatAtomic (Instruction *I, unsigned PtrOpIdx)

Variables

static cl::opt< boolDisableLoopAlignment ("amdgpu-disable-loop-alignment", cl::desc("Do not align and prefetch loops"), cl::init(false))
static cl::opt< boolUseDivergentRegisterIndexing ("amdgpu-use-divergent-register-indexing", cl::Hidden, cl::desc("Use indirect register addressing for divergent indexes"), cl::init(false))
static cl::opt< boolUseSelectionDAGPTRADD ("amdgpu-use-sdag-ptradd", cl::Hidden, cl::desc("Generate ISD::PTRADD nodes for 64-bit pointer arithmetic in the " "SelectionDAG ISel"), cl::init(false))

Detailed Description

Custom DAG lowering for SI.

Definition in file SIISelLowering.cpp.

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "si-lower"

Definition at line 52 of file SIISelLowering.cpp.

Function Documentation

◆ addPermMasks()

unsigned addPermMasks ( unsigned First,
unsigned Second )
static

Definition at line 15634 of file SIISelLowering.cpp.

References assert(), and llvm::First.

Referenced by placeSources(), and resolveSources().

◆ addresses16Bits()

bool addresses16Bits ( int Mask)
static

Definition at line 13728 of file SIISelLowering.cpp.

References assert().

Referenced by hasNon16BitAccesses().

◆ addressMayBeAccessedAsPrivate()

bool addressMayBeAccessedAsPrivate ( const MachineMemOperand * MMO,
const SIMachineFunctionInfo & Info )
static

Definition at line 11780 of file SIISelLowering.cpp.

References Info.

◆ adjustLoadValueTypeImpl()

◆ allocateFixedSGPRInputImpl()

void allocateFixedSGPRInputImpl ( CCState & CCInfo,
const TargetRegisterClass * RC,
MCRegister Reg )
static

◆ allocateSGPR32Input()

void allocateSGPR32Input ( CCState & CCInfo,
ArgDescriptor & Arg )
static

◆ allocateSGPR32InputImpl()

◆ allocateSGPR64Input()

void allocateSGPR64Input ( CCState & CCInfo,
ArgDescriptor & Arg )
static

◆ allocateVGPR32Input()

◆ atomicIgnoresDenormalModeOrFPModeIsFTZ()

◆ atomicSupportedIfLegalIntType()

TargetLowering::AtomicExpansionKind atomicSupportedIfLegalIntType ( const AtomicRMWInst * RMW)
static
Returns
Action to perform on AtomicRMWInsts for integer operations.

Definition at line 18430 of file SIISelLowering.cpp.

References llvm::TargetLoweringBase::CmpXChg, llvm::Value::getType(), isAtomicRMWLegalIntTy(), and llvm::TargetLoweringBase::None.

Referenced by llvm::SITargetLowering::shouldExpandAtomicRMWInIR().

◆ bitOpWithConstantIsReducible()

bool bitOpWithConstantIsReducible ( unsigned Opc,
uint32_t Val )
static

Definition at line 13007 of file SIISelLowering.cpp.

References llvm::ISD::AND, Opc, llvm::ISD::OR, and llvm::ISD::XOR.

◆ buildPCRelGlobalAddress()

◆ buildSMovImm32()

◆ calculateByteProvider()

◆ calculateSrcByte()

◆ checkDot4MulSignedness()

std::optional< bool > checkDot4MulSignedness ( const SDValue & N,
ByteProvider< SDValue > & Src0,
ByteProvider< SDValue > & Src1,
const SDValue & S0Op,
const SDValue & S1Op,
const SelectionDAG & DAG )
static

◆ clearUnusedBits()

◆ computeIndirectRegAndOffset()

std::pair< unsigned, int > computeIndirectRegAndOffset ( const SIRegisterInfo & TRI,
const TargetRegisterClass * SuperRC,
unsigned VecReg,
int Offset )
static

◆ constructRetValue()

◆ convertScratchAtomicToFlatAtomic()

◆ denormalModeIsFlushAllF32()

◆ denormalModeIsFlushAllF64F16()

◆ elementPairIsContiguous()

bool elementPairIsContiguous ( ArrayRef< int > Mask,
int Elt )
static

Definition at line 8601 of file SIISelLowering.cpp.

References assert().

◆ elementPairIsOddToEven()

bool elementPairIsOddToEven ( ArrayRef< int > Mask,
int Elt )
static

Definition at line 8606 of file SIISelLowering.cpp.

References assert().

◆ emitAtomicRMWLegalRemark()

◆ emitIndirectDst()

◆ emitIndirectSrc()

◆ emitLoadM0FromVGPRLoop()

◆ emitNonHSAIntrinsicError()

◆ emitRemovedIntrinsicError()

◆ Expand64BitScalarArithmetic()

◆ findFirstFreeSGPR()

unsigned findFirstFreeSGPR ( CCState & CCInfo)
static

◆ findUser()

SDNode * findUser ( SDValue Value,
unsigned Opcode )
static

Helper function for LowerBRCOND.

Definition at line 7480 of file SIISelLowering.cpp.

References llvm::Value::uses().

◆ fixMasks()

void fixMasks ( SmallVectorImpl< DotSrc > & Srcs,
unsigned ChainLength )
static

Definition at line 15798 of file SIISelLowering.cpp.

◆ flatInstrMayAccessPrivate()

bool flatInstrMayAccessPrivate ( const Instruction * I)
static

Return if a flat address space atomicrmw can access private memory.

Definition at line 18437 of file SIISelLowering.cpp.

References llvm::AMDGPU::hasValueInRangeLikeMetadata(), I, and llvm::AMDGPUAS::PRIVATE_ADDRESS.

Referenced by llvm::SITargetLowering::shouldExpandAtomicCmpXchgInIR(), and llvm::SITargetLowering::shouldExpandAtomicRMWInIR().

◆ getAlignedAGPRClassID()

int getAlignedAGPRClassID ( unsigned UnalignedClassID)
static

Definition at line 17824 of file SIISelLowering.cpp.

Referenced by llvm::SITargetLowering::finalizeLowering().

◆ getBasePtrIndex()

unsigned getBasePtrIndex ( const MemSDNode * N)
static

MemSDNode::getBasePtr() does not work for intrinsics, which needs to offset by the chain and intrinsic ID.

Theoretically we would also need to check the specific intrinsic, but they all place the pointer operand first.

Definition at line 12974 of file SIISelLowering.cpp.

References llvm::ISD::INTRINSIC_VOID, llvm::ISD::INTRINSIC_W_CHAIN, and N.

Referenced by llvm::SITargetLowering::hasMemSDNodeUser().

◆ getBuildDwordsVector()

◆ getConstantPermuteMask()

uint32_t getConstantPermuteMask ( uint32_t C)
static

Definition at line 13082 of file SIISelLowering.cpp.

References llvm::CallingConv::C.

Referenced by getPermuteMask().

◆ getCoopAtomicOperandsInfo()

◆ getDWordFromOffset()

◆ getExtOpcodeForPromotedOp()

◆ getFPBinOp()

◆ getFPTernOp()

◆ getIdentityValueFor32BitWaveReduction()

uint32_t getIdentityValueFor32BitWaveReduction ( unsigned Opc)
static

Definition at line 5458 of file SIISelLowering.cpp.

References llvm_unreachable, and Opc.

Referenced by lowerWaveReduce().

◆ getIdentityValueFor64BitWaveReduction()

uint64_t getIdentityValueFor64BitWaveReduction ( unsigned Opc)
static

Definition at line 5481 of file SIISelLowering.cpp.

References llvm_unreachable, and Opc.

Referenced by lowerWaveReduce().

◆ getIndirectSGPRIdx()

◆ getIntrMemWidth()

unsigned getIntrMemWidth ( unsigned IntrID)
static

Definition at line 1271 of file SIISelLowering.cpp.

References llvm_unreachable.

Referenced by llvm::SITargetLowering::getTgtMemIntrinsic().

◆ getLoadExtOrTrunc()

◆ getMad64_32()

◆ getPermuteMask()

◆ getPrivateAtomicExpansionKind()

◆ getSPDenormModeValue()

SDValue getSPDenormModeValue ( uint32_t SPDenormMode,
SelectionDAG & DAG,
const SIMachineFunctionInfo * Info,
const GCNSubtarget * ST )
static

Definition at line 12183 of file SIISelLowering.cpp.

References assert(), llvm::SelectionDAG::getTargetConstant(), Info, and Mode.

◆ getSplatConstantFP()

ConstantFPSDNode * getSplatConstantFP ( SDValue Op)
static

Definition at line 14788 of file SIISelLowering.cpp.

References llvm::CallingConv::C, and llvm::dyn_cast().

◆ globalMemoryFPAtomicIsLegal()

bool globalMemoryFPAtomicIsLegal ( const GCNSubtarget & Subtarget,
const AtomicRMWInst * RMW,
bool HasSystemScope )
static
Returns
true if it's valid to emit a native instruction for RMW, based on the properties of the target memory.

Definition at line 18407 of file SIISelLowering.cpp.

References llvm::GCNSubtarget::hasEmulatedSystemScopeAtomics(), llvm::Instruction::hasMetadata(), and llvm::GCNSubtarget::supportsAgentScopeFineGrainedRemoteMemoryAtomics().

Referenced by llvm::SITargetLowering::shouldExpandAtomicRMWInIR().

◆ handleMulOperand()

std::optional< ByteProvider< SDValue > > handleMulOperand ( const SDValue & MulOperand)
static

Definition at line 15622 of file SIISelLowering.cpp.

References calculateByteProvider().

◆ hasCFUser()

bool hasCFUser ( const Value * V,
SmallPtrSet< const Value *, 16 > & Visited,
unsigned WaveSize )
static

◆ hasNon16BitAccesses()

bool hasNon16BitAccesses ( uint64_t PermMask,
SDValue & Op,
SDValue & OtherOp )
static

Definition at line 13747 of file SIISelLowering.cpp.

References addresses16Bits(), isExtendedFrom16Bits(), and llvm::peekThroughBitcasts().

Referenced by matchPERM().

◆ is32bitWaveReduceOperation()

bool is32bitWaveReduceOperation ( unsigned Opc)
static

Definition at line 5504 of file SIISelLowering.cpp.

References Opc.

Referenced by lowerWaveReduce().

◆ isAtomicRMWLegalIntTy()

bool isAtomicRMWLegalIntTy ( Type * Ty)
static
Returns
true if atomicrmw integer ops work for the type.

Definition at line 18373 of file SIISelLowering.cpp.

References llvm::dyn_cast(), and IT.

Referenced by atomicSupportedIfLegalIntType(), and isAtomicRMWLegalXChgTy().

◆ isAtomicRMWLegalXChgTy()

bool isAtomicRMWLegalXChgTy ( const AtomicRMWInst * RMW)
static

◆ isClampZeroToOne()

bool isClampZeroToOne ( SDValue A,
SDValue B )
static

Definition at line 14995 of file SIISelLowering.cpp.

References A(), B(), and llvm::dyn_cast().

◆ isCopyFromRegOfInlineAsm()

LLVM_ATTRIBUTE_UNUSED bool isCopyFromRegOfInlineAsm ( const SDNode * N)
static

◆ isExtendedFrom16Bits()

◆ isFrameIndexOp()

bool isFrameIndexOp ( SDValue Op)
static

◆ isImmConstraint()

bool isImmConstraint ( StringRef Constraint)
static

◆ isKnownNonNull()

bool isKnownNonNull ( SDValue Val,
SelectionDAG & DAG,
const AMDGPUTargetMachine & TM,
unsigned AddrSpace )
static

Return true if the value is a known valid address, such that a null check is not necessary.

Definition at line 8223 of file SIISelLowering.cpp.

References llvm::dyn_cast(), and llvm::isa().

◆ isMul()

bool isMul ( const SDValue Op)
static

◆ isNoUnsignedWrap()

◆ isV2BF16()

◆ isV2F16()

◆ isV2F16OrV2BF16()

bool isV2F16OrV2BF16 ( Type * Ty)
static

◆ knownBitsForSBFE()

◆ knownBitsForWorkitemID()

◆ loadM0FromVGPR()

◆ lowerBALLOTIntrinsic()

◆ lowerFCMPIntrinsic()

◆ lowerICMPIntrinsic()

◆ lowerLaneOp()

◆ lowerWaveReduce()

◆ matchPERM()

◆ memVTFromLoadIntrData()

◆ memVTFromLoadIntrReturn()

EVT memVTFromLoadIntrReturn ( const SITargetLowering & TLI,
const DataLayout & DL,
Type * Ty,
unsigned MaxNumLanes )
static

◆ minMaxOpcToMin3Max3Opc()

◆ packImage16bitOpsToDwords()

◆ padEltsToUndef()

◆ parseTexFail()

bool parseTexFail ( SDValue TexFailCtrl,
SelectionDAG & DAG,
SDValue * TFE,
SDValue * LWE,
bool & IsTexFail )
static

◆ placeSources()

◆ processPSInputArgs()

◆ reservePrivateMemoryRegs()

◆ resolveSources()

◆ selectSOffset()

SDValue selectSOffset ( SDValue SOffset,
SelectionDAG & DAG,
const GCNSubtarget * Subtarget )
static

◆ setM0ToIndexFromSGPR()

◆ splitBlockForLoop()

◆ STATISTIC()

STATISTIC ( NumTailCalls ,
"Number of tail calls"  )

◆ strictFPExtFromF16()

SDValue strictFPExtFromF16 ( SelectionDAG & DAG,
SDValue Src )
static

Return the source of an fp_extend from f16 to f32, or a converted FP constant.

Definition at line 15288 of file SIISelLowering.cpp.

References llvm::APFloat::convert(), llvm::dyn_cast(), llvm::SelectionDAG::getConstantFP(), llvm::APFloatBase::IEEEhalf(), llvm::APFloatBase::rmNearestTiesToEven, and SDValue().

◆ SubIdx2Lane()

unsigned SubIdx2Lane ( unsigned Idx)
static

Helper function for adjustWritemask.

Definition at line 16947 of file SIISelLowering.cpp.

◆ supportsMin3Max3()

◆ tryFoldMADwithSRL()

◆ vectorEltWillFoldAway()

bool vectorEltWillFoldAway ( SDValue Op)
static

Definition at line 14649 of file SIISelLowering.cpp.

References llvm::isa().

Variable Documentation

◆ DisableLoopAlignment

cl::opt< bool > DisableLoopAlignment("amdgpu-disable-loop-alignment", cl::desc("Do not align and prefetch loops"), cl::init(false)) ( "amdgpu-disable-loop-alignment" ,
cl::desc("Do not align and prefetch loops") ,
cl::init(false)  )
static

◆ UseDivergentRegisterIndexing

cl::opt< bool > UseDivergentRegisterIndexing("amdgpu-use-divergent-register-indexing", cl::Hidden, cl::desc("Use indirect register addressing for divergent indexes"), cl::init(false)) ( "amdgpu-use-divergent-register-indexing" ,
cl::Hidden ,
cl::desc("Use indirect register addressing for divergent indexes") ,
cl::init(false)  )
static

◆ UseSelectionDAGPTRADD

cl::opt< bool > UseSelectionDAGPTRADD("amdgpu-use-sdag-ptradd", cl::Hidden, cl::desc("Generate ISD::PTRADD nodes for 64-bit pointer arithmetic in the " "SelectionDAG ISel"), cl::init(false)) ( "amdgpu-use-sdag-ptradd" ,
cl::Hidden ,
cl::desc("Generate ISD::PTRADD nodes for 64-bit pointer arithmetic in the " "SelectionDAG ISel") ,
cl::init(false)  )
static