LLVM: llvm::TargetTransformInfoImplCRTPBase< T > Class Template Reference (original) (raw)

CRTP base class for use as a mix-in that aids implementing a TargetTransformInfo-compatible class. More...

Public Member Functions

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 DataLayout &

getDataLayout () const

virtual unsigned

getEstimatedNumberOfCaseClusters (const SwitchInst &SI, unsigned &JTSize, ProfileSummaryInfo *PSI, BlockFrequencyInfo *BFI) const

virtual unsigned

getInliningThresholdMultiplier () const

virtual unsigned

getInliningCostBenefitAnalysisSavingsMultiplier () const

virtual unsigned

getInliningCostBenefitAnalysisProfitableMultiplier () const

virtual int

getInliningLastCallToStaticBonus () const

virtual unsigned

adjustInliningThreshold (const CallBase *CB) const

virtual unsigned

getCallerAllocaCost (const CallBase *CB, const AllocaInst *AI) const

virtual int

getInlinerVectorBonusPercent () const

virtual InstructionCost

getMemcpyCost (const Instruction *I) const

virtual uint64_t

getMaxMemIntrinsicInlineSizeThreshold () const

virtual BranchProbability

getPredictableBranchThreshold () const

virtual InstructionCost

getBranchMispredictPenalty () const

virtual bool

hasBranchDivergence (const Function *F=nullptr) const

virtual bool

isSourceOfDivergence (const Value *V) const

virtual bool

isAlwaysUniform (const Value *V) const

virtual bool

isValidAddrSpaceCast (unsigned FromAS, unsigned ToAS) const

virtual bool

addrspacesMayAlias (unsigned AS0, unsigned AS1) const

virtual unsigned

getFlatAddressSpace () const

virtual bool

collectFlatAddressOperands (SmallVectorImpl< int > &OpIndexes, Intrinsic::ID IID) const

virtual bool

isNoopAddrSpaceCast (unsigned, unsigned) const

virtual bool

canHaveNonUndefGlobalInitializerInAddressSpace (unsigned AS) const

virtual unsigned

getAssumedAddrSpace (const Value *V) const

virtual bool

isSingleThreaded () const

virtual std::pair< const Value *, unsigned >

getPredicatedAddrSpace (const Value *V) const

virtual Value *

rewriteIntrinsicWithAddressSpace (IntrinsicInst *II, Value *OldV, Value *NewV) const

virtual bool

isLoweredToCall (const Function *F) const

virtual bool

isHardwareLoopProfitable (Loop *L, ScalarEvolution &SE, AssumptionCache &AC, TargetLibraryInfo *LibInfo, HardwareLoopInfo &HWLoopInfo) const

virtual unsigned

getEpilogueVectorizationMinVF () const

virtual bool

preferPredicateOverEpilogue (TailFoldingInfo *TFI) const

virtual TailFoldingStyle

getPreferredTailFoldingStyle (bool IVUpdateMayOverflow=true) const

virtual std::optional< Instruction * >

instCombineIntrinsic (InstCombiner &IC, IntrinsicInst &II) const

virtual std::optional< Value * >

simplifyDemandedUseBitsIntrinsic (InstCombiner &IC, IntrinsicInst &II, APInt DemandedMask, KnownBits &Known, bool &KnownBitsComputed) const

virtual 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

virtual void

getUnrollingPreferences (Loop *, ScalarEvolution &, TTI::UnrollingPreferences &, OptimizationRemarkEmitter *) const

virtual void

getPeelingPreferences (Loop *, ScalarEvolution &, TTI::PeelingPreferences &) const

virtual bool

isLegalAddImmediate (int64_t Imm) const

virtual bool

isLegalAddScalableImmediate (int64_t Imm) const

virtual bool

isLegalICmpImmediate (int64_t Imm) const

virtual bool

isLegalAddressingMode (Type *Ty, GlobalValue *BaseGV, int64_t BaseOffset, bool HasBaseReg, int64_t Scale, unsigned AddrSpace, Instruction *I=nullptr, int64_t ScalableOffset=0) const

virtual bool

isLSRCostLess (const TTI::LSRCost &C1, const TTI::LSRCost &C2) const

virtual bool

isNumRegsMajorCostOfLSR () const

virtual bool

shouldDropLSRSolutionIfLessProfitable () const

virtual bool

isProfitableLSRChainElement (Instruction *I) const

virtual bool

canMacroFuseCmp () const

virtual bool

canSaveCmp (Loop *L, BranchInst **BI, ScalarEvolution *SE, LoopInfo *LI, DominatorTree *DT, AssumptionCache *AC, TargetLibraryInfo *LibInfo) const

