Thanks to visit codestin.com
Credit goes to llvm.org

LLVM 22.0.0git
llvm::RISCVTTIImpl Class Referencefinal

#include "Target/RISCV/RISCVTargetTransformInfo.h"

Inheritance diagram for llvm::RISCVTTIImpl:
[legend]

Public Member Functions

 RISCVTTIImpl (const RISCVTargetMachine *TM, const Function &F)
InstructionCost getStoreImmCost (Type *VecTy, TTI::OperandValueInfo OpInfo, TTI::TargetCostKind CostKind) const
 Return the cost of materializing an immediate for a value operand of a store instruction.
InstructionCost getIntImmCost (const APInt &Imm, Type *Ty, TTI::TargetCostKind CostKind) const override
InstructionCost getIntImmCostInst (unsigned Opcode, unsigned Idx, const APInt &Imm, Type *Ty, TTI::TargetCostKind CostKind, Instruction *Inst=nullptr) const override
InstructionCost getIntImmCostIntrin (Intrinsic::ID IID, unsigned Idx, const APInt &Imm, Type *Ty, TTI::TargetCostKind CostKind) const override
Public Member Functions inherited from llvm::BasicTTIImplBase< RISCVTTIImpl >
bool allowsMisalignedMemoryAccesses (LLVMContext &Context, unsigned BitWidth, unsigned AddressSpace, Align Alignment, unsigned *Fast) const override
bool areInlineCompatible (const Function *Caller, const Function *Callee) const override
bool hasBranchDivergence (const Function *F=nullptr) const override
bool isSourceOfDivergence (const Value *V) const override
bool isAlwaysUniform (const Value *V) const override
bool isValidAddrSpaceCast (unsigned FromAS, unsigned ToAS) const override
bool addrspacesMayAlias (unsigned AS0, unsigned AS1) const override
unsigned getFlatAddressSpace () const override
bool collectFlatAddressOperands (SmallVectorImpl< int > &OpIndexes, Intrinsic::ID IID) const override
bool isNoopAddrSpaceCast (unsigned FromAS, unsigned ToAS) const override
unsigned getAssumedAddrSpace (const Value *V) const override
bool isSingleThreaded () const override
std::pair< const Value *, unsignedgetPredicatedAddrSpace (const Value *V) const override
ValuerewriteIntrinsicWithAddressSpace (IntrinsicInst *II, Value *OldV, Value *NewV) const override
bool isLegalAddImmediate (int64_t imm) const override
bool isLegalAddScalableImmediate (int64_t Imm) const override
bool isLegalICmpImmediate (int64_t imm) const override
bool isLegalAddressingMode (Type *Ty, GlobalValue *BaseGV, int64_t BaseOffset, bool HasBaseReg, int64_t Scale, unsigned AddrSpace, Instruction *I=nullptr, int64_t ScalableOffset=0) const override
int64_t getPreferredLargeGEPBaseOffset (int64_t MinOffset, int64_t MaxOffset)
unsigned getStoreMinimumVF (unsigned VF, Type *ScalarMemTy, Type *ScalarValTy) const override
bool isIndexedLoadLegal (TTI::MemIndexedMode M, Type *Ty) const override
bool isIndexedStoreLegal (TTI::MemIndexedMode M, Type *Ty) const override
bool isNumRegsMajorCostOfLSR () const override
bool shouldDropLSRSolutionIfLessProfitable () const override
bool isProfitableLSRChainElement (Instruction *I) const override
InstructionCost getScalingFactorCost (Type *Ty, GlobalValue *BaseGV, StackOffset BaseOffset, bool HasBaseReg, int64_t Scale, unsigned AddrSpace) const override
bool isTruncateFree (Type *Ty1, Type *Ty2) const override
bool isProfitableToHoist (Instruction *I) const override
bool useAA () const override
bool isTypeLegal (Type *Ty) const override
InstructionCost getGEPCost (Type *PointeeType, const Value *Ptr, ArrayRef< const Value * > Operands, Type *AccessType, TTI::TargetCostKind CostKind) const override
unsigned getEstimatedNumberOfCaseClusters (const SwitchInst &SI, unsigned &JumpTableSize, ProfileSummaryInfo *PSI, BlockFrequencyInfo *BFI) const override
bool shouldBuildLookupTables () const override
bool shouldBuildRelLookupTables () const override
bool haveFastSqrt (Type *Ty) const override
bool isFCmpOrdCheaperThanFCmpZero (Type *Ty) const override
InstructionCost getFPOpCost (Type *Ty) const override
bool preferToKeepConstantsAttached (const Instruction &Inst, const Function &Fn) const override
unsigned getInliningThresholdMultiplier () const override
unsigned adjustInliningThreshold (const CallBase *CB) const override
unsigned getCallerAllocaCost (const CallBase *CB, const AllocaInst *AI) const override
int getInlinerVectorBonusPercent () const override
bool isHardwareLoopProfitable (Loop *L, ScalarEvolution &SE, AssumptionCache &AC, TargetLibraryInfo *LibInfo, HardwareLoopInfo &HWLoopInfo) const override
unsigned getEpilogueVectorizationMinVF () const override
std::optional< Instruction * > instCombineIntrinsic (InstCombiner &IC, IntrinsicInst &II) const override
std::optional< Value * > simplifyDemandedUseBitsIntrinsic (InstCombiner &IC, IntrinsicInst &II, APInt DemandedMask, KnownBits &Known, bool &KnownBitsComputed) const override
std::optional< Value * > simplifyDemandedVectorEltsIntrinsic (InstCombiner &IC, IntrinsicInst &II, APInt DemandedElts, APInt &UndefElts, APInt &UndefElts2, APInt &UndefElts3, std::function< void(Instruction *, unsigned, APInt, APInt &)> SimplifyAndSetOp) const override
virtual std::optional< unsignedgetCacheSize (TargetTransformInfo::CacheLevel Level) const override
virtual std::optional< unsignedgetCacheAssociativity (TargetTransformInfo::CacheLevel Level) const override
virtual unsigned getCacheLineSize () const override
virtual unsigned getPrefetchDistance () const override
virtual unsigned getMinPrefetchStride (unsigned NumMemAccesses, unsigned NumStridedMemAccesses, unsigned NumPrefetches, bool HasCall) const override
virtual unsigned getMaxPrefetchIterationsAhead () const override
virtual bool enableWritePrefetching () const override
virtual bool shouldPrefetchAddressSpace (unsigned AS) const override
bool isTargetIntrinsicTriviallyScalarizable (Intrinsic::ID ID) const override
bool isTargetIntrinsicWithScalarOpAtArg (Intrinsic::ID ID, unsigned ScalarOpdIdx) const override
bool isTargetIntrinsicWithOverloadTypeAtArg (Intrinsic::ID ID, int OpdIdx) const override
bool isTargetIntrinsicWithStructReturnOverloadAtField (Intrinsic::ID ID, int RetIdx) const override
InstructionCost getScalarizationOverhead (VectorType *InTy, bool Insert, bool Extract, TTI::TargetCostKind CostKind) const
 Helper wrapper for the DemandedElts variant of getScalarizationOverhead.
