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
getGEPCost (Type *PointeeType, const Value *Ptr, ArrayRef< const Value * > Operands, Type *AccessType, TTI::TargetCostKind CostKind) const override
getPointersChainCost (ArrayRef< const Value * > Ptrs, const Value *Base, const TTI::PointersChainInfo &Info, Type *AccessTy, TTI::TargetCostKind CostKind) const override
getInstructionCost (const User *U, ArrayRef< const Value * > Operands, TTI::TargetCostKind CostKind) const override
isExpensiveToSpeculativelyExecute (const Instruction *I) const override
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 &
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
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
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
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
virtual bool
isTruncateFree (Type *Ty1, Type *Ty2) const
virtual bool
isProfitableToHoist (Instruction *I) const
virtual bool
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
virtual bool
enableAggressiveInterleaving (bool LoopHasReductions) const
virtual TTI::MemCmpExpansionOptions
enableMemCmpExpansion (bool OptSize, bool IsZeroCmp) const
virtual bool
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
getRegisterClassName (unsigned ClassID) const
virtual TypeSize
getRegisterBitWidth (TargetTransformInfo::RegisterKind K) const
virtual unsigned
getMinVectorRegisterBitWidth () const
virtual std::optional< unsigned >
virtual std::optional< unsigned >
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
virtual std::optional< unsigned >
getCacheSize (TargetTransformInfo::CacheLevel Level) const
virtual std::optional< unsigned >
getCacheAssociativity (TargetTransformInfo::CacheLevel Level) const
virtual std::optional< unsigned >
virtual unsigned
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
virtual APInt
getFeatureMask (const Function &F) const
virtual bool
isMultiversionedFunction (const Function &F) const
virtual unsigned
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.