diff options
Diffstat (limited to 'llvm/lib/Analysis/TargetTransformInfo.cpp')
| -rw-r--r-- | llvm/lib/Analysis/TargetTransformInfo.cpp | 93 |
1 files changed, 71 insertions, 22 deletions
diff --git a/llvm/lib/Analysis/TargetTransformInfo.cpp b/llvm/lib/Analysis/TargetTransformInfo.cpp index ad7e5432d4c5..c751d174a48a 100644 --- a/llvm/lib/Analysis/TargetTransformInfo.cpp +++ b/llvm/lib/Analysis/TargetTransformInfo.cpp @@ -37,6 +37,11 @@ static cl::opt<unsigned> CacheLineSize( cl::desc("Use this to override the target cache line size when " "specified by the user.")); +static cl::opt<unsigned> PredictableBranchThreshold( + "predictable-branch-threshold", cl::init(99), cl::Hidden, + cl::desc( + "Use this to override the target's predictable branch threshold (%).")); + namespace { /// No-op implementation of the TTI interface using the utility base /// classes. @@ -103,6 +108,14 @@ IntrinsicCostAttributes::IntrinsicCostAttributes(Intrinsic::ID Id, Type *RTy, Arguments.insert(Arguments.begin(), Args.begin(), Args.end()); } +HardwareLoopInfo::HardwareLoopInfo(Loop *L) : L(L) { + // Match default options: + // - hardware-loop-counter-bitwidth = 32 + // - hardware-loop-decrement = 1 + CountType = Type::getInt32Ty(L->getHeader()->getContext()); + LoopDecrement = ConstantInt::get(CountType, 1); +} + bool HardwareLoopInfo::isHardwareLoopCandidate(ScalarEvolution &SE, LoopInfo &LI, DominatorTree &DT, bool ForceNestedLoop, @@ -204,15 +217,28 @@ TargetTransformInfo::adjustInliningThreshold(const CallBase *CB) const { return TTIImpl->adjustInliningThreshold(CB); } +unsigned TargetTransformInfo::getCallerAllocaCost(const CallBase *CB, + const AllocaInst *AI) const { + return TTIImpl->getCallerAllocaCost(CB, AI); +} + int TargetTransformInfo::getInlinerVectorBonusPercent() const { return TTIImpl->getInlinerVectorBonusPercent(); } -InstructionCost -TargetTransformInfo::getGEPCost(Type *PointeeType, const Value *Ptr, - ArrayRef<const Value *> Operands, - TTI::TargetCostKind CostKind) const { - return TTIImpl->getGEPCost(PointeeType, Ptr, Operands, CostKind); +InstructionCost TargetTransformInfo::getGEPCost( + Type *PointeeType, const Value *Ptr, ArrayRef<const Value *> Operands, + Type *AccessType, TTI::TargetCostKind CostKind) const { + return TTIImpl->getGEPCost(PointeeType, Ptr, Operands, AccessType, CostKind); +} + +InstructionCost TargetTransformInfo::getPointersChainCost( + ArrayRef<const Value *> Ptrs, const Value *Base, + const TTI::PointersChainInfo &Info, Type *AccessTy, + TTI::TargetCostKind CostKind) const { + assert((Base || !Info.isSameBase()) && + "If pointers have same base address it has to be provided."); + return TTIImpl->getPointersChainCost(Ptrs, Base, Info, AccessTy, CostKind); } unsigned TargetTransformInfo::getEstimatedNumberOfCaseClusters( @@ -232,15 +258,13 @@ TargetTransformInfo::getInstructionCost(const User *U, } BranchProbability TargetTransformInfo::getPredictableBranchThreshold() const { - return TTIImpl->getPredictableBranchThreshold(); + return PredictableBranchThreshold.getNumOccurrences() > 0 + ? BranchProbability(PredictableBranchThreshold, 100) + : TTIImpl->getPredictableBranchThreshold(); } -bool TargetTransformInfo::hasBranchDivergence() const { - return TTIImpl->hasBranchDivergence(); -} - -bool TargetTransformInfo::useGPUDivergenceAnalysis() const { - return TTIImpl->useGPUDivergenceAnalysis(); +bool TargetTransformInfo::hasBranchDivergence(const Function *F) const { + return TTIImpl->hasBranchDivergence(F); } bool TargetTransformInfo::isSourceOfDivergence(const Value *V) const { @@ -251,6 +275,16 @@ bool llvm::TargetTransformInfo::isAlwaysUniform(const Value *V) const { return TTIImpl->isAlwaysUniform(V); } +bool llvm::TargetTransformInfo::isValidAddrSpaceCast(unsigned FromAS, + unsigned ToAS) const { + return TTIImpl->isValidAddrSpaceCast(FromAS, ToAS); +} + +bool llvm::TargetTransformInfo::addrspacesMayAlias(unsigned FromAS, + unsigned ToAS) const { + return TTIImpl->addrspacesMayAlias(FromAS, ToAS); +} + unsigned TargetTransformInfo::getFlatAddressSpace() const { return TTIImpl->getFlatAddressSpace(); } @@ -299,14 +333,13 @@ bool TargetTransformInfo::isHardwareLoopProfitable( } bool TargetTransformInfo::preferPredicateOverEpilogue( - Loop *L, LoopInfo *LI, ScalarEvolution &SE, AssumptionCache &AC, - TargetLibraryInfo *TLI, DominatorTree *DT, LoopVectorizationLegality *LVL, - InterleavedAccessInfo *IAI) const { - return TTIImpl->preferPredicateOverEpilogue(L, LI, SE, AC, TLI, DT, LVL, IAI); + TailFoldingInfo *TFI) const { + return TTIImpl->preferPredicateOverEpilogue(TFI); } -PredicationStyle TargetTransformInfo::emitGetActiveLaneMask() const { - return TTIImpl->emitGetActiveLaneMask(); +TailFoldingStyle TargetTransformInfo::getPreferredTailFoldingStyle( + bool IVUpdateMayOverflow) const { + return TTIImpl->getPreferredTailFoldingStyle(IVUpdateMayOverflow); } std::optional<Instruction *> @@ -664,6 +697,10 @@ std::optional<unsigned> TargetTransformInfo::getVScaleForTuning() const { return TTIImpl->getVScaleForTuning(); } +bool TargetTransformInfo::isVScaleKnownToBeAPowerOfTwo() const { + return TTIImpl->isVScaleKnownToBeAPowerOfTwo(); +} + bool TargetTransformInfo::shouldMaximizeVectorBandwidth( TargetTransformInfo::RegisterKind K) const { return TTIImpl->shouldMaximizeVectorBandwidth(K); @@ -728,7 +765,7 @@ bool TargetTransformInfo::shouldPrefetchAddressSpace(unsigned AS) const { return TTIImpl->shouldPrefetchAddressSpace(AS); } -unsigned TargetTransformInfo::getMaxInterleaveFactor(unsigned VF) const { +unsigned TargetTransformInfo::getMaxInterleaveFactor(ElementCount VF) const { return TTIImpl->getMaxInterleaveFactor(VF); } @@ -1007,6 +1044,10 @@ InstructionCost TargetTransformInfo::getMemcpyCost(const Instruction *I) const { return Cost; } +uint64_t TargetTransformInfo::getMaxMemIntrinsicInlineSizeThreshold() const { + return TTIImpl->getMaxMemIntrinsicInlineSizeThreshold(); +} + InstructionCost TargetTransformInfo::getArithmeticReductionCost( unsigned Opcode, VectorType *Ty, std::optional<FastMathFlags> FMF, TTI::TargetCostKind CostKind) const { @@ -1017,17 +1058,17 @@ InstructionCost TargetTransformInfo::getArithmeticReductionCost( } InstructionCost TargetTransformInfo::getMinMaxReductionCost( - VectorType *Ty, VectorType *CondTy, bool IsUnsigned, + Intrinsic::ID IID, VectorType *Ty, FastMathFlags FMF, TTI::TargetCostKind CostKind) const { InstructionCost Cost = - TTIImpl->getMinMaxReductionCost(Ty, CondTy, IsUnsigned, CostKind); + TTIImpl->getMinMaxReductionCost(IID, Ty, FMF, CostKind); assert(Cost >= 0 && "TTI should not produce negative costs!"); return Cost; } InstructionCost TargetTransformInfo::getExtendedReductionCost( unsigned Opcode, bool IsUnsigned, Type *ResTy, VectorType *Ty, - std::optional<FastMathFlags> FMF, TTI::TargetCostKind CostKind) const { + FastMathFlags FMF, TTI::TargetCostKind CostKind) const { return TTIImpl->getExtendedReductionCost(Opcode, IsUnsigned, ResTy, Ty, FMF, CostKind); } @@ -1163,6 +1204,14 @@ TargetTransformInfo::getVPLegalizationStrategy(const VPIntrinsic &VPI) const { return TTIImpl->getVPLegalizationStrategy(VPI); } +bool TargetTransformInfo::hasArmWideBranch(bool Thumb) const { + return TTIImpl->hasArmWideBranch(Thumb); +} + +unsigned TargetTransformInfo::getMaxNumArgs() const { + return TTIImpl->getMaxNumArgs(); +} + bool TargetTransformInfo::shouldExpandReduction(const IntrinsicInst *II) const { return TTIImpl->shouldExpandReduction(II); } |