InstructionCost getOperandsScalarizationOverhead (ArrayRef< Type * > Tys, TTI::TargetCostKind CostKind) const override
 Estimate the overhead of scalarizing an instruction's operands.
InstructionCost getScalarizationOverhead (VectorType *RetTy, ArrayRef< const Value * > Args, ArrayRef< Type * > Tys, TTI::TargetCostKind CostKind) const
 Estimate the overhead of scalarizing the inputs and outputs of an instruction, with return type RetTy and arguments Args of type Tys.
std::pair< InstructionCost, MVTgetTypeLegalizationCost (Type *Ty) const
 Estimate the cost of type-legalization and the legalized type.
TTI::ShuffleKind improveShuffleKindFromMask (TTI::ShuffleKind Kind, ArrayRef< int > Mask, VectorType *SrcTy, int &Index, VectorType *&SubTy) const
InstructionCost getExtractWithExtendCost (unsigned Opcode, Type *Dst, VectorType *VecTy, unsigned Index, TTI::TargetCostKind CostKind) const override
InstructionCost getReplicationShuffleCost (Type *EltTy, int ReplicationFactor, int VF, const APInt &DemandedDstElts, TTI::TargetCostKind CostKind) const override
InstructionCost getTypeBasedIntrinsicInstrCost (const IntrinsicCostAttributes &ICA, TTI::TargetCostKind CostKind) const
 Get intrinsic cost based on argument types.
InstructionCost getCallInstrCost (Function *F, Type *RetTy, ArrayRef< Type * > Tys, TTI::TargetCostKind CostKind) const override
 Compute a cost of the given call instruction.
unsigned getNumberOfParts (Type *Tp) const override
InstructionCost getTreeReductionCost (unsigned Opcode, VectorType *Ty, TTI::TargetCostKind CostKind) const
 Try to calculate arithmetic and shuffle op costs for reduction intrinsics.
InstructionCost getOrderedReductionCost (unsigned Opcode, VectorType *Ty, TTI::TargetCostKind CostKind) const
 Try to calculate the cost of performing strict (in-order) reductions, which involves doing a sequence of floating point additions in lane order, starting with an initial value.
InstructionCost getMulAccReductionCost (bool IsUnsigned, unsigned RedOpcode, Type *ResTy, VectorType *Ty, TTI::TargetCostKind CostKind) const override
InstructionCost getVectorSplitCost () const
Public Member Functions inherited from llvm::TargetTransformInfoImplCRTPBase< T >
InstructionCost getGEPCost (Type *PointeeType, const Value *Ptr, ArrayRef< const Value * > Operands, Type *AccessType, TTI::TargetCostKind CostKind) const override
InstructionCost getPointersChainCost (ArrayRef< const Value * > Ptrs, const Value *Base, const TTI::PointersChainInfo &Info, Type *AccessTy, TTI::TargetCostKind CostKind) const override
InstructionCost getInstructionCost (const User *U, ArrayRef< const Value * > Operands, TTI::TargetCostKind CostKind) const override
bool isExpensiveToSpeculativelyExecute (const Instruction *I) const override
bool supportsTailCallFor (const CallBase *CB) const override
Public Member Functions inherited from llvm::TargetTransformInfoImplBase
virtual ~TargetTransformInfoImplBase ()
 TargetTransformInfoImplBase (const TargetTransformInfoImplBase &Arg)=default
 TargetTransformInfoImplBase (TargetTransformInfoImplBase &&Arg)