virtual TTI::AddressingModeKind

getPreferredAddressingMode (const Loop *L, ScalarEvolution *SE) const

virtual bool

isLegalMaskedStore (Type *DataType, Align Alignment, unsigned AddressSpace, TTI::MaskKind MaskKind) const

virtual bool

isLegalMaskedLoad (Type *DataType, Align Alignment, unsigned AddressSpace, TTI::MaskKind MaskKind) 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

isLegalMaskedScatter (Type *DataType, Align Alignment) const

virtual bool

isLegalMaskedGather (Type *DataType, Align Alignment) const

virtual bool

forceScalarizeMaskedGather (VectorType *DataType, Align Alignment) const

virtual bool

forceScalarizeMaskedScatter (VectorType *DataType, Align Alignment) const

virtual bool

isLegalMaskedCompressStore (Type *DataType, Align Alignment) const

virtual bool

isLegalAltInstr (VectorType *VecTy, unsigned Opcode0, unsigned Opcode1, const SmallBitVector &OpcodeMask) const

virtual bool

isLegalMaskedExpandLoad (Type *DataType, Align Alignment) const

virtual bool

isLegalStridedLoadStore (Type *DataType, Align Alignment) const

virtual bool

isLegalInterleavedAccessType (VectorType *VTy, unsigned Factor, Align Alignment, unsigned AddrSpace) const

virtual bool

isLegalMaskedVectorHistogram (Type *AddrType, Type *DataType) const

virtual bool

enableOrderedReductions () const

virtual bool

hasDivRemOp (Type *DataType, bool IsSigned) const

virtual bool

hasVolatileVariant (Instruction *I, unsigned AddrSpace) const

virtual bool

prefersVectorizedAddressing () const

virtual InstructionCost

getScalingFactorCost (Type *Ty, GlobalValue *BaseGV, StackOffset BaseOffset, bool HasBaseReg, int64_t Scale, unsigned AddrSpace) const

virtual bool

LSRWithInstrQueries () const

virtual bool

isTruncateFree (Type *Ty1, Type *Ty2) const

virtual bool

isProfitableToHoist (Instruction *I) const

virtual bool

useAA () const

virtual bool

isTypeLegal (Type *Ty) const

virtual unsigned

getRegUsageForType (Type *Ty) const

virtual bool

shouldBuildLookupTables () const

virtual bool

shouldBuildLookupTablesForConstant (Constant *C) const

virtual bool

shouldBuildRelLookupTables () const

virtual bool

useColdCCForColdCall (Function &F) const

virtual bool

useFastCCForInternalCall (Function &F) const

virtual bool

isTargetIntrinsicTriviallyScalarizable (Intrinsic::ID ID) const

virtual bool

isTargetIntrinsicWithScalarOpAtArg (Intrinsic::ID ID, unsigned ScalarOpdIdx) const

virtual bool

isTargetIntrinsicWithOverloadTypeAtArg (Intrinsic::ID ID, int OpdIdx) const

virtual bool

isTargetIntrinsicWithStructReturnOverloadAtField (Intrinsic::ID ID, int RetIdx) const

virtual InstructionCost

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

virtual InstructionCost

getOperandsScalarizationOverhead (ArrayRef< Type * > Tys, TTI::TargetCostKind CostKind) const

virtual bool

supportsEfficientVectorElementLoadStore () const

virtual bool

supportsTailCalls () const

virtual bool

enableAggressiveInterleaving (bool LoopHasReductions) const

virtual TTI::MemCmpExpansionOptions

enableMemCmpExpansion (bool OptSize, bool IsZeroCmp) const

virtual bool

enableSelectOptimize () const

virtual bool

shouldTreatInstructionLikeSelect (const Instruction *I) const

virtual bool

enableInterleavedAccessVectorization () const

virtual bool

enableMaskedInterleavedAccessVectorization () const

virtual bool

isFPVectorizationPotentiallyUnsafe () const

virtual bool

allowsMisalignedMemoryAccesses (LLVMContext &Context, unsigned BitWidth, unsigned AddressSpace, Align Alignment, unsigned *Fast) const

virtual TTI::PopcntSupportKind

getPopcntSupport (unsigned IntTyWidthInBit) const

virtual bool

haveFastSqrt (Type *Ty) const

virtual bool

isFCmpOrdCheaperThanFCmpZero (Type *Ty) const

virtual InstructionCost

getFPOpCost (Type *Ty) const

virtual InstructionCost

getIntImmCodeSizeCost (unsigned Opcode, unsigned Idx, const APInt &Imm, Type *Ty) const

