-
Notifications
You must be signed in to change notification settings - Fork 15.3k
[TTI] Make the rest of TTI::Concept/TTI::Model methods const (NFC) #136668
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
s-barannikov
merged 1 commit into
llvm:main
from
s-barannikov:tti/constify-concept-model
Apr 22, 2025
Merged
[TTI] Make the rest of TTI::Concept/TTI::Model methods const (NFC) #136668
s-barannikov
merged 1 commit into
llvm:main
from
s-barannikov:tti/constify-concept-model
Apr 22, 2025
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This will simplify future changes.
Member
|
@llvm/pr-subscribers-llvm-analysis Author: Sergei Barannikov (s-barannikov) ChangesThis will simplify future changes. Patch is 64.93 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/136668.diff 1 Files Affected:
diff --git a/llvm/include/llvm/Analysis/TargetTransformInfo.h b/llvm/include/llvm/Analysis/TargetTransformInfo.h
index b5d766c34d09d..5a74523d37e81 100644
--- a/llvm/include/llvm/Analysis/TargetTransformInfo.h
+++ b/llvm/include/llvm/Analysis/TargetTransformInfo.h
@@ -1923,7 +1923,7 @@ class TargetTransformInfo {
/// implementation in a type erased interface.
template <typename T> class Model;
- std::unique_ptr<Concept> TTIImpl;
+ std::unique_ptr<const Concept> TTIImpl;
};
class TargetTransformInfo::Concept {
@@ -1933,37 +1933,37 @@ class TargetTransformInfo::Concept {
virtual InstructionCost getGEPCost(Type *PointeeType, const Value *Ptr,
ArrayRef<const Value *> Operands,
Type *AccessType,
- TTI::TargetCostKind CostKind) = 0;
+ TTI::TargetCostKind CostKind) const = 0;
virtual InstructionCost
getPointersChainCost(ArrayRef<const Value *> Ptrs, const Value *Base,
const TTI::PointersChainInfo &Info, Type *AccessTy,
- TTI::TargetCostKind CostKind) = 0;
+ TTI::TargetCostKind CostKind) const = 0;
virtual unsigned getInliningThresholdMultiplier() const = 0;
virtual unsigned getInliningCostBenefitAnalysisSavingsMultiplier() const = 0;
virtual unsigned
getInliningCostBenefitAnalysisProfitableMultiplier() const = 0;
virtual int getInliningLastCallToStaticBonus() const = 0;
- virtual unsigned adjustInliningThreshold(const CallBase *CB) = 0;
+ virtual unsigned adjustInliningThreshold(const CallBase *CB) const = 0;
virtual int getInlinerVectorBonusPercent() const = 0;
virtual unsigned getCallerAllocaCost(const CallBase *CB,
const AllocaInst *AI) const = 0;
- virtual InstructionCost getMemcpyCost(const Instruction *I) = 0;
+ virtual InstructionCost getMemcpyCost(const Instruction *I) const = 0;
virtual uint64_t getMaxMemIntrinsicInlineSizeThreshold() const = 0;
virtual unsigned
getEstimatedNumberOfCaseClusters(const SwitchInst &SI, unsigned &JTSize,
ProfileSummaryInfo *PSI,
- BlockFrequencyInfo *BFI) = 0;
+ BlockFrequencyInfo *BFI) const = 0;
virtual InstructionCost getInstructionCost(const User *U,
ArrayRef<const Value *> Operands,
- TargetCostKind CostKind) = 0;
- virtual BranchProbability getPredictableBranchThreshold() = 0;
- virtual InstructionCost getBranchMispredictPenalty() = 0;
- virtual bool hasBranchDivergence(const Function *F = nullptr) = 0;
- virtual bool isSourceOfDivergence(const Value *V) = 0;
- virtual bool isAlwaysUniform(const Value *V) = 0;
+ TargetCostKind CostKind) const = 0;
+ virtual BranchProbability getPredictableBranchThreshold() const = 0;
+ virtual InstructionCost getBranchMispredictPenalty() const = 0;
+ virtual bool hasBranchDivergence(const Function *F = nullptr) const = 0;
+ virtual bool isSourceOfDivergence(const Value *V) const = 0;
+ virtual bool isAlwaysUniform(const Value *V) const = 0;
virtual bool isValidAddrSpaceCast(unsigned FromAS, unsigned ToAS) const = 0;
virtual bool addrspacesMayAlias(unsigned AS0, unsigned AS1) const = 0;
- virtual unsigned getFlatAddressSpace() = 0;
+ virtual unsigned getFlatAddressSpace() const = 0;
virtual bool collectFlatAddressOperands(SmallVectorImpl<int> &OpIndexes,
Intrinsic::ID IID) const = 0;
virtual bool isNoopAddrSpaceCast(unsigned FromAS, unsigned ToAS) const = 0;
@@ -1976,140 +1976,150 @@ class TargetTransformInfo::Concept {
virtual Value *rewriteIntrinsicWithAddressSpace(IntrinsicInst *II,
Value *OldV,
Value *NewV) const = 0;
- virtual bool isLoweredToCall(const Function *F) = 0;
- virtual void getUnrollingPreferences(Loop *L, ScalarEvolution &,
- UnrollingPreferences &UP,
- OptimizationRemarkEmitter *ORE) = 0;
+ virtual bool isLoweredToCall(const Function *F) const = 0;
+ virtual void
+ getUnrollingPreferences(Loop *L, ScalarEvolution &, UnrollingPreferences &UP,
+ OptimizationRemarkEmitter *ORE) const = 0;
virtual void getPeelingPreferences(Loop *L, ScalarEvolution &SE,
- PeelingPreferences &PP) = 0;
+ PeelingPreferences &PP) const = 0;
virtual bool isHardwareLoopProfitable(Loop *L, ScalarEvolution &SE,
AssumptionCache &AC,
TargetLibraryInfo *LibInfo,
- HardwareLoopInfo &HWLoopInfo) = 0;
- virtual unsigned getEpilogueVectorizationMinVF() = 0;
- virtual bool preferPredicateOverEpilogue(TailFoldingInfo *TFI) = 0;
+ HardwareLoopInfo &HWLoopInfo) const = 0;
+ virtual unsigned getEpilogueVectorizationMinVF() const = 0;
+ virtual bool preferPredicateOverEpilogue(TailFoldingInfo *TFI) const = 0;
virtual TailFoldingStyle
- getPreferredTailFoldingStyle(bool IVUpdateMayOverflow = true) = 0;
- virtual std::optional<Instruction *> instCombineIntrinsic(
- InstCombiner &IC, IntrinsicInst &II) = 0;
- virtual std::optional<Value *> simplifyDemandedUseBitsIntrinsic(
- InstCombiner &IC, IntrinsicInst &II, APInt DemandedMask,
- KnownBits & Known, bool &KnownBitsComputed) = 0;
+ getPreferredTailFoldingStyle(bool IVUpdateMayOverflow = true) const = 0;
+ virtual std::optional<Instruction *>
+ instCombineIntrinsic(InstCombiner &IC, IntrinsicInst &II) const = 0;
+ virtual std::optional<Value *>
+ simplifyDemandedUseBitsIntrinsic(InstCombiner &IC, IntrinsicInst &II,
+ APInt DemandedMask, KnownBits &Known,
+ bool &KnownBitsComputed) const = 0;
virtual std::optional<Value *> simplifyDemandedVectorEltsIntrinsic(
- InstCombiner &IC, IntrinsicInst &II, APInt DemandedElts,
- APInt &UndefElts, APInt &UndefElts2, APInt &UndefElts3,
+ InstCombiner &IC, IntrinsicInst &II, APInt DemandedElts, APInt &UndefElts,
+ APInt &UndefElts2, APInt &UndefElts3,
std::function<void(Instruction *, unsigned, APInt, APInt &)>
- SimplifyAndSetOp) = 0;
- virtual bool isLegalAddImmediate(int64_t Imm) = 0;
- virtual bool isLegalAddScalableImmediate(int64_t Imm) = 0;
- virtual bool isLegalICmpImmediate(int64_t Imm) = 0;
+ SimplifyAndSetOp) const = 0;
+ virtual bool isLegalAddImmediate(int64_t Imm) const = 0;
+ virtual bool isLegalAddScalableImmediate(int64_t Imm) const = 0;
+ virtual bool isLegalICmpImmediate(int64_t Imm) const = 0;
virtual bool isLegalAddressingMode(Type *Ty, GlobalValue *BaseGV,
int64_t BaseOffset, bool HasBaseReg,
int64_t Scale, unsigned AddrSpace,
Instruction *I,
- int64_t ScalableOffset) = 0;
+ int64_t ScalableOffset) const = 0;
virtual bool isLSRCostLess(const TargetTransformInfo::LSRCost &C1,
- const TargetTransformInfo::LSRCost &C2) = 0;
- virtual bool isNumRegsMajorCostOfLSR() = 0;
+ const TargetTransformInfo::LSRCost &C2) const = 0;
+ virtual bool isNumRegsMajorCostOfLSR() const = 0;
virtual bool shouldDropLSRSolutionIfLessProfitable() const = 0;
- virtual bool isProfitableLSRChainElement(Instruction *I) = 0;
- virtual bool canMacroFuseCmp() = 0;
+ virtual bool isProfitableLSRChainElement(Instruction *I) const = 0;
+ virtual bool canMacroFuseCmp() const = 0;
virtual bool canSaveCmp(Loop *L, BranchInst **BI, ScalarEvolution *SE,
LoopInfo *LI, DominatorTree *DT, AssumptionCache *AC,
- TargetLibraryInfo *LibInfo) = 0;
+ TargetLibraryInfo *LibInfo) const = 0;
virtual AddressingModeKind
getPreferredAddressingMode(const Loop *L, ScalarEvolution *SE) const = 0;
virtual bool isLegalMaskedStore(Type *DataType, Align Alignment,
- unsigned AddressSpace) = 0;
+ unsigned AddressSpace) const = 0;
virtual bool isLegalMaskedLoad(Type *DataType, Align Alignment,
- unsigned AddressSpace) = 0;
- virtual bool isLegalNTStore(Type *DataType, Align Alignment) = 0;
- virtual bool isLegalNTLoad(Type *DataType, Align Alignment) = 0;
+ unsigned AddressSpace) const = 0;
+ virtual bool isLegalNTStore(Type *DataType, Align Alignment) const = 0;
+ virtual bool isLegalNTLoad(Type *DataType, Align Alignment) const = 0;
virtual bool isLegalBroadcastLoad(Type *ElementTy,
ElementCount NumElements) const = 0;
- virtual bool isLegalMaskedScatter(Type *DataType, Align Alignment) = 0;
- virtual bool isLegalMaskedGather(Type *DataType, Align Alignment) = 0;
+ virtual bool isLegalMaskedScatter(Type *DataType, Align Alignment) const = 0;
+ virtual bool isLegalMaskedGather(Type *DataType, Align Alignment) const = 0;
virtual bool forceScalarizeMaskedGather(VectorType *DataType,
- Align Alignment) = 0;
+ Align Alignment) const = 0;
virtual bool forceScalarizeMaskedScatter(VectorType *DataType,
- Align Alignment) = 0;
- virtual bool isLegalMaskedCompressStore(Type *DataType, Align Alignment) = 0;
- virtual bool isLegalMaskedExpandLoad(Type *DataType, Align Alignment) = 0;
- virtual bool isLegalStridedLoadStore(Type *DataType, Align Alignment) = 0;
+ Align Alignment) const = 0;
+ virtual bool isLegalMaskedCompressStore(Type *DataType,
+ Align Alignment) const = 0;
+ virtual bool isLegalMaskedExpandLoad(Type *DataType,
+ Align Alignment) const = 0;
+ virtual bool isLegalStridedLoadStore(Type *DataType,
+ Align Alignment) const = 0;
virtual bool isLegalInterleavedAccessType(VectorType *VTy, unsigned Factor,
Align Alignment,
- unsigned AddrSpace) = 0;
+ unsigned AddrSpace) const = 0;
- virtual bool isLegalMaskedVectorHistogram(Type *AddrType, Type *DataType) = 0;
+ virtual bool isLegalMaskedVectorHistogram(Type *AddrType,
+ Type *DataType) const = 0;
virtual bool isLegalAltInstr(VectorType *VecTy, unsigned Opcode0,
unsigned Opcode1,
const SmallBitVector &OpcodeMask) const = 0;
- virtual bool enableOrderedReductions() = 0;
- virtual bool hasDivRemOp(Type *DataType, bool IsSigned) = 0;
- virtual bool hasVolatileVariant(Instruction *I, unsigned AddrSpace) = 0;
- virtual bool prefersVectorizedAddressing() = 0;
+ virtual bool enableOrderedReductions() const = 0;
+ virtual bool hasDivRemOp(Type *DataType, bool IsSigned) const = 0;
+ virtual bool hasVolatileVariant(Instruction *I, unsigned AddrSpace) const = 0;
+ virtual bool prefersVectorizedAddressing() const = 0;
virtual InstructionCost getScalingFactorCost(Type *Ty, GlobalValue *BaseGV,
StackOffset BaseOffset,
bool HasBaseReg, int64_t Scale,
- unsigned AddrSpace) = 0;
- virtual bool LSRWithInstrQueries() = 0;
- virtual bool isTruncateFree(Type *Ty1, Type *Ty2) = 0;
- virtual bool isProfitableToHoist(Instruction *I) = 0;
- virtual bool useAA() = 0;
+ unsigned AddrSpace) const = 0;
+ virtual bool LSRWithInstrQueries() const = 0;
+ virtual bool isTruncateFree(Type *Ty1, Type *Ty2) const = 0;
+ virtual bool isProfitableToHoist(Instruction *I) const = 0;
+ virtual bool useAA() const = 0;
virtual bool isTypeLegal(Type *Ty) const = 0;
virtual unsigned getRegUsageForType(Type *Ty) const = 0;
- virtual bool shouldBuildLookupTables() = 0;
- virtual bool shouldBuildLookupTablesForConstant(Constant *C) = 0;
- virtual bool shouldBuildRelLookupTables() = 0;
- virtual bool useColdCCForColdCall(Function &F) = 0;
- virtual bool isTargetIntrinsicTriviallyScalarizable(Intrinsic::ID ID) = 0;
- virtual bool isTargetIntrinsicWithScalarOpAtArg(Intrinsic::ID ID,
- unsigned ScalarOpdIdx) = 0;
+ virtual bool shouldBuildLookupTables() const = 0;
+ virtual bool shouldBuildLookupTablesForConstant(Constant *C) const = 0;
+ virtual bool shouldBuildRelLookupTables() const = 0;
+ virtual bool useColdCCForColdCall(Function &F) const = 0;
+ virtual bool
+ isTargetIntrinsicTriviallyScalarizable(Intrinsic::ID ID) const = 0;
+ virtual bool
+ isTargetIntrinsicWithScalarOpAtArg(Intrinsic::ID ID,
+ unsigned ScalarOpdIdx) const = 0;
virtual bool isTargetIntrinsicWithOverloadTypeAtArg(Intrinsic::ID ID,
- int OpdIdx) = 0;
+ int OpdIdx) const = 0;
virtual bool
isTargetIntrinsicWithStructReturnOverloadAtField(Intrinsic::ID ID,
- int RetIdx) = 0;
+ int RetIdx) const = 0;
virtual InstructionCost
getScalarizationOverhead(VectorType *Ty, const APInt &DemandedElts,
bool Insert, bool Extract, TargetCostKind CostKind,
- ArrayRef<Value *> VL = {}) = 0;
+ ArrayRef<Value *> VL = {}) const = 0;
virtual InstructionCost
getOperandsScalarizationOverhead(ArrayRef<const Value *> Args,
ArrayRef<Type *> Tys,
- TargetCostKind CostKind) = 0;
- virtual bool supportsEfficientVectorElementLoadStore() = 0;
- virtual bool supportsTailCalls() = 0;
- virtual bool supportsTailCallFor(const CallBase *CB) = 0;
- virtual bool enableAggressiveInterleaving(bool LoopHasReductions) = 0;
+ TargetCostKind CostKind) const = 0;
+ virtual bool supportsEfficientVectorElementLoadStore() const = 0;
+ virtual bool supportsTailCalls() const = 0;
+ virtual bool supportsTailCallFor(const CallBase *CB) const = 0;
+ virtual bool enableAggressiveInterleaving(bool LoopHasReductions) const = 0;
virtual MemCmpExpansionOptions
enableMemCmpExpansion(bool OptSize, bool IsZeroCmp) const = 0;
- virtual bool enableSelectOptimize() = 0;
- virtual bool shouldTreatInstructionLikeSelect(const Instruction *I) = 0;
- virtual bool enableInterleavedAccessVectorization() = 0;
- virtual bool enableMaskedInterleavedAccessVectorization() = 0;
- virtual bool isFPVectorizationPotentiallyUnsafe() = 0;
+ virtual bool enableSelectOptimize() const = 0;
+ virtual bool shouldTreatInstructionLikeSelect(const Instruction *I) const = 0;
+ virtual bool enableInterleavedAccessVectorization() const = 0;
+ virtual bool enableMaskedInterleavedAccessVectorization() const = 0;
+ virtual bool isFPVectorizationPotentiallyUnsafe() const = 0;
virtual bool allowsMisalignedMemoryAccesses(LLVMContext &Context,
unsigned BitWidth,
unsigned AddressSpace,
Align Alignment,
- unsigned *Fast) = 0;
- virtual PopcntSupportKind getPopcntSupport(unsigned IntTyWidthInBit) = 0;
- virtual bool haveFastSqrt(Type *Ty) = 0;
- virtual bool isExpensiveToSpeculativelyExecute(const Instruction *I) = 0;
- virtual bool isFCmpOrdCheaperThanFCmpZero(Type *Ty) = 0;
- virtual InstructionCost getFPOpCost(Type *Ty) = 0;
+ unsigned *Fast) const = 0;
+ virtual PopcntSupportKind
+ getPopcntSupport(unsigned IntTyWidthInBit) const = 0;
+ virtual bool haveFastSqrt(Type *Ty) const = 0;
+ virtual bool
+ isExpensiveToSpeculativelyExecute(const Instruction *I) const = 0;
+ virtual bool isFCmpOrdCheaperThanFCmpZero(Type *Ty) const = 0;
+ virtual InstructionCost getFPOpCost(Type *Ty) const = 0;
virtual InstructionCost getIntImmCodeSizeCost(unsigned Opc, unsigned Idx,
- const APInt &Imm, Type *Ty) = 0;
+ const APInt &Imm,
+ Type *Ty) const = 0;
virtual InstructionCost getIntImmCost(const APInt &Imm, Type *Ty,
- TargetCostKind CostKind) = 0;
- virtual InstructionCost getIntImmCostInst(unsigned Opc, unsigned Idx,
- const APInt &Imm, Type *Ty,
- TargetCostKind CostKind,
- Instruction *Inst = nullptr) = 0;
- virtual InstructionCost getIntImmCostIntrin(Intrinsic::ID IID, unsigned Idx,
- const APInt &Imm, Type *Ty,
- TargetCostKind CostKind) = 0;
+ TargetCostKind CostKind) const = 0;
+ virtual InstructionCost
+ getIntImmCostInst(unsigned Opc, unsigned Idx, const APInt &Imm, Type *Ty,
+ TargetCostKind CostKind,
+ Instruction *Inst = nullptr) const = 0;
+ virtual InstructionCost
+ getIntImmCostIntrin(Intrinsic::ID IID, unsigned Idx, const APInt &Imm,
+ Type *Ty, TargetCostKind CostKind) const = 0;
virtual bool preferToKeepConstantsAttached(const Instruction &Inst,
const Function &Fn) const = 0;
virtual unsigned getNumberOfRegisters(unsigned ClassID) const = 0;
@@ -2130,7 +2140,7 @@ class TargetTransformInfo::Concept {
virtual unsigned getStoreMinimumVF(unsigned VF, Type *ScalarMemTy,
Type *ScalarValTy) const = 0;
virtual bool shouldConsiderAddressTypePromotion(
- const Instruction &I, bool &AllowPromotionWithoutCommonHeader) = 0;
+ const Instruction &I, bool &AllowPromotionWithoutCommonHeader) const = 0;
virtual unsigned getCacheLineSize() const = 0;
virtual std::optional<unsigned> getCacheSize(CacheLevel Level) const = 0;
virtual std::optional<unsigned> getCacheAssociativity(CacheLevel Level)
@@ -2178,39 +2188,43 @@ class TargetTransformInfo::Concept {
PartialReductionExtendKind OpBExtend,
std::optional<unsigned> BinOp) const = 0;
- virtual unsigned getMaxInterleaveFactor(ElementCount VF) = 0;
- virtual InstructionCost getArithmeticInstrCost(
- unsigned Opcode, Type *Ty, TTI::TargetCostKind CostKind,
- OperandValueInfo Opd1Info, OperandValueInfo Opd2Info,
- ArrayRef<const Value *> Args, const Instruction *CxtI = nullptr) = 0;
+ virtual unsigned getMaxInterleaveFactor(ElementCount VF) const = 0;
+ virtual InstructionCost
+ getArithmeticInstrCost(unsigned Opcode, Type *Ty,
+ TTI::TargetCostKind CostKind,
+ OperandValueInfo Opd1Info, OperandValueInfo Opd2Info,
+ ArrayRef<const Value *> Args,
+ const Instruction *CxtI = nullptr) const = 0;
virtual InstructionCost getAltInstrCost(
VectorType *VecTy, unsigned Opcode0, unsigned Opcode1,
const SmallBitVector &OpcodeMask,
TTI::TargetCostKind CostKind = TTI::TCK_RecipThroughput) const = 0;
- virtual InstructionCost
- getShuffleCost(ShuffleKind Kind, VectorType *Tp, ...
[truncated]
|
IanWood1
pushed a commit
to IanWood1/llvm-project
that referenced
this pull request
May 6, 2025
…lvm#136668) This will simplify future changes.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This will simplify future changes.