virtual const DataLayoutgetDataLayout () const
virtual unsigned getInliningCostBenefitAnalysisSavingsMultiplier () const
virtual unsigned getInliningCostBenefitAnalysisProfitableMultiplier () const
virtual int getInliningLastCallToStaticBonus () const
virtual InstructionCost getMemcpyCost (const Instruction *I) const
virtual uint64_t getMaxMemIntrinsicInlineSizeThreshold () const
virtual BranchProbability getPredictableBranchThreshold () const
virtual InstructionCost getBranchMispredictPenalty () const
virtual bool canHaveNonUndefGlobalInitializerInAddressSpace (unsigned AS) const
virtual bool isLoweredToCall (const Function *F) const
virtual bool canMacroFuseCmp () const
virtual bool canSaveCmp (Loop *L, BranchInst **BI, ScalarEvolution *SE, LoopInfo *LI, DominatorTree *DT, AssumptionCache *AC, TargetLibraryInfo *LibInfo) const
virtual bool isLegalNTStore (Type *DataType, Align Alignment) const
virtual bool isLegalNTLoad (Type *DataType, Align Alignment) const
virtual bool isLegalBroadcastLoad (Type *ElementTy, ElementCount NumElements) const
virtual bool isLegalAltInstr (VectorType *VecTy, unsigned Opcode0, unsigned Opcode1, const SmallBitVector &OpcodeMask) const
virtual bool isLegalMaskedVectorHistogram (Type *AddrType, Type *DataType) const
virtual bool hasDivRemOp (Type *DataType, bool IsSigned) const
virtual bool hasVolatileVariant (Instruction *I, unsigned AddrSpace) const
virtual bool prefersVectorizedAddressing () const
virtual bool LSRWithInstrQueries () const
virtual bool shouldBuildLookupTablesForConstant (Constant *C) const
virtual bool useColdCCForColdCall (Function &F) const
virtual bool supportsEfficientVectorElementLoadStore () const
virtual bool supportsTailCalls () const
virtual bool enableAggressiveInterleaving (bool LoopHasReductions) const
virtual bool enableSelectOptimize () const
virtual bool shouldTreatInstructionLikeSelect (const Instruction *I) const
virtual bool isFPVectorizationPotentiallyUnsafe () const
virtual InstructionCost getIntImmCodeSizeCost (unsigned Opcode, unsigned Idx, const APInt &Imm, Type *Ty) const
virtual bool hasConditionalLoadStoreForType (Type *Ty, bool IsStore) const
virtual bool shouldMaximizeVectorBandwidth (TargetTransformInfo::RegisterKind K) const
virtual ElementCount getMinimumVF (unsigned ElemWidth, bool IsScalable) const
virtual InstructionCost getAltInstrCost (VectorType *VecTy, unsigned Opcode0, unsigned Opcode1, const SmallBitVector &OpcodeMask, TTI::TargetCostKind CostKind) const
virtual InstructionCost getInsertExtractValueCost (unsigned Opcode, TTI::TargetCostKind CostKind) const
virtual InstructionCost getVPMemoryOpCost (unsigned Opcode, Type *Src, Align Alignment, unsigned AddressSpace, TTI::TargetCostKind CostKind, const Instruction *I) const
virtual bool getTgtMemIntrinsic (IntrinsicInst *Inst, MemIntrinsicInfo &Info) const
virtual unsigned getAtomicMemIntrinsicMaxElementSize () const
virtual ValuegetOrCreateResultFromMemIntrinsic (IntrinsicInst *Inst, Type *ExpectedType, bool CanCreate=true) const
virtual TypegetMemcpyLoopLoweringType (LLVMContext &Context, Value *Length, unsigned SrcAddrSpace, unsigned DestAddrSpace, Align SrcAlign, Align DestAlign, std::optional< uint32_t > AtomicElementSize) const
virtual void getMemcpyLoopResidualLoweringType (SmallVectorImpl< Type * > &OpsOut, LLVMContext &Context, unsigned RemainingBytes, unsigned SrcAddrSpace, unsigned DestAddrSpace, Align SrcAlign, Align DestAlign, std::optional< uint32_t > AtomicCpySize) const
virtual unsigned getInlineCallPenalty (const Function *F, const CallBase &Call, unsigned DefaultCallPenalty) const
virtual bool areTypesABICompatible (const Function *Caller, const Function *Callee, const ArrayRef< Type * > &Types) const
virtual unsigned getLoadStoreVecRegBitWidth (unsigned AddrSpace) const
virtual bool isLegalToVectorizeLoad (LoadInst *LI) const
virtual bool isLegalToVectorizeStore (StoreInst *SI) const
virtual bool isLegalToVectorizeLoadChain (unsigned ChainSizeInBytes, Align Alignment, unsigned AddrSpace) const
virtual bool isLegalToVectorizeStoreChain (unsigned ChainSizeInBytes, Align Alignment, unsigned AddrSpace) const
virtual unsigned getLoadVectorFactor (unsigned VF, unsigned LoadSize, unsigned ChainSizeInBytes, VectorType *VecTy) const
virtual unsigned getStoreVectorFactor (unsigned VF, unsigned StoreSize, unsigned ChainSizeInBytes, VectorType *VecTy) const
virtual bool preferFixedOverScalableIfEqualCost (bool IsEpilogue) const
virtual bool preferInLoopReduction (RecurKind Kind, Type *Ty) const
virtual bool preferPredicatedReductionSelect () const
virtual TTI::ReductionShuffle getPreferredExpandedReductionShuffle (const IntrinsicInst *II) const
virtual unsigned getGISelRematGlobalCost () const
virtual bool isVectorShiftByScalarCheap (Type *Ty) const
virtual bool hasArmWideBranch (bool) const
virtual APInt getFeatureMask (const Function &F) const
virtual bool isMultiversionedFunction (const Function &F) const
virtual unsigned getMaxNumArgs () const
virtual unsigned getNumBytesToPadGlobalArray (unsigned Size, Type *ArrayType) const
virtual void collectKernelLaunchBounds (const Function &F, SmallVectorImpl< std::pair< StringRef, int64_t > > &LB) const
virtual bool allowVectorElementIndexingUsingGEP () const

EVL Support for predicated vectorization.

Whether the target supports the evl parameter of VP intrinsic efficiently in hardware.