virtual InstructionCost

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

virtual InstructionCost

getIntImmCostInst (unsigned Opcode, unsigned Idx, const APInt &Imm, Type *Ty, TTI::TargetCostKind CostKind, Instruction *Inst=nullptr) const

virtual InstructionCost

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

virtual bool

preferToKeepConstantsAttached (const Instruction &Inst, const Function &Fn) const

virtual unsigned

getNumberOfRegisters (unsigned ClassID) const

virtual bool

hasConditionalLoadStoreForType (Type *Ty, bool IsStore) const

virtual unsigned

getRegisterClassForType (bool Vector, Type *Ty=nullptr) const

virtual const char *

getRegisterClassName (unsigned ClassID) const

virtual TypeSize

getRegisterBitWidth (TargetTransformInfo::RegisterKind K) const

virtual unsigned

getMinVectorRegisterBitWidth () const

virtual std::optional< unsigned >

getMaxVScale () const

virtual std::optional< unsigned >

getVScaleForTuning () const

virtual bool

isVScaleKnownToBeAPowerOfTwo () const

virtual bool

shouldMaximizeVectorBandwidth (TargetTransformInfo::RegisterKind K) const

virtual ElementCount

getMinimumVF (unsigned ElemWidth, bool IsScalable) const

virtual unsigned

getMaximumVF (unsigned ElemWidth, unsigned Opcode) const

virtual unsigned

getStoreMinimumVF (unsigned VF, Type *, Type *) const

virtual bool

shouldConsiderAddressTypePromotion (const Instruction &I, bool &AllowPromotionWithoutCommonHeader) const

virtual unsigned

getCacheLineSize () const

virtual std::optional< unsigned >

getCacheSize (TargetTransformInfo::CacheLevel Level) const

virtual std::optional< unsigned >

getCacheAssociativity (TargetTransformInfo::CacheLevel Level) const

virtual std::optional< unsigned >

getMinPageSize () const

virtual unsigned

getPrefetchDistance () const

virtual unsigned

getMinPrefetchStride (unsigned NumMemAccesses, unsigned NumStridedMemAccesses, unsigned NumPrefetches, bool HasCall) const

virtual unsigned

getMaxPrefetchIterationsAhead () const

virtual bool

enableWritePrefetching () const

virtual bool

shouldPrefetchAddressSpace (unsigned AS) const

virtual 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

virtual unsigned

getMaxInterleaveFactor (ElementCount VF) const

virtual InstructionCost

getArithmeticInstrCost (unsigned Opcode, Type *Ty, TTI::TargetCostKind CostKind, TTI::OperandValueInfo Opd1Info, TTI::OperandValueInfo Opd2Info, ArrayRef< const Value * > Args, const Instruction *CxtI=nullptr) const

virtual InstructionCost

getAltInstrCost (VectorType *VecTy, unsigned Opcode0, unsigned Opcode1, const SmallBitVector &OpcodeMask, TTI::TargetCostKind CostKind) const

virtual 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

virtual InstructionCost

getCastInstrCost (unsigned Opcode, Type *Dst, Type *Src, TTI::CastContextHint CCH, TTI::TargetCostKind CostKind, const Instruction *I) const

virtual InstructionCost

getExtractWithExtendCost (unsigned Opcode, Type *Dst, VectorType *VecTy, unsigned Index, TTI::TargetCostKind CostKind) const

virtual InstructionCost

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

virtual InstructionCost

getCmpSelInstrCost (unsigned Opcode, Type *ValTy, Type *CondTy, CmpInst::Predicate VecPred, TTI::TargetCostKind CostKind, TTI::OperandValueInfo Op1Info, TTI::OperandValueInfo Op2Info, const Instruction *I) const

virtual InstructionCost

getVectorInstrCost (unsigned Opcode, Type *Val, TTI::TargetCostKind CostKind, unsigned Index, const Value *Op0, const Value *Op1) const

virtual InstructionCost

getVectorInstrCost (unsigned Opcode, Type *Val, TTI::TargetCostKind CostKind, unsigned Index, Value *Scalar, ArrayRef< std::tuple< Value *, User *, int > > ScalarUserAndIdx) const

virtual InstructionCost

getVectorInstrCost (const Instruction &I, Type *Val, TTI::TargetCostKind CostKind, unsigned Index) const

virtual InstructionCost

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

virtual InstructionCost

getReplicationShuffleCost (Type *EltTy, int ReplicationFactor, int VF, const APInt &DemandedDstElts, TTI::TargetCostKind CostKind) const

virtual InstructionCost

getInsertExtractValueCost (unsigned Opcode, TTI::TargetCostKind CostKind) const

virtual InstructionCost

getMemoryOpCost (unsigned Opcode, Type *Src, Align Alignment, unsigned AddressSpace, TTI::TargetCostKind CostKind, TTI::OperandValueInfo OpInfo, const Instruction *I) const

virtual InstructionCost

getInterleavedMemoryOpCost (unsigned Opcode, Type *VecTy, unsigned Factor, ArrayRef< unsigned > Indices, Align Alignment, unsigned AddressSpace, TTI::TargetCostKind CostKind, bool UseMaskForCond, bool UseMaskForGaps) const

virtual InstructionCost

getIntrinsicInstrCost (const IntrinsicCostAttributes &ICA, TTI::TargetCostKind CostKind) const

virtual InstructionCost

getMemIntrinsicInstrCost (const MemIntrinsicCostAttributes &MICA, TTI::TargetCostKind CostKind) const

virtual InstructionCost

getCallInstrCost (Function *F, Type *RetTy, ArrayRef< Type * > Tys, TTI::TargetCostKind CostKind) const

virtual unsigned

getNumberOfParts (Type *Tp) const

virtual InstructionCost

getAddressComputationCost (Type *PtrTy, ScalarEvolution *, const SCEV *, TTI::TargetCostKind) const

virtual InstructionCost

getArithmeticReductionCost (unsigned, VectorType *, std::optional< FastMathFlags > FMF, TTI::TargetCostKind) const

virtual InstructionCost

getMinMaxReductionCost (Intrinsic::ID IID, VectorType *, FastMathFlags, TTI::TargetCostKind) const

virtual InstructionCost

getExtendedReductionCost (unsigned Opcode, bool IsUnsigned, Type *ResTy, VectorType *Ty, std::optional< FastMathFlags > FMF, TTI::TargetCostKind CostKind) const

virtual InstructionCost

getMulAccReductionCost (bool IsUnsigned, unsigned RedOpcode, Type *ResTy, VectorType *Ty, TTI::TargetCostKind CostKind) const

virtual InstructionCost

getCostOfKeepingLiveOverCall (ArrayRef< Type * > Tys) const

virtual bool

getTgtMemIntrinsic (IntrinsicInst *Inst, MemIntrinsicInfo &Info) const

virtual unsigned

getAtomicMemIntrinsicMaxElementSize () const

virtual Value *

getOrCreateResultFromMemIntrinsic (IntrinsicInst *Inst, Type *ExpectedType, bool CanCreate=true) const

virtual Type *

getMemcpyLoopLoweringType (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 bool

areInlineCompatible (const Function *Caller, const Function *Callee) const

virtual unsigned

getInlineCallPenalty (const Function *F, const CallBase &Call, unsigned DefaultCallPenalty) const

virtual bool

areTypesABICompatible (const Function *Caller, const Function *Callee, ArrayRef< Type * > Types) const

virtual bool

isIndexedLoadLegal (TTI::MemIndexedMode Mode, Type *Ty) const

virtual bool

isIndexedStoreLegal (TTI::MemIndexedMode Mode, Type *Ty) 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 bool

isLegalToVectorizeReduction (const RecurrenceDescriptor &RdxDesc, ElementCount VF) const

virtual bool

isElementTypeLegalForScalableVector (Type *Ty) 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

preferAlternateOpcodeVectorization () const

virtual bool

preferPredicatedReductionSelect () const

virtual bool

preferEpilogueVectorization () const

virtual bool

shouldConsiderVectorizationRegPressure () const

virtual bool

shouldExpandReduction (const IntrinsicInst *II) const

virtual TTI::ReductionShuffle

getPreferredExpandedReductionShuffle (const IntrinsicInst *II) const

virtual unsigned

getGISelRematGlobalCost () const

virtual unsigned

getMinTripCountTailFoldingThreshold () const

virtual bool

supportsScalableVectors () const

virtual bool

enableScalableVectorization () const

virtual bool

hasActiveVectorLength () const

virtual bool

isProfitableToSinkOperands (Instruction *I, SmallVectorImpl< Use * > &Ops) const

virtual bool

isVectorShiftByScalarCheap (Type *Ty) const

virtual TargetTransformInfo::VPLegalization

getVPLegalizationStrategy (const VPIntrinsic &PI) 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

template<typename T>
class llvm::TargetTransformInfoImplCRTPBase< T >

CRTP base class for use as a mix-in that aids implementing a TargetTransformInfo-compatible class.

Definition at line 1235 of file TargetTransformInfoImpl.h.