(see LLVM Language Reference - "Vector Predication Intrinsics", https://llvm.org/docs/LangRef.html#vector-predication-intrinsics and "IR-level VP intrinsics", https://llvm.org/docs/Proposals/VectorPredication.html#ir-level-vp-intrinsics).

enum  RISCVRegisterClass { GPRRC , FPRRC , VRRC }
bool hasActiveVectorLength () const override
TargetTransformInfo::PopcntSupportKind getPopcntSupport (unsigned TyWidth) const override
InstructionCost getPartialReductionCost (unsigned Opcode, Type *InputTypeA, Type *InputTypeB, Type *AccumType, ElementCount VF, TTI::PartialReductionExtendKind OpAExtend, TTI::PartialReductionExtendKind OpBExtend, std::optional< unsigned > BinOp, TTI::TargetCostKind CostKind) const override
bool shouldExpandReduction (const IntrinsicInst *II) const override
bool supportsScalableVectors () const override
bool enableOrderedReductions () const override
bool enableScalableVectorization () const override
bool preferPredicateOverEpilogue (TailFoldingInfo *TFI) const override
TailFoldingStyle getPreferredTailFoldingStyle (bool IVUpdateMayOverflow) const override
std::optional< unsignedgetMaxVScale () const override
std::optional< unsignedgetVScaleForTuning () const override
TypeSize getRegisterBitWidth (TargetTransformInfo::RegisterKind K) const override
unsigned getRegUsageForType (Type *Ty) const override
unsigned getMaximumVF (unsigned ElemWidth, unsigned Opcode) const override
bool preferAlternateOpcodeVectorization () const override
bool preferEpilogueVectorization () const override
bool shouldConsiderVectorizationRegPressure () const override
InstructionCost getMaskedMemoryOpCost (unsigned Opcode, Type *Src, Align Alignment, unsigned AddressSpace, TTI::TargetCostKind CostKind) const override
InstructionCost getPointersChainCost (ArrayRef< const Value * > Ptrs, const Value *Base, const TTI::PointersChainInfo &Info, Type *AccessTy, TTI::TargetCostKind CostKind) const override
void getUnrollingPreferences (Loop *L, ScalarEvolution &SE, TTI::UnrollingPreferences &UP, OptimizationRemarkEmitter *ORE) const override
void getPeelingPreferences (Loop *L, ScalarEvolution &SE, TTI::PeelingPreferences &PP) const override
unsigned getMinVectorRegisterBitWidth () const override
InstructionCost getShuffleCost (TTI::ShuffleKind Kind, VectorType *DstTy, VectorType *SrcTy, ArrayRef< int > Mask, TTI::TargetCostKind CostKind, int Index, VectorType *SubTp, ArrayRef< const Value * > Args={}, const Instruction *CxtI=nullptr) const override
InstructionCost getScalarizationOverhead (VectorType *Ty, const APInt &DemandedElts, bool Insert, bool Extract, TTI::TargetCostKind CostKind, bool ForPoisonSrc=true, ArrayRef< Value * > VL={}) const override
 Estimate the overhead of scalarizing an instruction.
InstructionCost getIntrinsicInstrCost (const IntrinsicCostAttributes &ICA, TTI::TargetCostKind CostKind) const override
 Get intrinsic cost based on arguments.
InstructionCost getAddressComputationCost (Type *PTy, ScalarEvolution *SE, const SCEV *Ptr, TTI::TargetCostKind CostKind) const override
InstructionCost getInterleavedMemoryOpCost (unsigned Opcode, Type *VecTy, unsigned Factor, ArrayRef< unsigned > Indices, Align Alignment, unsigned AddressSpace, TTI::TargetCostKind CostKind, bool UseMaskForCond=false, bool UseMaskForGaps=false) const override
InstructionCost getGatherScatterOpCost (unsigned Opcode, Type *DataTy, const Value *Ptr, bool VariableMask, Align Alignment, TTI::TargetCostKind CostKind, const Instruction *I) const override
InstructionCost getExpandCompressMemoryOpCost (unsigned Opcode, Type *Src, bool VariableMask, Align Alignment, TTI::TargetCostKind CostKind, const Instruction *I=nullptr) const override
InstructionCost getStridedMemoryOpCost (unsigned Opcode, Type *DataTy, const Value *Ptr, bool VariableMask, Align Alignment, TTI::TargetCostKind CostKind, const Instruction *I) const override
InstructionCost getCostOfKeepingLiveOverCall (ArrayRef< Type * > Tys) const override
InstructionCost getCastInstrCost (unsigned Opcode, Type *Dst, Type *Src, TTI::CastContextHint CCH, TTI::TargetCostKind CostKind, const Instruction *I=nullptr) const override
InstructionCost getMinMaxReductionCost (Intrinsic::ID IID, VectorType *Ty, FastMathFlags FMF, TTI::TargetCostKind CostKind) const override
 Try to calculate op costs for min/max reduction operations.
InstructionCost getArithmeticReductionCost (unsigned Opcode, VectorType *Ty, std::optional< FastMathFlags > FMF, TTI::TargetCostKind CostKind) const override
InstructionCost getExtendedReductionCost (unsigned Opcode, bool IsUnsigned, Type *ResTy, VectorType *ValTy, std::optional< FastMathFlags > FMF, TTI::TargetCostKind CostKind) const override
InstructionCost getMemoryOpCost (unsigned Opcode, Type *Src, Align Alignment, unsigned AddressSpace, TTI::TargetCostKind CostKind, TTI::OperandValueInfo OpdInfo={TTI::OK_AnyValue, TTI::OP_None}, const Instruction *I=nullptr) const override
InstructionCost getCmpSelInstrCost (unsigned Opcode, Type *ValTy, Type *CondTy, CmpInst::Predicate VecPred, TTI::TargetCostKind CostKind, TTI::OperandValueInfo Op1Info={TTI::OK_AnyValue, TTI::OP_None}, TTI::OperandValueInfo Op2Info={TTI::OK_AnyValue, TTI::OP_None}, const Instruction *I=nullptr) const override
InstructionCost getCFInstrCost (unsigned Opcode, TTI::TargetCostKind CostKind, const Instruction *I=nullptr) const override
InstructionCost getVectorInstrCost (unsigned Opcode, Type *Val, TTI::TargetCostKind CostKind, unsigned Index, const Value *Op0, const Value *Op1) const override
InstructionCost getIndexedVectorInstrCostFromEnd (unsigned Opcode, Type *Val, TTI::TargetCostKind CostKind, unsigned Index) const override
InstructionCost getArithmeticInstrCost (unsigned Opcode, Type *Ty, TTI::TargetCostKind CostKind, TTI::OperandValueInfo Op1Info={TTI::OK_AnyValue, TTI::OP_None}, TTI::OperandValueInfo Op2Info={TTI::OK_AnyValue, TTI::OP_None}, ArrayRef< const Value * > Args={}, const Instruction *CxtI=nullptr) const override
bool isElementTypeLegalForScalableVector (Type *Ty) const override
bool isLegalMaskedLoadStore (Type *DataType, Align Alignment) const
bool isLegalMaskedLoad (Type *DataType, Align Alignment, unsigned) const override
bool isLegalMaskedStore (Type *DataType, Align Alignment, unsigned) const override
bool isLegalMaskedGatherScatter (Type *DataType, Align Alignment) const
bool isLegalMaskedGather (Type *DataType, Align Alignment) const override
bool isLegalMaskedScatter (Type *DataType, Align Alignment) const override
bool forceScalarizeMaskedGather (VectorType *VTy, Align Alignment) const override
bool forceScalarizeMaskedScatter (VectorType *VTy, Align Alignment) const override
bool isLegalStridedLoadStore (Type *DataType, Align Alignment) const override
bool isLegalInterleavedAccessType (VectorType *VTy, unsigned Factor, Align Alignment, unsigned AddrSpace) const override
bool isLegalMaskedExpandLoad (Type *DataType, Align Alignment) const override
bool isLegalMaskedCompressStore (Type *DataTy, Align Alignment) const override
bool isVScaleKnownToBeAPowerOfTwo () const override
TargetTransformInfo::VPLegalization getVPLegalizationStrategy (const VPIntrinsic &PI) const override
bool isLegalToVectorizeReduction (const RecurrenceDescriptor &RdxDesc, ElementCount VF) const override
unsigned getMaxInterleaveFactor (ElementCount VF) const override
bool enableInterleavedAccessVectorization () const override
bool enableMaskedInterleavedAccessVectorization () const override
unsigned getMinTripCountTailFoldingThreshold () const override
unsigned getNumberOfRegisters (unsigned ClassID) const override
TTI::AddressingModeKind getPreferredAddressingMode (const Loop *L, ScalarEvolution *SE) const override
unsigned getRegisterClassForType (bool Vector, Type *Ty=nullptr) const override
const chargetRegisterClassName (unsigned ClassID) const override
bool isLSRCostLess (const TargetTransformInfo::LSRCost &C1, const TargetTransformInfo::LSRCost &C2) const override
bool shouldConsiderAddressTypePromotion (const Instruction &I, bool &AllowPromotionWithoutCommonHeader) const override
 See if I should be considered for address type promotion.
std::optional< unsignedgetMinPageSize () const override
bool canSplatOperand (Instruction *I, int Operand) const
 Return true if the (vector) instruction I will be lowered to an instruction with a scalar splat operand for the given Operand number.
bool canSplatOperand (unsigned Opcode, int Operand) const
 Return true if a vector instruction will lower to a target instruction able to splat the given operand.
bool isProfitableToSinkOperands (Instruction *I, SmallVectorImpl< Use * > &Ops) const override
 Check if sinking I's operands to I's basic block is profitable, because the operands can be folded into a target instruction, e.g.
TTI::MemCmpExpansionOptions enableMemCmpExpansion (bool OptSize, bool IsZeroCmp) const override
InstructionCost getVectorInstrCost (unsigned Opcode, Type *Val, TTI::TargetCostKind CostKind, unsigned Index, Value *Scalar, ArrayRef< std::tuple< Value *, User *, int > > ScalarUserAndIdx) const override
InstructionCost getVectorInstrCost (const Instruction &I, Type *Val, TTI::TargetCostKind CostKind, unsigned Index) const override

Additional Inherited Members

Protected Types inherited from llvm::TargetTransformInfoImplBase
typedef TargetTransformInfo TTI
Protected Member Functions inherited from llvm::BasicTTIImplBase< RISCVTTIImpl >
 BasicTTIImplBase (const TargetMachine *TM, const DataLayout &DL)
virtual ~BasicTTIImplBase ()=default
Protected Member Functions inherited from llvm::TargetTransformInfoImplCRTPBase< T >
 TargetTransformInfoImplCRTPBase (const DataLayout &DL)
Protected Member Functions inherited from llvm::TargetTransformInfoImplBase
 TargetTransformInfoImplBase (const DataLayout &DL)
unsigned minRequiredElementSize (const Value *Val, bool &isSigned) const
bool isStridedAccess (const SCEV *Ptr) const
const SCEVConstantgetConstantStrideStep (ScalarEvolution *SE, const SCEV *Ptr) const
bool isConstantStridedAccessLessThan (ScalarEvolution *SE, const SCEV *Ptr, int64_t MergeDistance) const
Protected Attributes inherited from llvm::BasicTTIImplBase< RISCVTTIImpl >
const DataLayoutDL
Protected Attributes inherited from llvm::TargetTransformInfoImplBase
const DataLayoutDL

Detailed Description

Definition at line 28 of file RISCVTargetTransformInfo.h.

Member Enumeration Documentation

◆ RISCVRegisterClass

Enumerator
GPRRC 
FPRRC 
VRRC 

Definition at line 423 of file RISCVTargetTransformInfo.h.

Constructor & Destructor Documentation

◆ RISCVTTIImpl()

llvm::RISCVTTIImpl::RISCVTTIImpl ( const RISCVTargetMachine * TM,
const Function & F )
inlineexplicit

Member Function Documentation

◆ canSplatOperand() [1/2]

bool RISCVTTIImpl::canSplatOperand ( Instruction * I,
int Operand ) const

Return true if the (vector) instruction I will be lowered to an instruction with a scalar splat operand for the given Operand number.

Definition at line 2862 of file RISCVTargetTransformInfo.cpp.

References canSplatOperand(), llvm::dyn_cast(), I, and II.

Referenced by canSplatOperand(), getArithmeticInstrCost(), and isProfitableToSinkOperands().

◆ canSplatOperand() [2/2]

bool RISCVTTIImpl::canSplatOperand ( unsigned Opcode,
int Operand ) const

Return true if a vector instruction will lower to a target instruction able to splat the given operand.

Definition at line 2833 of file RISCVTargetTransformInfo.cpp.

◆ enableInterleavedAccessVectorization()

bool llvm::RISCVTTIImpl::enableInterleavedAccessVectorization ( ) const
inlineoverridevirtual

Reimplemented from llvm::TargetTransformInfoImplBase.

Definition at line 415 of file RISCVTargetTransformInfo.h.

◆ enableMaskedInterleavedAccessVectorization()

bool llvm::RISCVTTIImpl::enableMaskedInterleavedAccessVectorization ( ) const
inlineoverridevirtual

Reimplemented from llvm::TargetTransformInfoImplBase.

Definition at line 417 of file RISCVTargetTransformInfo.h.

◆ enableMemCmpExpansion()

RISCVTTIImpl::TTI::MemCmpExpansionOptions RISCVTTIImpl::enableMemCmpExpansion ( bool OptSize,
bool IsZeroCmp ) const
overridevirtual

Reimplemented from llvm::TargetTransformInfoImplBase.

Definition at line 3021 of file RISCVTargetTransformInfo.cpp.

References Options, and Size.

◆ enableOrderedReductions()

bool llvm::RISCVTTIImpl::enableOrderedReductions ( ) const
inlineoverridevirtual

Reimplemented from llvm::TargetTransformInfoImplBase.

Definition at line 113 of file RISCVTargetTransformInfo.h.

◆ enableScalableVectorization()

bool llvm::RISCVTTIImpl::enableScalableVectorization ( ) const
inlineoverridevirtual

Reimplemented from llvm::TargetTransformInfoImplBase.

Definition at line 114 of file RISCVTargetTransformInfo.h.

◆ forceScalarizeMaskedGather()

bool llvm::RISCVTTIImpl::forceScalarizeMaskedGather ( VectorType * VTy,
Align Alignment ) const
inlineoverridevirtual

Reimplemented from llvm::TargetTransformInfoImplBase.

Definition at line 324 of file RISCVTargetTransformInfo.h.

◆ forceScalarizeMaskedScatter()

bool llvm::RISCVTTIImpl::forceScalarizeMaskedScatter ( VectorType * VTy,
Align Alignment ) const
inlineoverridevirtual

Reimplemented from llvm::TargetTransformInfoImplBase.

Definition at line 330 of file RISCVTargetTransformInfo.h.

◆ getAddressComputationCost()

InstructionCost RISCVTTIImpl::getAddressComputationCost ( Type * PTy,
ScalarEvolution * SE,
const SCEV * Ptr,
TTI::TargetCostKind CostKind ) const
overridevirtual

◆ getArithmeticInstrCost()

◆ getArithmeticReductionCost()

◆ getCastInstrCost()

◆ getCFInstrCost()

InstructionCost RISCVTTIImpl::getCFInstrCost ( unsigned Opcode,
TTI::TargetCostKind CostKind,
const Instruction * I = nullptr ) const
overridevirtual

◆ getCmpSelInstrCost()

◆ getCostOfKeepingLiveOverCall()

InstructionCost RISCVTTIImpl::getCostOfKeepingLiveOverCall ( ArrayRef< Type * > Tys) const
overridevirtual

◆ getExpandCompressMemoryOpCost()

◆ getExtendedReductionCost()

◆ getGatherScatterOpCost()

◆ getIndexedVectorInstrCostFromEnd()

InstructionCost RISCVTTIImpl::getIndexedVectorInstrCostFromEnd ( unsigned Opcode,
Type * Val,
TTI::TargetCostKind CostKind,
unsigned Index ) const
overridevirtual

◆ getInterleavedMemoryOpCost()

◆ getIntImmCost()

InstructionCost RISCVTTIImpl::getIntImmCost ( const APInt & Imm,
Type * Ty,
TTI::TargetCostKind CostKind ) const
overridevirtual

◆ getIntImmCostInst()

◆ getIntImmCostIntrin()

InstructionCost RISCVTTIImpl::getIntImmCostIntrin ( Intrinsic::ID IID,
unsigned Idx,
const APInt & Imm,
Type * Ty,
TTI::TargetCostKind CostKind ) const
overridevirtual

◆ getIntrinsicInstrCost()

◆ getMaskedMemoryOpCost()

InstructionCost RISCVTTIImpl::getMaskedMemoryOpCost ( unsigned Opcode,
Type * Src,
Align Alignment,
unsigned AddressSpace,
TTI::TargetCostKind CostKind ) const
overridevirtual

◆ getMaximumVF()

◆ getMaxInterleaveFactor()

unsigned llvm::RISCVTTIImpl::getMaxInterleaveFactor ( ElementCount VF) const
inlineoverridevirtual

◆ getMaxVScale()

std::optional< unsigned > RISCVTTIImpl::getMaxVScale ( ) const
overridevirtual

◆ getMemoryOpCost()

◆ getMinMaxReductionCost()

◆ getMinPageSize()

std::optional< unsigned > llvm::RISCVTTIImpl::getMinPageSize ( ) const
inlineoverridevirtual

Reimplemented from llvm::TargetTransformInfoImplBase.

Definition at line 482 of file RISCVTargetTransformInfo.h.

◆ getMinTripCountTailFoldingThreshold()

unsigned RISCVTTIImpl::getMinTripCountTailFoldingThreshold ( ) const
overridevirtual

Reimplemented from llvm::TargetTransformInfoImplBase.

Definition at line 2740 of file RISCVTargetTransformInfo.cpp.

References RVVMinTripCount.

◆ getMinVectorRegisterBitWidth()

unsigned llvm::RISCVTTIImpl::getMinVectorRegisterBitWidth ( ) const
inlineoverridevirtual

Reimplemented from llvm::TargetTransformInfoImplBase.

Definition at line 163 of file RISCVTargetTransformInfo.h.

◆ getNumberOfRegisters()

unsigned llvm::RISCVTTIImpl::getNumberOfRegisters ( unsigned ClassID) const
inlineoverridevirtual

Reimplemented from llvm::TargetTransformInfoImplBase.

Definition at line 424 of file RISCVTargetTransformInfo.h.

References FPRRC, GPRRC, llvm_unreachable, and VRRC.

◆ getPartialReductionCost()

◆ getPeelingPreferences()

void RISCVTTIImpl::getPeelingPreferences ( Loop * L,
ScalarEvolution & SE,
TTI::PeelingPreferences & PP ) const
overridevirtual

◆ getPointersChainCost()

◆ getPopcntSupport()

◆ getPreferredAddressingMode()

TTI::AddressingModeKind RISCVTTIImpl::getPreferredAddressingMode ( const Loop * L,
ScalarEvolution * SE ) const
overridevirtual

◆ getPreferredTailFoldingStyle()

TailFoldingStyle llvm::RISCVTTIImpl::getPreferredTailFoldingStyle ( bool IVUpdateMayOverflow) const
inlineoverridevirtual

Reimplemented from llvm::BasicTTIImplBase< RISCVTTIImpl >.

Definition at line 121 of file RISCVTargetTransformInfo.h.

References llvm::DataWithEVL, and llvm::None.

◆ getRegisterBitWidth()

◆ getRegisterClassForType()

unsigned llvm::RISCVTTIImpl::getRegisterClassForType ( bool Vector,
Type * Ty = nullptr ) const
inlineoverridevirtual

◆ getRegisterClassName()

const char * llvm::RISCVTTIImpl::getRegisterClassName ( unsigned ClassID) const
inlineoverridevirtual

Reimplemented from llvm::TargetTransformInfoImplBase.

Definition at line 464 of file RISCVTargetTransformInfo.h.

References FPRRC, GPRRC, llvm_unreachable, and VRRC.

◆ getRegUsageForType()

◆ getScalarizationOverhead()

InstructionCost RISCVTTIImpl::getScalarizationOverhead ( VectorType * InTy,
const APInt & DemandedElts,
bool Insert,
bool Extract,
TTI::TargetCostKind CostKind,
bool ForPoisonSrc = true,
ArrayRef< Value * > VL = {} ) const
overridevirtual

Estimate the overhead of scalarizing an instruction.

Insert and Extract are set if the demanded result elements need to be inserted and/or extracted from vectors.

FIXME: a bitfield is not a reasonable abstraction for talking about which elements are needed from a scalable vector

Reimplemented from llvm::BasicTTIImplBase< RISCVTTIImpl >.

Definition at line 925 of file RISCVTargetTransformInfo.cpp.

References assert(), llvm::cast(), CostKind, getCastInstrCost(), llvm::InstructionCost::getInvalid(), llvm::BasicTTIImplBase< RISCVTTIImpl >::getScalarizationOverhead(), getScalarizationOverhead(), llvm::BasicTTIImplBase< RISCVTTIImpl >::getTypeLegalizationCost(), llvm::isa(), isM1OrSmaller(), and llvm::TargetTransformInfo::None.

Referenced by getScalarizationOverhead().

◆ getShuffleCost()

InstructionCost RISCVTTIImpl::getShuffleCost ( TTI::ShuffleKind Kind,
VectorType * DstTy,
VectorType * SrcTy,
ArrayRef< int > Mask,
TTI::TargetCostKind CostKind,
int Index,
VectorType * SubTp,
ArrayRef< const Value * > Args = {},
const Instruction * CxtI = nullptr ) const
overridevirtual

Reimplemented from llvm::BasicTTIImplBase< RISCVTTIImpl >.

Definition at line 607 of file RISCVTargetTransformInfo.cpp.

References assert(), llvm::MVT::bitsLE(), llvm::CallingConv::C, llvm::cast(), CostKind, costShuffleViaSplitting(), costShuffleViaVRegSplitting(), llvm::createStrideMask(), llvm::dyn_cast(), llvm::equal(), llvm::FixedVectorType::get(), llvm::IntegerType::get(), llvm::VectorType::get(), getCastInstrCost(), llvm::FixedVectorType::getDoubleElementsVectorType(), llvm::VectorType::getElementCount(), llvm::Type::getInt1Ty(), llvm::InstructionCost::getInvalid(), llvm::details::FixedOrScalableQuantity< LeafTy, ValueTy >::getKnownMinValue(), llvm::RISCVTargetLowering::getM1VT(), llvm::Operator::getOpcode(), llvm::MVT::getScalarSizeInBits(), llvm::Type::getScalarType(), llvm::BasicTTIImplBase< RISCVTTIImpl >::getShuffleCost(), getShuffleCost(), llvm::BasicTTIImplBase< RISCVTTIImpl >::getTypeLegalizationCost(), llvm::MVT::getVectorMinNumElements(), getVRGatherIndexType(), I, llvm::BasicTTIImplBase< RISCVTTIImpl >::improveShuffleKindFromMask(), llvm::isInt(), llvm::ShuffleVectorInst::isInterleaveMask(), isRepeatedConcatMask(), llvm::Type::isScalableTy(), llvm::InstructionCost::isValid(), llvm::Log2_32(), llvm::TargetTransformInfo::None, shouldSplit(), llvm::TargetTransformInfo::SK_Broadcast, llvm::TargetTransformInfo::SK_ExtractSubvector, llvm::TargetTransformInfo::SK_InsertSubvector, llvm::TargetTransformInfo::SK_PermuteSingleSrc, llvm::TargetTransformInfo::SK_PermuteTwoSrc, llvm::TargetTransformInfo::SK_Reverse, llvm::TargetTransformInfo::SK_Select, llvm::TargetTransformInfo::SK_Splice, llvm::TargetTransformInfo::SK_Transpose, and llvm::TargetTransformInfo::TCC_Free.

Referenced by getInterleavedMemoryOpCost(), getIntrinsicInstrCost(), and getShuffleCost().

◆ getStoreImmCost()

InstructionCost RISCVTTIImpl::getStoreImmCost ( Type * VecTy,
TTI::OperandValueInfo OpInfo,
TTI::TargetCostKind CostKind ) const

Return the cost of materializing an immediate for a value operand of a store instruction.

Definition at line 2045 of file RISCVTargetTransformInfo.cpp.

References assert(), CostKind, and llvm::isa().

Referenced by getMemoryOpCost().

◆ getStridedMemoryOpCost()

◆ getUnrollingPreferences()

◆ getVectorInstrCost() [1/3]

InstructionCost llvm::BasicTTIImplBase< RISCVTTIImpl >::getVectorInstrCost ( const Instruction & I,
Type * Val,
TTI::TargetCostKind CostKind,
unsigned Index ) const
inlineoverridevirtual

Reimplemented from llvm::BasicTTIImplBase< RISCVTTIImpl >.

Definition at line 1443 of file BasicTTIImpl.h.

◆ getVectorInstrCost() [2/3]

◆ getVectorInstrCost() [3/3]

InstructionCost llvm::BasicTTIImplBase< RISCVTTIImpl >::getVectorInstrCost ( unsigned Opcode,
Type * Val,
TTI::TargetCostKind CostKind,
unsigned Index,
Value * Scalar,
ArrayRef< std::tuple< Value *, User *, int > > ScalarUserAndIdx ) const
inlineoverridevirtual
Parameters
ScalarUserAndIdxencodes the information about extracts from a vector with 'Scalar' being the value being extracted,'User' being the user of the extract(nullptr if user is not known before vectorization) and 'Idx' being the extract lane.

Reimplemented from llvm::BasicTTIImplBase< RISCVTTIImpl >.

Definition at line 1434 of file BasicTTIImpl.h.

◆ getVPLegalizationStrategy()

TargetTransformInfo::VPLegalization llvm::RISCVTTIImpl::getVPLegalizationStrategy ( const VPIntrinsic & PI) const
inlineoverridevirtual

◆ getVScaleForTuning()

std::optional< unsigned > RISCVTTIImpl::getVScaleForTuning ( ) const
overridevirtual

◆ hasActiveVectorLength()

bool RISCVTTIImpl::hasActiveVectorLength ( ) const
overridevirtual

Reimplemented from llvm::TargetTransformInfoImplBase.

Definition at line 285 of file RISCVTargetTransformInfo.cpp.

◆ isElementTypeLegalForScalableVector()

bool llvm::RISCVTTIImpl::isElementTypeLegalForScalableVector ( Type * Ty) const
inlineoverridevirtual

◆ isLegalInterleavedAccessType()

bool llvm::RISCVTTIImpl::isLegalInterleavedAccessType ( VectorType * VTy,
unsigned Factor,
Align Alignment,
unsigned AddrSpace ) const
inlineoverridevirtual

◆ isLegalMaskedCompressStore()

bool RISCVTTIImpl::isLegalMaskedCompressStore ( Type * DataTy,
Align Alignment ) const
overridevirtual

◆ isLegalMaskedExpandLoad()

bool RISCVTTIImpl::isLegalMaskedExpandLoad ( Type * DataType,
Align Alignment ) const
overridevirtual

◆ isLegalMaskedGather()

bool llvm::RISCVTTIImpl::isLegalMaskedGather ( Type * DataType,
Align Alignment ) const
inlineoverridevirtual

Reimplemented from llvm::TargetTransformInfoImplBase.

Definition at line 317 of file RISCVTargetTransformInfo.h.

References isLegalMaskedGatherScatter().

Referenced by getGatherScatterOpCost().

◆ isLegalMaskedGatherScatter()

bool llvm::RISCVTTIImpl::isLegalMaskedGatherScatter ( Type * DataType,
Align Alignment ) const
inline

◆ isLegalMaskedLoad()

bool llvm::RISCVTTIImpl::isLegalMaskedLoad ( Type * DataType,
Align Alignment,
unsigned  ) const
inlineoverridevirtual

Reimplemented from llvm::TargetTransformInfoImplBase.

Definition at line 285 of file RISCVTargetTransformInfo.h.

References isLegalMaskedLoadStore().

◆ isLegalMaskedLoadStore()

◆ isLegalMaskedScatter()

bool llvm::RISCVTTIImpl::isLegalMaskedScatter ( Type * DataType,
Align Alignment ) const
inlineoverridevirtual

Reimplemented from llvm::TargetTransformInfoImplBase.

Definition at line 320 of file RISCVTargetTransformInfo.h.

References isLegalMaskedGatherScatter().

Referenced by getGatherScatterOpCost().

◆ isLegalMaskedStore()

bool llvm::RISCVTTIImpl::isLegalMaskedStore ( Type * DataType,
Align Alignment,
unsigned  ) const
inlineoverridevirtual

Reimplemented from llvm::TargetTransformInfoImplBase.

Definition at line 289 of file RISCVTargetTransformInfo.h.

References isLegalMaskedLoadStore().

◆ isLegalStridedLoadStore()

bool llvm::RISCVTTIImpl::isLegalStridedLoadStore ( Type * DataType,
Align Alignment ) const
inlineoverridevirtual

◆ isLegalToVectorizeReduction()

◆ isLSRCostLess()

◆ isProfitableToSinkOperands()

bool RISCVTTIImpl::isProfitableToSinkOperands ( Instruction * I,
SmallVectorImpl< Use * > & Ops ) const
overridevirtual

◆ isVScaleKnownToBeAPowerOfTwo()

bool llvm::RISCVTTIImpl::isVScaleKnownToBeAPowerOfTwo ( ) const
inlineoverridevirtual

Reimplemented from llvm::BasicTTIImplBase< RISCVTTIImpl >.

Definition at line 352 of file RISCVTargetTransformInfo.h.

◆ preferAlternateOpcodeVectorization()

bool RISCVTTIImpl::preferAlternateOpcodeVectorization ( ) const
overridevirtual

Reimplemented from llvm::TargetTransformInfoImplBase.

Definition at line 2744 of file RISCVTargetTransformInfo.cpp.

◆ preferEpilogueVectorization()

bool llvm::RISCVTTIImpl::preferEpilogueVectorization ( ) const
inlineoverridevirtual

Reimplemented from llvm::TargetTransformInfoImplBase.

Definition at line 137 of file RISCVTargetTransformInfo.h.

◆ preferPredicateOverEpilogue()

bool llvm::RISCVTTIImpl::preferPredicateOverEpilogue ( TailFoldingInfo * TFI) const
inlineoverridevirtual

Reimplemented from llvm::BasicTTIImplBase< RISCVTTIImpl >.

Definition at line 117 of file RISCVTargetTransformInfo.h.

◆ shouldConsiderAddressTypePromotion()

bool RISCVTTIImpl::shouldConsiderAddressTypePromotion ( const Instruction & I,
bool & AllowPromotionWithoutCommonHeader ) const
overridevirtual

See if I should be considered for address type promotion.

We check if I is a sext with right type and used in memory accesses. If it used in a "complex" getelementptr, we allow it to be promoted without finding other sext instructions that sign extended the same initial value. A getelementptr is considered as "complex" if it has more than 2 operands.

Reimplemented from llvm::TargetTransformInfoImplBase.

Definition at line 2806 of file RISCVTargetTransformInfo.cpp.

References llvm::dyn_cast(), llvm::Type::getInt64Ty(), I, and llvm::isa().

◆ shouldConsiderVectorizationRegPressure()

bool llvm::RISCVTTIImpl::shouldConsiderVectorizationRegPressure ( ) const
inlineoverridevirtual

Reimplemented from llvm::TargetTransformInfoImplBase.

Definition at line 144 of file RISCVTargetTransformInfo.h.

◆ shouldExpandReduction()

bool RISCVTTIImpl::shouldExpandReduction ( const IntrinsicInst * II) const
overridevirtual

Reimplemented from llvm::TargetTransformInfoImplBase.

Definition at line 316 of file RISCVTargetTransformInfo.cpp.

References II.

◆ supportsScalableVectors()

bool llvm::RISCVTTIImpl::supportsScalableVectors ( ) const
inlineoverridevirtual

Reimplemented from llvm::TargetTransformInfoImplBase.

Definition at line 110 of file RISCVTargetTransformInfo.h.


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