LLVM 20.0.0git |
This pass provides access to the codegen interfaces that are needed for IR-level transformations.More...
#include "llvm/Analysis/TargetTransformInfo.h"
Classes | |
class | Concept |
struct | LSRCost |
struct | MemCmpExpansionOptions |
Returns options for expansion of memcmp. IsZeroCmp is.More... | |
struct | OperandValueInfo |
struct | PeelingPreferences |
struct | PointersChainInfo |
Describe known properties for a set of pointers.More... | |
struct | ReductionFlags |
Flags describing the kind of vector reduction.More... | |
struct | UnrollingPreferences |
Parameters that control the generic loop unrolling transformation.More... | |
struct | VPLegalization |
Public Types | |
enum | PartialReductionExtendKind {PR_None,PR_SignExtend,PR_ZeroExtend } |
Public Member Functions | |
template<typenameT > | |
TargetTransformInfo (T Impl) | |
Construct a TTI object using a type implementing theConcept API below. | |
TargetTransformInfo (constDataLayout &DL) | |
Construct a baseline TTI object using a minimal implementation of theConcept API below. | |
TargetTransformInfo (TargetTransformInfo &&Arg) | |
TargetTransformInfo & | operator= (TargetTransformInfo &&RHS) |
~TargetTransformInfo () | |
bool | invalidate (Function &,constPreservedAnalyses &,FunctionAnalysisManager::Invalidator &) |
Handle the invalidation of this information. | |
bool | hasArmWideBranch (bool Thumb)const |
uint64_t | getFeatureMask (constFunction &F)const |
Returns a bitmask constructed from the target-features or fmv-features metadata of a function. | |
bool | isMultiversionedFunction (constFunction &F)const |
Returns true if this is an instance of a function with multiple versions. | |
unsigned | getMaxNumArgs ()const |
unsigned | getNumBytesToPadGlobalArray (unsignedSize,Type *ArrayType)const |
Vector Predication Information | |
Whether the target supports the evl parameter of VP intrinsic efficiently in hardware, for the given opcode and type/alignment. (see LLVM Language Reference - "Vector Predication Intrinsics").Use of evl is discouraged when that is not the case. | |
bool | hasActiveVectorLength (unsigned Opcode,Type *DataType,Align Alignment)const |
bool | isProfitableToSinkOperands (Instruction *I,SmallVectorImpl<Use * > &Ops)const |
Return true if sinking I's operands to the same basic block as I is profitable, e.g. | |
bool | isVectorShiftByScalarCheap (Type *Ty)const |
Return true if it's significantly cheaper to shift a vector by a uniform scalar than by an amount which will vary across each lane. | |
VPLegalization | getVPLegalizationStrategy (constVPIntrinsic &PI)const |
Static Public Member Functions | |
staticPartialReductionExtendKind | getPartialReductionExtendKind (Instruction *I) |
Get the kind of extension that an instruction represents. | |
Generic Target Information | |
enum | TargetCostKind {TCK_RecipThroughput,TCK_Latency,TCK_CodeSize,TCK_SizeAndLatency } |
The kind of cost model.More... | |
enum | TargetCostConstants {TCC_Free = 0,TCC_Basic = 1,TCC_Expensive = 4 } |
Underlying constants for 'cost' values in this interface.More... | |
InstructionCost | getGEPCost (Type *PointeeType,constValue *Ptr,ArrayRef<constValue * >Operands,Type *AccessType=nullptr,TargetCostKindCostKind=TCK_SizeAndLatency)const |
Estimate the cost of a GEP operation when lowered. | |
InstructionCost | getPointersChainCost (ArrayRef<constValue * > Ptrs,constValue *Base,constPointersChainInfo &Info,Type *AccessTy,TargetCostKindCostKind=TTI::TCK_RecipThroughput)const |
Estimate the cost of a chain of pointers (typically pointer operands of a chain of loads or stores within same block) operations set when lowered. | |
unsigned | getInliningThresholdMultiplier ()const |
unsigned | getInliningCostBenefitAnalysisSavingsMultiplier ()const |
unsigned | getInliningCostBenefitAnalysisProfitableMultiplier ()const |
int | getInliningLastCallToStaticBonus ()const |
unsigned | adjustInliningThreshold (constCallBase *CB)const |
unsigned | getCallerAllocaCost (constCallBase *CB,constAllocaInst *AI)const |
int | getInlinerVectorBonusPercent ()const |
InstructionCost | getMemcpyCost (constInstruction *I)const |
uint64_t | getMaxMemIntrinsicInlineSizeThreshold ()const |
Returns the maximum memset / memcpy size in bytes that still makes it profitable to inline the call. | |
unsigned | getEstimatedNumberOfCaseClusters (constSwitchInst &SI,unsigned &JTSize,ProfileSummaryInfo *PSI,BlockFrequencyInfo *BFI)const |
InstructionCost | getInstructionCost (constUser *U,ArrayRef<constValue * >Operands,TargetCostKindCostKind)const |
Estimate the cost of a given IR user when lowered. | |
InstructionCost | getInstructionCost (constUser *U,TargetCostKindCostKind)const |
This is a helper function which calls the three-argument getInstructionCost withOperands which are the current operands U has. | |
BranchProbability | getPredictableBranchThreshold ()const |
If a branch or a select condition is skewed in one direction by more than this factor, it is very likely to be predicted correctly. | |
InstructionCost | getBranchMispredictPenalty ()const |
Returns estimated penalty of a branch misprediction in latency. | |
bool | hasBranchDivergence (constFunction *F=nullptr)const |
Return true if branch divergence exists. | |
bool | isSourceOfDivergence (constValue *V)const |
Returns whether V is a source of divergence. | |
bool | isAlwaysUniform (constValue *V)const |
bool | isValidAddrSpaceCast (unsigned FromAS,unsigned ToAS)const |
Query the target whether the specified address space cast from FromAS to ToAS is valid. | |
bool | addrspacesMayAlias (unsigned AS0,unsigned AS1)const |
Return false if aAS0 address cannot possibly alias aAS1 address. | |
unsigned | getFlatAddressSpace ()const |
Returns the address space ID for a target's 'flat' address space. | |
bool | collectFlatAddressOperands (SmallVectorImpl< int > &OpIndexes,Intrinsic::ID IID)const |
Return any intrinsic address operand indexes which may be rewritten if they use a flat address space pointer. | |
bool | isNoopAddrSpaceCast (unsigned FromAS,unsigned ToAS)const |
bool | canHaveNonUndefGlobalInitializerInAddressSpace (unsigned AS)const |
Return true if globals in this address space can have initializers other thanundef . | |
unsigned | getAssumedAddrSpace (constValue *V)const |
bool | isSingleThreaded ()const |
std::pair<constValue *,unsigned > | getPredicatedAddrSpace (constValue *V)const |
Value * | rewriteIntrinsicWithAddressSpace (IntrinsicInst *II,Value *OldV,Value *NewV)const |
Rewrite intrinsic callII such thatOldV will be replaced withNewV , which has a different address space. | |
bool | isLoweredToCall (constFunction *F)const |
Test whether calls to a function lower to actual program function calls. | |
void | getUnrollingPreferences (Loop *L,ScalarEvolution &,UnrollingPreferences &UP,OptimizationRemarkEmitter *ORE)const |
Get target-customized preferences for the generic loop unrolling transformation. | |
bool | isHardwareLoopProfitable (Loop *L,ScalarEvolution &SE,AssumptionCache &AC,TargetLibraryInfo *LibInfo,HardwareLoopInfo &HWLoopInfo)const |
Query the target whether it would be profitable to convert the given loop into a hardware loop. | |
unsigned | getEpilogueVectorizationMinVF ()const |
bool | preferPredicateOverEpilogue (TailFoldingInfo *TFI)const |
Query the target whether it would be prefered to create a predicated vector loop, which can avoid the need to emit a scalar epilogue loop. | |
TailFoldingStyle | getPreferredTailFoldingStyle (bool IVUpdateMayOverflow=true)const |
Query the target what the preferred style of tail folding is. | |
void | getPeelingPreferences (Loop *L,ScalarEvolution &SE,PeelingPreferences &PP)const |
Get target-customized preferences for the generic loop peeling transformation. | |
std::optional<Instruction * > | instCombineIntrinsic (InstCombiner &IC,IntrinsicInst &II)const |
Targets can implement their own combinations for target-specific intrinsics. | |
std::optional<Value * > | simplifyDemandedUseBitsIntrinsic (InstCombiner &IC,IntrinsicInst &II,APInt DemandedMask,KnownBits &Known,bool &KnownBitsComputed)const |
Can be used to implement target-specific instruction combining. | |
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 |
Can be used to implement target-specific instruction combining. | |
Scalar Target Information | |
enum | PopcntSupportKind {PSK_Software,PSK_SlowHardware,PSK_FastHardware } |
Flags indicating the kind of support for population count.More... | |
enum | AddressingModeKind {AMK_PreIndexed,AMK_PostIndexed,AMK_None } |
bool | isLegalAddImmediate (int64_t Imm)const |
Return true if the specified immediate is legal add immediate, that is the target has add instructions which can add a register with the immediate without having to materialize the immediate into a register. | |
bool | isLegalAddScalableImmediate (int64_t Imm)const |
Return true if adding the specified scalable immediate is legal, that is the target has add instructions which can add a register with the immediate (multiplied by vscale) without having to materialize the immediate into a register. | |
bool | isLegalICmpImmediate (int64_t Imm)const |
Return true if the specified immediate is legal icmp immediate, that is the target has icmp instructions which can compare a register against the immediate without having to materialize the immediate into a register. | |
bool | isLegalAddressingMode (Type *Ty,GlobalValue *BaseGV, int64_t BaseOffset,bool HasBaseReg, int64_t Scale,unsigned AddrSpace=0,Instruction *I=nullptr, int64_t ScalableOffset=0)const |
Return true if the addressing mode represented by AM is legal for this target, for a load/store of the specified type. | |
bool | isLSRCostLess (constTargetTransformInfo::LSRCost &C1,constTargetTransformInfo::LSRCost &C2)const |
Return true if LSR cost of C1 is lower than C2. | |
bool | isNumRegsMajorCostOfLSR ()const |
Return true if LSR major cost is number of registers. | |
bool | shouldDropLSRSolutionIfLessProfitable ()const |
Return true if LSR should drop a found solution if it's calculated to be less profitable than the baseline. | |
bool | isProfitableLSRChainElement (Instruction *I)const |
bool | canMacroFuseCmp ()const |
Return true if the target can fuse a compare and branch. | |
bool | canSaveCmp (Loop *L,BranchInst **BI,ScalarEvolution *SE,LoopInfo *LI,DominatorTree *DT,AssumptionCache *AC,TargetLibraryInfo *LibInfo)const |
Return true if the target can save a compare for loop count, for example hardware loop saves a compare. | |
AddressingModeKind | getPreferredAddressingMode (constLoop *L,ScalarEvolution *SE)const |
Return the preferred addressing mode LSR should make efforts to generate. | |
bool | isLegalMaskedStore (Type *DataType,Align Alignment)const |
Return true if the target supports masked store. | |
bool | isLegalMaskedLoad (Type *DataType,Align Alignment)const |
Return true if the target supports masked load. | |
bool | isLegalNTStore (Type *DataType,Align Alignment)const |
Return true if the target supports nontemporal store. | |
bool | isLegalNTLoad (Type *DataType,Align Alignment)const |
Return true if the target supports nontemporal load. | |
bool | isLegalBroadcastLoad (Type *ElementTy,ElementCount NumElements)const |
\Returns true if the target supports broadcasting a load to a vector of type <NumElements x ElementTy>. | |
bool | isLegalMaskedScatter (Type *DataType,Align Alignment)const |
Return true if the target supports masked scatter. | |
bool | isLegalMaskedGather (Type *DataType,Align Alignment)const |
Return true if the target supports masked gather. | |
bool | forceScalarizeMaskedGather (VectorType *Type,Align Alignment)const |
Return true if the target forces scalarizing of llvm.masked.gather intrinsics. | |
bool | forceScalarizeMaskedScatter (VectorType *Type,Align Alignment)const |
Return true if the target forces scalarizing of llvm.masked.scatter intrinsics. | |
bool | isLegalMaskedCompressStore (Type *DataType,Align Alignment)const |
Return true if the target supports masked compress store. | |
bool | isLegalMaskedExpandLoad (Type *DataType,Align Alignment)const |
Return true if the target supports masked expand load. | |
bool | isLegalStridedLoadStore (Type *DataType,Align Alignment)const |
Return true if the target supports strided load. | |
bool | isLegalInterleavedAccessType (VectorType *VTy,unsigned Factor,Align Alignment,unsigned AddrSpace)const |
Return true is the target supports interleaved access for the given vector typeVTy , interleave factorFactor , alignmentAlignment and address spaceAddrSpace . | |
bool | isLegalMaskedVectorHistogram (Type *AddrType,Type *DataType)const |
bool | isLegalAltInstr (VectorType *VecTy,unsigned Opcode0,unsigned Opcode1,constSmallBitVector &OpcodeMask)const |
Return true if this is an alternating opcode pattern that can be lowered to a single instruction on the target. | |
bool | enableOrderedReductions ()const |
Return true if we should be enabling ordered reductions for the target. | |
bool | hasDivRemOp (Type *DataType,bool IsSigned)const |
Return true if the target has a unified operation to calculate division and remainder. | |
bool | hasVolatileVariant (Instruction *I,unsigned AddrSpace)const |
Return true if the given instruction (assumed to be a memory access instruction) has a volatile variant. | |
bool | prefersVectorizedAddressing ()const |
Return true if target doesn't mind addresses in vectors. | |
InstructionCost | getScalingFactorCost (Type *Ty,GlobalValue *BaseGV,StackOffset BaseOffset,bool HasBaseReg, int64_t Scale,unsigned AddrSpace=0)const |
Return the cost of the scaling factor used in the addressing mode represented by AM for this target, for a load/store of the specified type. | |
bool | LSRWithInstrQueries ()const |
Return true if the loop strength reduce pass should make Instruction* based TTI queries toisLegalAddressingMode(). | |
bool | isTruncateFree (Type *Ty1,Type *Ty2)const |
Return true if it's free to truncate a value of type Ty1 to type Ty2. | |
bool | isProfitableToHoist (Instruction *I)const |
Return true if it is profitable to hoist instruction in the then/else to before if. | |
bool | useAA ()const |
bool | isTypeLegal (Type *Ty)const |
Return true if this type is legal. | |
unsigned | getRegUsageForType (Type *Ty)const |
Returns the estimated number of registers required to representTy . | |
bool | shouldBuildLookupTables ()const |
Return true if switches should be turned into lookup tables for the target. | |
bool | shouldBuildLookupTablesForConstant (Constant *C)const |
Return true if switches should be turned into lookup tables containing this constant value for the target. | |
bool | shouldBuildRelLookupTables ()const |
Return true if lookup tables should be turned into relative lookup tables. | |
bool | useColdCCForColdCall (Function &F)const |
Return true if the input function which is cold at all call sites, should use coldcc calling convention. | |
bool | isTargetIntrinsicTriviallyScalarizable (Intrinsic::IDID)const |
bool | isTargetIntrinsicWithScalarOpAtArg (Intrinsic::IDID,unsigned ScalarOpdIdx)const |
Identifies if the vector form of the intrinsic has a scalar operand. | |
bool | isTargetIntrinsicWithOverloadTypeAtArg (Intrinsic::IDID, int OpdIdx)const |
Identifies if the vector form of the intrinsic is overloaded on the type of the operand at indexOpdIdx , or on the return type ifOpdIdx is -1. | |
bool | isTargetIntrinsicWithStructReturnOverloadAtField (Intrinsic::IDID, int RetIdx)const |
Identifies if the vector form of the intrinsic that returns a struct is overloaded at the struct element indexRetIdx . | |
InstructionCost | getScalarizationOverhead (VectorType *Ty,constAPInt &DemandedElts,bool Insert,bool Extract,TTI::TargetCostKindCostKind,ArrayRef<Value * > VL={})const |
Estimate the overhead of scalarizing an instruction. | |
InstructionCost | getOperandsScalarizationOverhead (ArrayRef<constValue * > Args,ArrayRef<Type * > Tys,TTI::TargetCostKindCostKind)const |
Estimate the overhead of scalarizing an instructions unique non-constant operands. | |
bool | supportsEfficientVectorElementLoadStore ()const |
If target has efficient vector element load/store instructions, it can return true here so that insertion/extraction costs are not added to the scalarization cost of a load/store. | |
bool | supportsTailCalls ()const |
If the target supports tail calls. | |
bool | supportsTailCallFor (constCallBase *CB)const |
If target supports tail call onCB . | |
bool | enableAggressiveInterleaving (bool LoopHasReductions)const |
Don't restrict interleaved unrolling to small loops. | |
MemCmpExpansionOptions | enableMemCmpExpansion (bool OptSize,bool IsZeroCmp)const |
bool | enableSelectOptimize ()const |
Should the Select Optimization pass be enabled and ran. | |
bool | shouldTreatInstructionLikeSelect (constInstruction *I)const |
Should the Select Optimization pass treat the given instruction like a select, potentially converting it to a conditional branch. | |
bool | enableInterleavedAccessVectorization ()const |
Enable matching of interleaved access groups. | |
bool | enableMaskedInterleavedAccessVectorization ()const |
Enable matching of interleaved access groups that contain predicated accesses or gaps and therefore vectorized using masked vector loads/stores. | |
bool | isFPVectorizationPotentiallyUnsafe ()const |
Indicate that it is potentially unsafe to automatically vectorize floating-point operations because the semantics of vector and scalar floating-point semantics may differ. | |
bool | allowsMisalignedMemoryAccesses (LLVMContext &Context,unsignedBitWidth,unsignedAddressSpace=0,Align Alignment=Align(1),unsigned *Fast=nullptr)const |
Determine if the target supports unaligned memory accesses. | |
PopcntSupportKind | getPopcntSupport (unsigned IntTyWidthInBit)const |
Return hardware support for population count. | |
bool | haveFastSqrt (Type *Ty)const |
Return true if the hardware has a fast square-root instruction. | |
bool | isExpensiveToSpeculativelyExecute (constInstruction *I)const |
Return true if the cost of the instruction is too high to speculatively execute and should be kept behind a branch. | |
bool | isFCmpOrdCheaperThanFCmpZero (Type *Ty)const |
Return true if it is faster to check if a floating-point value is NaN (or not-NaN) versus a comparison against a constant FP zero value. | |
InstructionCost | getFPOpCost (Type *Ty)const |
Return the expected cost of supporting the floating point operation of the specified type. | |
InstructionCost | getIntImmCost (constAPInt &Imm,Type *Ty,TargetCostKindCostKind)const |
Return the expected cost of materializing for the given integer immediate of the specified type. | |
InstructionCost | getIntImmCostInst (unsigned Opc,unsignedIdx,constAPInt &Imm,Type *Ty,TargetCostKindCostKind,Instruction *Inst=nullptr)const |
Return the expected cost of materialization for the given integer immediate of the specified type for a given instruction. | |
InstructionCost | getIntImmCostIntrin (Intrinsic::ID IID,unsignedIdx,constAPInt &Imm,Type *Ty,TargetCostKindCostKind)const |
InstructionCost | getIntImmCodeSizeCost (unsigned Opc,unsignedIdx,constAPInt &Imm,Type *Ty)const |
Return the expected cost for the given integer when optimising for size. | |
bool | preferToKeepConstantsAttached (constInstruction &Inst,constFunction &Fn)const |
It can be advantageous to detach complex constants from their uses to make their generation cheaper. | |
This pass provides access to the codegen interfaces that are needed for IR-level transformations.
Definition at line212 of fileTargetTransformInfo.h.
Enumerator | |
---|---|
AMK_PreIndexed | |
AMK_PostIndexed | |
AMK_None |
Definition at line780 of fileTargetTransformInfo.h.
| strong |
| strong |
Represents a hint about the context in which a cast is used.
For zext/sext, the context of the cast is the operand, which must be a load of some kind. For trunc, the context is of the cast is the single user of the instruction, which must be a store of some kind.
This enum allows the vectorizer to give getCastInstrCost an idea of the type of cast it's dealing with, as not every cast is equal. For instance, the zext of a load may be free, but the zext of an interleaving load can be (very) expensive!
SeegetCastContextHint
to compute a CastContextHint from a cast Instruction*. Callers can use it if they don't need to override the context and just want it to be calculated from the instruction.
FIXME: This handles the types of load/store that the vectorizer can produce, which are the cases where the context instruction is most likely to be incorrect. There are other situations where that can happen too, which might be handled here but in the long run a more general solution of costing multiple instructions at the same times may be better.
Definition at line1389 of fileTargetTransformInfo.h.
The type of load/store indexing.
Enumerator | |
---|---|
MIM_Unindexed | No indexing. |
MIM_PreInc | Pre-incrementing. |
MIM_PreDec | Pre-decrementing. |
MIM_PostInc | Post-incrementing. |
MIM_PostDec | Post-decrementing. |
Definition at line1696 of fileTargetTransformInfo.h.
Additional information about an operand's possible values.
Enumerator | |
---|---|
OK_AnyValue | |
OK_UniformValue | |
OK_UniformConstantValue | |
OK_NonUniformConstantValue |
Definition at line1118 of fileTargetTransformInfo.h.
Additional properties of an operand's values.
Enumerator | |
---|---|
OP_None | |
OP_PowerOf2 | |
OP_NegatedPowerOf2 |
Definition at line1126 of fileTargetTransformInfo.h.
Enumerator | |
---|---|
PR_None | |
PR_SignExtend | |
PR_ZeroExtend |
Definition at line214 of fileTargetTransformInfo.h.
Flags indicating the kind of support for population count.
Compared to the SW implementation, HW support is supposed to significantly boost the performance when the population is dense, and it may or may not degrade performance if the population is sparse. A HW support is considered as "Fast" if it can outperform, or is on a par with, SW implementation when the population is sparse; otherwise, it is considered as "Slow".
Enumerator | |
---|---|
PSK_Software | |
PSK_SlowHardware | |
PSK_FastHardware |
Definition at line719 of fileTargetTransformInfo.h.
| strong |
Enumerator | |
---|---|
SplitHalf | |
Pairwise |
Definition at line1788 of fileTargetTransformInfo.h.
Enumerator | |
---|---|
RGK_Scalar | |
RGK_FixedWidthVector | |
RGK_ScalableVector |
Definition at line1180 of fileTargetTransformInfo.h.
The various kinds of shuffle patterns for vector queries.
Definition at line1098 of fileTargetTransformInfo.h.
Underlying constants for 'cost' values in this interface.
Many APIs in this interface return a cost. This enum defines the fundamental values that should be used to interpret (and produce) those costs. The costs are returned as an int rather than a member of this enumeration because it is expected that the cost of one IR instruction may have a multiplicative factor to it or otherwise won't fit directly into the enum. Moreover, it is common to sum or average costs which works better as simple integral values. Thus this enum only provides constants. Also note that the returned costs are signed integers to make it natural to add, subtract, and test with zero (a common boundary condition). It is not expected that 2^32 is a realistic cost to be modeling at any point.
Note that these costs should usually reflect the intersection of code-size cost and execution cost. A free instruction is typically one that folds into another instruction. For example, reg-to-reg moves can often be skipped by renaming the registers in the CPU, but they still are encoded and thus wouldn't be considered 'free' here.
Enumerator | |
---|---|
TCC_Free | Expected to fold away in lowering. |
TCC_Basic | The cost of a typical 'add' instruction. |
TCC_Expensive | The cost of a 'div' instruction on x86. |
Definition at line288 of fileTargetTransformInfo.h.
The kind of cost model.
There are several different cost models that can be customized by the target. The normalization of each cost model may be target specific. e.g. TCK_SizeAndLatency should be comparable to target thresholds such as those derived fromMCSchedModel::LoopMicroOpBufferSize etc.
Enumerator | |
---|---|
TCK_RecipThroughput | Reciprocal throughput. |
TCK_Latency | The latency of instruction. |
TCK_CodeSize | Instruction code size. |
TCK_SizeAndLatency | The weighted sum of size and latency. |
Definition at line263 of fileTargetTransformInfo.h.
Construct a TTI object using a type implementing theConcept
API below.
This is used by targets to construct a TTI wrapping their target-specific implementation that encodes appropriate costs for their target.
Definition at line3180 of fileTargetTransformInfo.h.
| explicit |
Construct a baseline TTI object using a minimal implementation of theConcept
API below.
The TTI implementation will reflect the information in theDataLayout provided if non-null.
Definition at line202 of fileTargetTransformInfo.cpp.
TargetTransformInfo::TargetTransformInfo | ( | TargetTransformInfo && | Arg | ) |
Definition at line207 of fileTargetTransformInfo.cpp.
| default |
Return false if aAS0
address cannot possibly alias aAS1
address.
Definition at line310 of fileTargetTransformInfo.cpp.
Referenced byllvm::expandMemMoveAsLoop().
Definition at line235 of fileTargetTransformInfo.cpp.
bool TargetTransformInfo::allowsMisalignedMemoryAccesses | ( | LLVMContext & | Context, |
unsigned | BitWidth, | ||
unsigned | AddressSpace =0 , | ||
Align | Alignment =Align(1) , | ||
unsigned * | Fast =nullptr | ||
) | const |
Determine if the target supports unaligned memory accesses.
Definition at line685 of fileTargetTransformInfo.cpp.
Referencesllvm::BitWidth, andllvm::CallingConv::Fast.
Referenced byfoldConsecutiveLoads().
Definition at line1284 of fileTargetTransformInfo.cpp.
Referenced byfunctionsHaveCompatibleAttributes().
bool TargetTransformInfo::areTypesABICompatible | ( | constFunction * | Caller, |
constFunction * | Callee, | ||
constArrayRef<Type * > & | Types | ||
) | const |
Types
will be passed to or returned from the callee. to the callee.Types | List of types to check. |
Definition at line1296 of fileTargetTransformInfo.cpp.
Return true if globals in this address space can have initializers other thanundef
.
Definition at line329 of fileTargetTransformInfo.cpp.
bool TargetTransformInfo::canMacroFuseCmp | ( | ) | const |
Return true if the target can fuse a compare and branch.
Loop-strength-reduction (LSR) uses that knowledge to adjust its cost calculation for the instructions in a loop.
Definition at line449 of fileTargetTransformInfo.cpp.
bool TargetTransformInfo::canSaveCmp | ( | Loop * | L, |
BranchInst ** | BI, | ||
ScalarEvolution * | SE, | ||
LoopInfo * | LI, | ||
DominatorTree * | DT, | ||
AssumptionCache * | AC, | ||
TargetLibraryInfo * | LibInfo | ||
) | const |
Return true if the target can save a compare for loop count, for example hardware loop saves a compare.
Definition at line453 of fileTargetTransformInfo.cpp.
bool TargetTransformInfo::collectFlatAddressOperands | ( | SmallVectorImpl< int > & | OpIndexes, |
Intrinsic::ID | IID | ||
) | const |
Return any intrinsic address operand indexes which may be rewritten if they use a flat address space pointer.
Definition at line319 of fileTargetTransformInfo.cpp.
Don't restrict interleaved unrolling to small loops.
Definition at line653 of fileTargetTransformInfo.cpp.
Referenced byllvm::LoopVectorizationCostModel::selectInterleaveCount().
bool TargetTransformInfo::enableInterleavedAccessVectorization | ( | ) | const |
Enable matching of interleaved access groups.
Definition at line672 of fileTargetTransformInfo.cpp.
Referenced byllvm::LoopVectorizePass::processLoop().
bool TargetTransformInfo::enableMaskedInterleavedAccessVectorization | ( | ) | const |
Enable matching of interleaved access groups that contain predicated accesses or gaps and therefore vectorized using masked vector loads/stores.
Definition at line676 of fileTargetTransformInfo.cpp.
Referenced byuseMaskedInterleavedAccesses().
TargetTransformInfo::MemCmpExpansionOptions TargetTransformInfo::enableMemCmpExpansion | ( | bool | OptSize, |
bool | IsZeroCmp | ||
) | const |
Definition at line659 of fileTargetTransformInfo.cpp.
bool TargetTransformInfo::enableOrderedReductions | ( | ) | const |
Return true if we should be enabling ordered reductions for the target.
Definition at line543 of fileTargetTransformInfo.cpp.
Referenced byllvm::LoopVectorizePass::processLoop().
bool TargetTransformInfo::enableScalableVectorization | ( | ) | const |
Definition at line1420 of fileTargetTransformInfo.cpp.
Referenced bydetermineVPlanVF(), andllvm::LoopVectorizeHints::LoopVectorizeHints().
bool TargetTransformInfo::enableSelectOptimize | ( | ) | const |
Should the Select Optimization pass be enabled and ran.
Definition at line663 of fileTargetTransformInfo.cpp.
bool TargetTransformInfo::enableWritePrefetching | ( | ) | const |
Definition at line858 of fileTargetTransformInfo.cpp.
bool TargetTransformInfo::forceScalarizeMaskedGather | ( | VectorType * | Type, |
Align | Alignment | ||
) | const |
Return true if the target forces scalarizing of llvm.masked.gather intrinsics.
Definition at line506 of fileTargetTransformInfo.cpp.
Referenced byllvm::slpvectorizer::BoUpSLP::canVectorizeLoads(), andoptimizeCallInst().
bool TargetTransformInfo::forceScalarizeMaskedScatter | ( | VectorType * | Type, |
Align | Alignment | ||
) | const |
Return true if the target forces scalarizing of llvm.masked.scatter intrinsics.
Definition at line511 of fileTargetTransformInfo.cpp.
Referenced byoptimizeCallInst().
InstructionCost TargetTransformInfo::getAddressComputationCost | ( | Type * | Ty, |
ScalarEvolution * | SE =nullptr , | ||
constSCEV * | Ptr =nullptr | ||
) | const |
Definition at line1198 of fileTargetTransformInfo.cpp.
Referenced bychainToBasePointerCost(), andllvm::VPWidenMemoryRecipe::computeCost().
InstructionCost TargetTransformInfo::getAltInstrCost | ( | VectorType * | VecTy, |
unsigned | Opcode0, | ||
unsigned | Opcode1, | ||
constSmallBitVector & | OpcodeMask, | ||
TTI::TargetCostKind | CostKind =TTI::TCK_RecipThroughput | ||
) | const |
Returns the cost estimation for alternating opcode pattern that can be lowered to a single instruction on the target.
InX86 this is for the addsub instruction which corrsponds to a Shuffle + Fadd + FSub pattern in IR. This function expects two opcodes:Opcode1
andOpcode2
being selected byOpcodeMask
. The mask contains one bit per lane and is a0
whenOpcode0
is selected and1
when Opcode1 is selected.VecTy
is the vector type of the instruction to be generated.
Definition at line967 of fileTargetTransformInfo.cpp.
InstructionCost TargetTransformInfo::getArithmeticInstrCost | ( | unsigned | Opcode, |
Type * | Ty, | ||
TTI::TargetCostKind | CostKind =TTI::TCK_RecipThroughput , | ||
TTI::OperandValueInfo | Opd1Info ={TTI::OK_AnyValue, TTI::OP_None} , | ||
TTI::OperandValueInfo | Opd2Info ={TTI::OK_AnyValue, TTI::OP_None} , | ||
ArrayRef<constValue * > | Args ={} , | ||
constInstruction * | CxtI =nullptr , | ||
constTargetLibraryInfo * | TLibInfo =nullptr | ||
) | const |
This is an approximation of reciprocal throughput of a math/logic op.
A higher cost indicates less expected throughput. From Agner Fog's guides, reciprocal throughput is "the average number ofclock cycles per instruction when the instructions are not part of alimiting dependency chain." Therefore, costs should be scaled to account for multiple execution units on the target that can process this type of instruction. For example, if there are 5 scalar integer units and 2 vector integer units that can calculate an 'add' in a single cycle, this model should indicate that the cost of the vector add instruction is 2.5 times the cost of the scalar add instruction.Args
is an optional argument which holds the instruction operands values so the TTI can analyze those values searching for special cases or optimizations based on those values.CxtI
is the optional original context instruction, if one exists, to provide even more information.TLibInfo
is used to search for platform specific vector library functions for instructions that might be converted to calls (e.g. frem).
Definition at line940 of fileTargetTransformInfo.cpp.
Referencesassert(),CostKind,getCallInstrCost(),llvm::VectorType::getElementCount(),llvm::TargetLibraryInfo::getLibFunc(),llvm::TargetLibraryInfo::getName(),llvm::Type::getScalarType(), andllvm::TargetLibraryInfo::isFunctionVectorizable().
Referenced byllvm::VPWidenRecipe::computeCost(),llvm::VPHistogramRecipe::computeCost(),llvm::VPWidenSelectRecipe::computeCost(),llvm::VPReductionRecipe::computeCost(),costAndCollectOperands(),llvm::foldBranchToCommonDest(),llvm::LoopVectorizationCostModel::getDivRemSpeculationCost(),llvm::LoopVectorizationCostModel::getInstructionCost(),llvm::LoopVectorizationCostModel::getReductionPatternCost(), andvisitIVCast().
InstructionCost TargetTransformInfo::getArithmeticReductionCost | ( | unsigned | Opcode, |
VectorType * | Ty, | ||
std::optional<FastMathFlags > | FMF, | ||
TTI::TargetCostKind | CostKind =TTI::TCK_RecipThroughput | ||
) | const |
Calculate the cost of vector reduction intrinsics.
This is the cost of reducing the vector value of typeTy
to a scalar value using the operation denoted byOpcode
. TheFastMathFlags parameterFMF
indicates what type of reduction we are performing:
FMF
indicates that reassociation is allowed.Definition at line1215 of fileTargetTransformInfo.cpp.
Referencesassert(), andCostKind.
Referenced byllvm::VPReductionRecipe::computeCost(), andllvm::LoopVectorizationCostModel::getReductionPatternCost().
Definition at line334 of fileTargetTransformInfo.cpp.
Referenced byisAddressExpression().
unsigned TargetTransformInfo::getAtomicMemIntrinsicMaxElementSize | ( | ) | const |
Definition at line1256 of fileTargetTransformInfo.cpp.
InstructionCost TargetTransformInfo::getBranchMispredictPenalty | ( | ) | const |
Returns estimated penalty of a branch misprediction in latency.
Indicates how aggressive the target wants for eliminating unpredictable branches. A zero return value means extra optimization applied to them should be minimal.
Definition at line285 of fileTargetTransformInfo.cpp.
Referenced byfoldTwoEntryPHINode().
std::optional<unsigned > TargetTransformInfo::getCacheAssociativity | ( | CacheLevel | Level | ) | const |
Definition at line834 of fileTargetTransformInfo.cpp.
unsigned TargetTransformInfo::getCacheLineSize | ( | ) | const |
Definition at line823 of fileTargetTransformInfo.cpp.
ReferencesCacheLineSize.
std::optional<unsigned > TargetTransformInfo::getCacheSize | ( | CacheLevel | Level | ) | const |
Definition at line829 of fileTargetTransformInfo.cpp.
unsigned TargetTransformInfo::getCallerAllocaCost | ( | constCallBase * | CB, |
constAllocaInst * | AI | ||
) | const |
Definition at line239 of fileTargetTransformInfo.cpp.
InstructionCost TargetTransformInfo::getCallInstrCost | ( | Function * | F, |
Type * | RetTy, | ||
ArrayRef<Type * > | Tys, | ||
TTI::TargetCostKind | CostKind =TTI::TCK_SizeAndLatency | ||
) | const |
Definition at line1185 of fileTargetTransformInfo.cpp.
Referencesassert(),CostKind,F, andRetTy.
Referenced byllvm::VPWidenCallRecipe::computeCost(),getArithmeticInstrCost(),llvm::slpvectorizer::BoUpSLP::getSpillCost(),llvm::LoopVectorizationCostModel::getVectorCallCost(),getVectorCallCosts(), andllvm::LoopVectorizationCostModel::setVectorizedCallDecision().
| static |
Calculates a CastContextHint fromI
.
This should be used by callers of getCastInstrCost if they wish to determine the context from some instruction.
I
is nullptr, or if it's another type of cast.Definition at line996 of fileTargetTransformInfo.cpp.
ReferencesGatherScatter,I,II,Masked,None, andNormal.
Referenced bychainToBasePointerCost(),llvm::TargetTransformInfoImplCRTPBase< T >::getInstructionCost(), andllvm::AArch64TargetLowering::optimizeExtendOrTruncateConversion().
InstructionCost TargetTransformInfo::getCastInstrCost | ( | unsigned | Opcode, |
Type * | Dst, | ||
Type * | Src, | ||
TTI::CastContextHint | CCH, | ||
TTI::TargetCostKind | CostKind =TTI::TCK_SizeAndLatency , | ||
constInstruction * | I =nullptr | ||
) | const |
Definition at line1039 of fileTargetTransformInfo.cpp.
Referencesassert(),CostKind, andI.
Referenced bychainToBasePointerCost(),llvm::VPWidenCastRecipe::computeCost(),costAndCollectOperands(),llvm::BasicTTIImplBase< T >::getCastInstrCost(),llvm::LoopVectorizationCostModel::getInstructionCost(),llvm::LoopVectorizationCostModel::getReductionPatternCost(),llvm::slpvectorizer::BoUpSLP::getTreeCost(),llvm::AArch64TargetLowering::optimizeExtendOrTruncateConversion(), andtryToFPToSat().
InstructionCost TargetTransformInfo::getCFInstrCost | ( | unsigned | Opcode, |
TTI::TargetCostKind | CostKind =TTI::TCK_SizeAndLatency , | ||
constInstruction * | I =nullptr | ||
) | const |
Definition at line1058 of fileTargetTransformInfo.cpp.
Referencesassert(),CostKind, andI.
Referenced byllvm::VPHeaderPHIRecipe::computeCost(),llvm::VPFirstOrderRecurrencePHIRecipe::computeCost(),llvm::VPBlendRecipe::computeCost(),llvm::VPRegionBlock::cost(),costAndCollectOperands(),findCostForOutputBlocks(),llvm::LoopVectorizationCostModel::getDivRemSpeculationCost(), andllvm::LoopVectorizationCostModel::getInstructionCost().
InstructionCost TargetTransformInfo::getCmpSelInstrCost | ( | unsigned | Opcode, |
Type * | ValTy, | ||
Type * | CondTy, | ||
CmpInst::Predicate | VecPred, | ||
TTI::TargetCostKind | CostKind =TTI::TCK_RecipThroughput , | ||
OperandValueInfo | Op1Info ={OK_AnyValue, OP_None} , | ||
OperandValueInfo | Op2Info ={OK_AnyValue, OP_None} , | ||
constInstruction * | I =nullptr | ||
) | const |
VecPred
parameter can be used to indicate the select is using a compare with the specified predicate as condition. When vector types are passed,VecPred
must be used for all lanes. For a comparison, the two operands are the natural values. For a select, the two operands are thevalue operands, not the condition operand.Definition at line1067 of fileTargetTransformInfo.cpp.
Referencesassert(),CostKind, andI.
Referenced byllvm::VPWidenRecipe::computeCost(),llvm::VPWidenSelectRecipe::computeCost(),llvm::VPBlendRecipe::computeCost(),costAndCollectOperands(),findCostForOutputBlocks(),llvm::LoopVectorizationCostModel::getDivRemSpeculationCost(),llvm::LoopVectorizationCostModel::getInstructionCost(), andvalidateAndCostRequiredSelects().
InstructionCost TargetTransformInfo::getCostOfKeepingLiveOverCall | ( | ArrayRef<Type * > | Tys | ) | const |
Some types may require the use of register classes that do not have any callee-saved registers, so would require a spill and fill.
Definition at line1247 of fileTargetTransformInfo.cpp.
Referenced byllvm::slpvectorizer::BoUpSLP::getSpillCost().
unsigned TargetTransformInfo::getEpilogueVectorizationMinVF | ( | ) | const |
Definition at line362 of fileTargetTransformInfo.cpp.
Referenced byllvm::LoopVectorizationCostModel::isEpilogueVectorizationProfitable().
unsigned TargetTransformInfo::getEstimatedNumberOfCaseClusters | ( | constSwitchInst & | SI, |
unsigned & | JTSize, | ||
ProfileSummaryInfo * | PSI, | ||
BlockFrequencyInfo * | BFI | ||
) | const |
'SI'
.JTSize
Set a jump table size only whenSI
is suitable for a jump table.Definition at line263 of fileTargetTransformInfo.cpp.
InstructionCost TargetTransformInfo::getExtendedReductionCost | ( | unsigned | Opcode, |
bool | IsUnsigned, | ||
Type * | ResTy, | ||
VectorType * | Ty, | ||
FastMathFlags | FMF, | ||
TTI::TargetCostKind | CostKind =TTI::TCK_RecipThroughput | ||
) | const |
Calculate the cost of an extended reduction pattern, similar to getArithmeticReductionCost of a reduction with an extension.
This is the cost of as: ResTy vecreduce.opcode(ext(Ty A)).
Definition at line1233 of fileTargetTransformInfo.cpp.
ReferencesCostKind.
Referenced byllvm::LoopVectorizationCostModel::getReductionPatternCost().
InstructionCost TargetTransformInfo::getExtractWithExtendCost | ( | unsigned | Opcode, |
Type * | Dst, | ||
VectorType * | VecTy, | ||
unsigned | Index | ||
) | const |
Definition at line1050 of fileTargetTransformInfo.cpp.
Referencesassert().
Referenced byllvm::slpvectorizer::BoUpSLP::getTreeCost().
Returns a bitmask constructed from the target-features or fmv-features metadata of a function.
Definition at line1386 of fileTargetTransformInfo.cpp.
ReferencesF.
Referenced byOptimizeNonTrivialIFuncs().
unsigned TargetTransformInfo::getFlatAddressSpace | ( | ) | const |
Returns the address space ID for a target's 'flat' address space.
Note this is not necessarily the same as addrspace(0), which LLVM sometimes refers to as the generic address space. The flat address space is a generic address space that can be used access multiple segments of memory with different address spaces. Access of a memory location through a pointer with this address space is expected to be legal but slower compared to the same memory location accessed through a pointer with a different address space. This is for targets with different pointer representations which can be converted with the addrspacecast instruction. If a pointer is converted to this address space, optimizations should attempt to replace the access with the source address space.
Definition at line315 of fileTargetTransformInfo.cpp.
InstructionCost TargetTransformInfo::getFPOpCost | ( | Type * | Ty | ) | const |
Return the expected cost of supporting the floating point operation of the specified type.
Definition at line712 of fileTargetTransformInfo.cpp.
Referencesassert().
InstructionCost TargetTransformInfo::getGatherScatterOpCost | ( | unsigned | Opcode, |
Type * | DataTy, | ||
constValue * | Ptr, | ||
bool | VariableMask, | ||
Align | Alignment, | ||
TTI::TargetCostKind | CostKind =TTI::TCK_RecipThroughput , | ||
constInstruction * | I =nullptr | ||
) | const |
Opcode
- is a type of memory access Load or StoreDataTy
- a vector type of the data to be loaded or storedPtr
- pointer [or vector of pointers] - address[es] in memoryVariableMask
- true when the memory access is predicated with a mask that is not a compile-time constantAlignment
- alignment of single elementI
- the optional original context instruction, if one exists, e.g. the load/store to transform or the call to the gather/scatter intrinsicDefinition at line1146 of fileTargetTransformInfo.cpp.
Referencesassert(),CostKind,I,llvm::InstructionCost::isValid(), andPtr.
Referenced byllvm::slpvectorizer::BoUpSLP::canVectorizeLoads(), andllvm::VPWidenMemoryRecipe::computeCost().
InstructionCost TargetTransformInfo::getGEPCost | ( | Type * | PointeeType, |
constValue * | Ptr, | ||
ArrayRef<constValue * > | Operands, | ||
Type * | AccessType =nullptr , | ||
TTI::TargetCostKind | CostKind =TCK_SizeAndLatency | ||
) | const |
Estimate the cost of a GEP operation when lowered.
PointeeType
is the source element type of the GEP.Ptr
is the base pointer operand.Operands
is the list of indices following the base pointer.
AccessType
is a hint as to what type of memory might be accessed by users of the GEP. getGEPCost will use it to determine if the GEP can be folded into the addressing mode of a load/store. If AccessType is null, then the resulting target type based off of PointeeType will be used as an approximation.
Definition at line248 of fileTargetTransformInfo.cpp.
ReferencesCostKind,Operands, andPtr.
Referenced bygetGEPCosts(), andisGEPFoldable().
unsigned TargetTransformInfo::getGISelRematGlobalCost | ( | ) | const |
Definition at line1408 of fileTargetTransformInfo.cpp.
Referenced byllvm::TargetLoweringBase::shouldLocalize().
unsigned TargetTransformInfo::getInlineCallPenalty | ( | constFunction * | F, |
constCallBase & | Call, | ||
unsigned | DefaultCallPenalty | ||
) | const |
Returns a penalty for invoking callCall
inF
.
For example, if a function F calls a function G, which in turn calls function H, then getInlineCallPenalty(F, H()) would return the penalty of calling H from F, e.g. after inlining G into F.DefaultCallPenalty
is passed to give a default penalty that the target can amend or override.
Definition at line1290 of fileTargetTransformInfo.cpp.
ReferencesF.
Referenced byllvm::getCallsiteCost().
int TargetTransformInfo::getInlinerVectorBonusPercent | ( | ) | const |
Vector bonuses: We want to more aggressively inline vector-dense kernels and apply this bonus based on the percentage of vector instructions. A bonus is applied if the vector instructions exceed 50% and half that amount is applied if it exceeds 10%. Note that these bonuses are some what arbitrary and evolved over time by accident as much as because they are principled bonuses. FIXME: It would be nice to base the bonus values on something more scientific. A target may has no bonus on vector instructions.
Definition at line244 of fileTargetTransformInfo.cpp.
unsigned TargetTransformInfo::getInliningCostBenefitAnalysisProfitableMultiplier | ( | ) | const |
Definition at line225 of fileTargetTransformInfo.cpp.
unsigned TargetTransformInfo::getInliningCostBenefitAnalysisSavingsMultiplier | ( | ) | const |
Definition at line220 of fileTargetTransformInfo.cpp.
int TargetTransformInfo::getInliningLastCallToStaticBonus | ( | ) | const |
Definition at line230 of fileTargetTransformInfo.cpp.
Referenced byshouldBeDeferred().
unsigned TargetTransformInfo::getInliningThresholdMultiplier | ( | ) | const |
TODO: This is a rather blunt instrument. Perhaps altering the costs of individual classes of instructions would be better.
Definition at line215 of fileTargetTransformInfo.cpp.
InstructionCost TargetTransformInfo::getInstructionCost | ( | constUser * | U, |
ArrayRef<constValue * > | Operands, | ||
TargetCostKind | CostKind | ||
) | const |
Estimate the cost of a given IR user when lowered.
This can estimate the cost of either aConstantExpr orInstruction when lowered.
Operands
is a list of operands which can be a result of transformations of the current operands. The number of the operands on the list must equal to the number of the current operands the IR user has. Their order on the list must be the same as the order of the current operands the IR user has.
The returned cost is defined in terms ofTargetCostConstants
, see its comments for a detailed explanation of the cost values.
Definition at line270 of fileTargetTransformInfo.cpp.
Referencesassert(),CostKind,Operands, andTCK_RecipThroughput.
Referenced byllvm::CodeMetrics::analyzeBasicBlock(),analyzeLoopUnrollCost(),canSplitCallSite(),llvm::slpvectorizer::BoUpSLP::canVectorizeLoads(),checkOuterLoopInsts(),llvm::ComputeSpeculationCost(),computeSpeculationCost(),findBestNonTrivialUnswitchCandidate(),llvm::foldBranchToCommonDest(),getAppleRuntimeUnrollPreferences(),llvm::OutlinableRegion::getBenefit(),getInstructionCost(),llvm::LoopVectorizationCostModel::getInstructionCost(),getJumpThreadDuplicationCost(),llvm::InstCostVisitor::getLatencySavingsForKnownConstants(),getOutliningBenefit(),llvm::slpvectorizer::BoUpSLP::getTreeCost(),isFoldableInLoop(),mergeConditionalStoreToAddress(),llvm::CostModelPrinterPass::run(),llvm::SelectionDAGBuilder::shouldKeepJumpConditionsTogether(), andllvm::slpvectorizer::BoUpSLP::transformNodes().
| inline |
This is a helper function which calls the three-argument getInstructionCost withOperands
which are the current operands U has.
Definition at line417 of fileTargetTransformInfo.h.
ReferencesCostKind,getInstructionCost(), andOperands.
InstructionCost TargetTransformInfo::getInterleavedMemoryOpCost | ( | unsigned | Opcode, |
Type * | VecTy, | ||
unsigned | Factor, | ||
ArrayRef<unsigned > | Indices, | ||
Align | Alignment, | ||
unsigned | AddressSpace, | ||
TTI::TargetCostKind | CostKind =TTI::TCK_RecipThroughput , | ||
bool | UseMaskForCond =false , | ||
bool | UseMaskForGaps =false | ||
) | const |
Opcode
is the memory operation codeVecTy
is the vector type of the interleaved access.Factor
is the interleave factorIndices
is the indices for interleaved load members (as interleaved load allows gaps)Alignment
is the alignment of the memory operationAddressSpace
is address space of the pointer.UseMaskForCond
indicates if the memory access is predicated.UseMaskForGaps
indicates if gaps should be masked.Definition at line1165 of fileTargetTransformInfo.cpp.
Referencesassert(), andCostKind.
Referenced byllvm::VPInterleaveRecipe::computeCost().
InstructionCost TargetTransformInfo::getIntImmCodeSizeCost | ( | unsigned | Opc, |
unsigned | Idx, | ||
constAPInt & | Imm, | ||
Type * | Ty | ||
) | const |
Return the expected cost for the given integer when optimising for size.
This is different than the other integer immediate cost functions in that it is subtarget agnostic. This is useful when you e.g. target one ISA such as Aarch32 but smaller encodings could be possible with another such as Thumb. This return value is used as a penalty when the total costs for a constant is calculated (the bigger the cost, the more beneficial constant hoisting is).
Definition at line718 of fileTargetTransformInfo.cpp.
InstructionCost TargetTransformInfo::getIntImmCost | ( | constAPInt & | Imm, |
Type * | Ty, | ||
TTI::TargetCostKind | CostKind | ||
) | const |
Return the expected cost of materializing for the given integer immediate of the specified type.
Definition at line728 of fileTargetTransformInfo.cpp.
Referencesassert(), andCostKind.
Referenced bytryUnmergingGEPsAcrossIndirectBr().
InstructionCost TargetTransformInfo::getIntImmCostInst | ( | unsigned | Opc, |
unsigned | Idx, | ||
constAPInt & | Imm, | ||
Type * | Ty, | ||
TTI::TargetCostKind | CostKind, | ||
Instruction * | Inst =nullptr | ||
) | const |
Return the expected cost of materialization for the given integer immediate of the specified type for a given instruction.
The cost can be zero if the immediate can be folded into the specified instruction.
Definition at line735 of fileTargetTransformInfo.cpp.
InstructionCost TargetTransformInfo::getIntImmCostIntrin | ( | Intrinsic::ID | IID, |
unsigned | Idx, | ||
constAPInt & | Imm, | ||
Type * | Ty, | ||
TTI::TargetCostKind | CostKind | ||
) | const |
Definition at line745 of fileTargetTransformInfo.cpp.
InstructionCost TargetTransformInfo::getIntrinsicInstrCost | ( | constIntrinsicCostAttributes & | ICA, |
TTI::TargetCostKind | CostKind | ||
) | const |
Definition at line1177 of fileTargetTransformInfo.cpp.
Referencesassert(), andCostKind.
Referenced byllvm::VPWidenIntrinsicRecipe::computeCost(),llvm::VPHistogramRecipe::computeCost(),llvm::LoopVectorizationCostModel::getInstructionCost(),llvm::slpvectorizer::BoUpSLP::getSpillCost(),getVectorCallCosts(),llvm::LoopVectorizationCostModel::getVectorIntrinsicCost(),llvm::CostModelPrinterPass::run(),simplifySwitchOfPowersOfTwo(), andtryToFPToSat().
Definition at line1312 of fileTargetTransformInfo.cpp.
unsigned TargetTransformInfo::getLoadVectorFactor | ( | unsigned | VF, |
unsigned | LoadSize, | ||
unsigned | ChainSizeInBytes, | ||
VectorType * | VecTy | ||
) | const |
SizeInBytes
loads or has a better vector factor.Definition at line1345 of fileTargetTransformInfo.cpp.
InstructionCost TargetTransformInfo::getMaskedMemoryOpCost | ( | unsigned | Opcode, |
Type * | Src, | ||
Align | Alignment, | ||
unsigned | AddressSpace, | ||
TTI::TargetCostKind | CostKind =TTI::TCK_RecipThroughput | ||
) | const |
Definition at line1137 of fileTargetTransformInfo.cpp.
Referencesassert(), andCostKind.
Referenced byllvm::VPWidenMemoryRecipe::computeCost(),llvm::VPWidenLoadEVLRecipe::computeCost(), andllvm::VPWidenStoreEVLRecipe::computeCost().
Definition at line807 of fileTargetTransformInfo.cpp.
Referenced byllvm::slpvectorizer::BoUpSLP::getMaximumVF().
unsigned TargetTransformInfo::getMaxInterleaveFactor | ( | ElementCount | VF | ) | const |
Definition at line875 of fileTargetTransformInfo.cpp.
Referenced byllvm::LoopVectorizationCostModel::isEpilogueVectorizationProfitable(),llvm::LoopVectorizePass::runImpl(), andllvm::LoopVectorizationCostModel::selectInterleaveCount().
uint64_t TargetTransformInfo::getMaxMemIntrinsicInlineSizeThreshold | ( | ) | const |
Returns the maximum memset / memcpy size in bytes that still makes it profitable to inline the call.
Definition at line1211 of fileTargetTransformInfo.cpp.
unsigned TargetTransformInfo::getMaxNumArgs | ( | ) | const |
Definition at line1394 of fileTargetTransformInfo.cpp.
Referenced bypromoteArguments().
unsigned TargetTransformInfo::getMaxPrefetchIterationsAhead | ( | ) | const |
Definition at line854 of fileTargetTransformInfo.cpp.
std::optional<unsigned > TargetTransformInfo::getMaxVScale | ( | ) | const |
Definition at line785 of fileTargetTransformInfo.cpp.
Referenced bygetMaxVScale().
InstructionCost TargetTransformInfo::getMemcpyCost | ( | constInstruction * | I | ) | const |
Definition at line1205 of fileTargetTransformInfo.cpp.
Type * TargetTransformInfo::getMemcpyLoopLoweringType | ( | LLVMContext & | Context, |
Value * | Length, | ||
unsigned | SrcAddrSpace, | ||
unsigned | DestAddrSpace, | ||
Align | SrcAlign, | ||
Align | DestAlign, | ||
std::optional<uint32_t > | AtomicElementSize =std::nullopt | ||
) | const |
Definition at line1265 of fileTargetTransformInfo.cpp.
Referencesllvm::Length.
Referenced byllvm::createMemCpyLoopKnownSize(),createMemMoveLoopKnownSize(), andcreateMemMoveLoopUnknownSize().
void TargetTransformInfo::getMemcpyLoopResidualLoweringType | ( | SmallVectorImpl<Type * > & | OpsOut, |
LLVMContext & | Context, | ||
unsigned | RemainingBytes, | ||
unsigned | SrcAddrSpace, | ||
unsigned | DestAddrSpace, | ||
Align | SrcAlign, | ||
Align | DestAlign, | ||
std::optional<uint32_t > | AtomicCpySize =std::nullopt | ||
) | const |
[out] | OpsOut | The operand types to copy RemainingBytes of memory. |
RemainingBytes | The number of bytes to copy. |
Calculates the operand types to use when copyingRemainingBytes
of memory, where source and destination alignments areSrcAlign
andDestAlign
respectively.
Definition at line1274 of fileTargetTransformInfo.cpp.
Referenced byllvm::createMemCpyLoopKnownSize(), andcreateMemMoveLoopKnownSize().
InstructionCost TargetTransformInfo::getMemoryOpCost | ( | unsigned | Opcode, |
Type * | Src, | ||
Align | Alignment, | ||
unsigned | AddressSpace, | ||
TTI::TargetCostKind | CostKind =TTI::TCK_RecipThroughput , | ||
TTI::OperandValueInfo | OpInfo ={OK_AnyValue, OP_None} , | ||
constInstruction * | I =nullptr | ||
) | const |
Definition at line1125 of fileTargetTransformInfo.cpp.
Referencesassert(),CostKind, andI.
Referenced byllvm::slpvectorizer::BoUpSLP::canVectorizeLoads(),llvm::VPWidenMemoryRecipe::computeCost(),findCostForOutputBlocks(), andllvm::slpvectorizer::BoUpSLP::transformNodes().
ElementCount TargetTransformInfo::getMinimumVF | ( | unsigned | ElemWidth, |
bool | IsScalable | ||
) | const |
Definition at line802 of fileTargetTransformInfo.cpp.
InstructionCost TargetTransformInfo::getMinMaxReductionCost | ( | Intrinsic::ID | IID, |
VectorType * | Ty, | ||
FastMathFlags | FMF =FastMathFlags() , | ||
TTI::TargetCostKind | CostKind =TTI::TCK_RecipThroughput | ||
) | const |
Definition at line1224 of fileTargetTransformInfo.cpp.
Referencesassert(), andCostKind.
Referenced byllvm::VPReductionRecipe::computeCost(), andllvm::LoopVectorizationCostModel::getReductionPatternCost().
std::optional<unsigned > TargetTransformInfo::getMinPageSize | ( | ) | const |
Definition at line838 of fileTargetTransformInfo.cpp.
ReferencesMinPageSize.
unsigned TargetTransformInfo::getMinPrefetchStride | ( | unsigned | NumMemAccesses, |
unsigned | NumStridedMemAccesses, | ||
unsigned | NumPrefetches, | ||
bool | HasCall | ||
) | const |
Some HW prefetchers can handle accesses up to a certain constant stride.
Sometimes prefetching is beneficial even below the HW prefetcher limit, and the arguments provided are meant to serve as a basis for deciding this for a particular loop.
NumMemAccesses | Number of memory accesses in the loop. |
NumStridedMemAccesses | Number of the memory accesses thatScalarEvolution could find a known stride for. |
NumPrefetches | Number of software prefetches that will be emitted as determined by the addresses involved and the cache line size. |
HasCall | True if the loop contains a call. |
Definition at line847 of fileTargetTransformInfo.cpp.
unsigned TargetTransformInfo::getMinTripCountTailFoldingThreshold | ( | ) | const |
Definition at line1412 of fileTargetTransformInfo.cpp.
Referenced byllvm::LoopVectorizePass::processLoop().
unsigned TargetTransformInfo::getMinVectorRegisterBitWidth | ( | ) | const |
Definition at line781 of fileTargetTransformInfo.cpp.
Referenced byllvm::slpvectorizer::BoUpSLP::BoUpSLP(), andcanWidenLoad().
InstructionCost TargetTransformInfo::getMulAccReductionCost | ( | bool | IsUnsigned, |
Type * | ResTy, | ||
VectorType * | Ty, | ||
TTI::TargetCostKind | CostKind =TTI::TCK_RecipThroughput | ||
) | const |
Calculate the cost of an extended reduction pattern, similar to getArithmeticReductionCost of an Add reduction with multiply and optional extensions.
This is the cost of as: ResTy vecreduce.add(mul (A, B)). ResTy vecreduce.add(mul(ext(Ty A), ext(Ty B)).
Definition at line1240 of fileTargetTransformInfo.cpp.
ReferencesCostKind.
Referenced byllvm::LoopVectorizationCostModel::getReductionPatternCost().
Definition at line1193 of fileTargetTransformInfo.cpp.
Referenced bygetFloorFullVectorNumberOfElements(),getFullVectorNumberOfElements(),llvm::LoopVectorizationCostModel::getInstructionCost(),llvm::getNumberOfParts(),llvm::hasFullVectorsOrPowerOf2(), andwillGenerateVectors().
Definition at line759 of fileTargetTransformInfo.cpp.
Referenced byllvm::LoopVectorizePass::runImpl(),llvm::SLPVectorizerPass::runImpl(), andllvm::LoopVectorizationCostModel::selectInterleaveCount().
Definition at line1439 of fileTargetTransformInfo.cpp.
ReferencesSize.
| static |
Collect properties of V used in cost analysis, e.g. OP_PowerOf2.
Definition at line880 of fileTargetTransformInfo.cpp.
Referencesllvm::getSplatValue(),I,OK_AnyValue,OK_NonUniformConstantValue,OK_UniformConstantValue,OK_UniformValue,OP_NegatedPowerOf2,OP_None,OP_PowerOf2, andllvm::Splat.
Referenced byllvm::VPWidenRecipe::computeCost(),llvm::VPWidenMemoryRecipe::computeCost(),llvm::LoopVectorizationCostModel::getDivRemSpeculationCost(),llvm::TargetTransformInfoImplCRTPBase< T >::getInstructionCost(),llvm::LoopVectorizationCostModel::getInstructionCost(),llvm::BasicTTIImplBase< T >::getIntrinsicInstrCost(),llvm::AArch64TTIImpl::getIntrinsicInstrCost(), andllvm::VPCostContext::getOperandInfo().
InstructionCost TargetTransformInfo::getOperandsScalarizationOverhead | ( | ArrayRef<constValue * > | Args, |
ArrayRef<Type * > | Tys, | ||
TTI::TargetCostKind | CostKind | ||
) | const |
Estimate the overhead of scalarizing an instructions unique non-constant operands.
The (potentially vector) types to use for each of argument are passes via Tys.
Definition at line635 of fileTargetTransformInfo.cpp.
ReferencesCostKind.
Value * TargetTransformInfo::getOrCreateResultFromMemIntrinsic | ( | IntrinsicInst * | Inst, |
Type * | ExpectedType | ||
) | const |
Definition at line1260 of fileTargetTransformInfo.cpp.
InstructionCost TargetTransformInfo::getPartialReductionCost | ( | unsigned | Opcode, |
Type * | InputTypeA, | ||
Type * | InputTypeB, | ||
Type * | AccumType, | ||
ElementCount | VF, | ||
PartialReductionExtendKind | OpAExtend, | ||
PartialReductionExtendKind | OpBExtend, | ||
std::optional<unsigned > | BinOp =std::nullopt | ||
) | const |
Definition at line866 of fileTargetTransformInfo.cpp.
Referenced byllvm::VPPartialReductionRecipe::computeCost().
| static |
Get the kind of extension that an instruction represents.
Definition at line987 of fileTargetTransformInfo.cpp.
ReferencesI,PR_None,PR_SignExtend, andPR_ZeroExtend.
void TargetTransformInfo::getPeelingPreferences | ( | Loop * | L, |
ScalarEvolution & | SE, | ||
PeelingPreferences & | PP | ||
) | const |
Get target-customized preferences for the generic loop peeling transformation.
The caller will initializePP
with the current target-independent defaults with information fromL
andSE
.
Definition at line405 of fileTargetTransformInfo.cpp.
Referenced byllvm::gatherPeelingPreferences().
InstructionCost TargetTransformInfo::getPointersChainCost | ( | ArrayRef<constValue * > | Ptrs, |
constValue * | Base, | ||
constPointersChainInfo & | Info, | ||
Type * | AccessTy, | ||
TTI::TargetCostKind | CostKind =TTI::TCK_RecipThroughput | ||
) | const |
Estimate the cost of a chain of pointers (typically pointer operands of a chain of loads or stores within same block) operations set when lowered.
AccessTy
is the type of the loads/stores that will ultimately use thePtrs
.
Definition at line254 of fileTargetTransformInfo.cpp.
Referencesassert(),llvm::sampleprof::Base,CostKind, andInfo.
Referenced bygetGEPCosts().
TargetTransformInfo::PopcntSupportKind TargetTransformInfo::getPopcntSupport | ( | unsigned | IntTyWidthInBit | ) | const |
Return hardware support for population count.
Definition at line695 of fileTargetTransformInfo.cpp.
Definition at line343 of fileTargetTransformInfo.cpp.
Referenced byfindAffectedValues().
BranchProbability TargetTransformInfo::getPredictableBranchThreshold | ( | ) | const |
If a branch or a select condition is skewed in one direction by more than this factor, it is very likely to be predicted correctly.
Definition at line279 of fileTargetTransformInfo.cpp.
ReferencesPredictableBranchThreshold.
Referenced byfoldTwoEntryPHINode(),isFormingBranchFromSelectProfitable(),isProfitableToSpeculate(),shouldFoldCondBranchesToCommonDestination(), andSimplifyCondBranchToCondBranch().
TTI::AddressingModeKind TargetTransformInfo::getPreferredAddressingMode | ( | constLoop * | L, |
ScalarEvolution * | SE | ||
) | const |
Return the preferred addressing mode LSR should make efforts to generate.
Definition at line461 of fileTargetTransformInfo.cpp.
TargetTransformInfo::ReductionShuffle TargetTransformInfo::getPreferredExpandedReductionShuffle | ( | constIntrinsicInst * | II | ) | const |
Definition at line1403 of fileTargetTransformInfo.cpp.
ReferencesII.
TailFoldingStyle TargetTransformInfo::getPreferredTailFoldingStyle | ( | bool | IVUpdateMayOverflow =true | ) | const |
Query the target what the preferred style of tail folding is.
IVUpdateMayOverflow | Tells whether it is known if the IV update may (or will never) overflow for the suggested VF/UF in the given loop. Targets can use this information to select a more optimal tail folding style. The value conservatively defaults to true, such that no assumptions are made on overflow. |
Definition at line371 of fileTargetTransformInfo.cpp.
Referenced byllvm::LoopVectorizationCostModel::setTailFoldingStyles().
unsigned TargetTransformInfo::getPrefetchDistance | ( | ) | const |
Definition at line843 of fileTargetTransformInfo.cpp.
TypeSize TargetTransformInfo::getRegisterBitWidth | ( | TargetTransformInfo::RegisterKind | K | ) | const |
Definition at line776 of fileTargetTransformInfo.cpp.
Referenced byllvm::slpvectorizer::BoUpSLP::BoUpSLP(),determineVPlanVF(), andllvm::LoopAccessInfo::LoopAccessInfo().
Definition at line767 of fileTargetTransformInfo.cpp.
Referencesllvm::Vector.
Referenced byllvm::LoopVectorizationCostModel::calculateRegisterUsage(),llvm::LoopVectorizePass::runImpl(), andllvm::SLPVectorizerPass::runImpl().
Definition at line772 of fileTargetTransformInfo.cpp.
Referenced byllvm::LoopVectorizationCostModel::calculateRegisterUsage(), andllvm::LoopVectorizationCostModel::selectInterleaveCount().
Returns the estimated number of registers required to representTy
.
Definition at line587 of fileTargetTransformInfo.cpp.
Referenced byllvm::LoopVectorizationCostModel::calculateRegisterUsage().
InstructionCost TargetTransformInfo::getReplicationShuffleCost | ( | Type * | EltTy, |
int | ReplicationFactor, | ||
int | VF, | ||
constAPInt & | DemandedDstElts, | ||
TTI::TargetCostKind | CostKind | ||
) | const |
VF
elements typedEltTy
ReplicationFactor
times.For example, the mask forReplicationFactor=3
andVF=4
is: <0,0,0,1,1,1,2,2,2,3,3,3>
Definition at line1116 of fileTargetTransformInfo.cpp.
InstructionCost TargetTransformInfo::getScalarizationOverhead | ( | VectorType * | Ty, |
constAPInt & | DemandedElts, | ||
bool | Insert, | ||
bool | Extract, | ||
TTI::TargetCostKind | CostKind, | ||
ArrayRef<Value * > | VL ={} | ||
) | const |
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. The involved values may be passed in VL if Insert is true.
Definition at line628 of fileTargetTransformInfo.cpp.
ReferencesCostKind.
Referenced byllvm::slpvectorizer::BoUpSLP::canVectorizeLoads(),llvm::LoopVectorizationCostModel::getInstructionCost(), andllvm::slpvectorizer::BoUpSLP::isTreeTinyAndNotFullyVectorizable().
InstructionCost TargetTransformInfo::getScalingFactorCost | ( | Type * | Ty, |
GlobalValue * | BaseGV, | ||
StackOffset | BaseOffset, | ||
bool | HasBaseReg, | ||
int64_t | Scale, | ||
unsigned | AddrSpace =0 | ||
) | const |
Return the cost of the scaling factor used in the addressing mode represented by AM for this target, for a load/store of the specified type.
If the AM is supported, the return value must be >= 0. If the AM is not supported, it returns a negative value. TODO: Handle pre/postinc as well.
Definition at line560 of fileTargetTransformInfo.cpp.
Referencesassert().
Referenced bygetScalingFactorCost().
InstructionCost TargetTransformInfo::getShuffleCost | ( | ShuffleKind | Kind, |
VectorType * | Tp, | ||
ArrayRef< int > | Mask ={} , | ||
TTI::TargetCostKind | CostKind =TTI::TCK_RecipThroughput , | ||
int | Index =0 , | ||
VectorType * | SubTp =nullptr , | ||
ArrayRef<constValue * > | Args ={} , | ||
constInstruction * | CxtI =nullptr | ||
) | const |
Args
, which helps improve the cost estimation in some cases, like in broadcast loads. NOTE: For subvector extractions Tp represents the source type.Definition at line976 of fileTargetTransformInfo.cpp.
Referencesassert(), andCostKind.
Referenced byllvm::VPFirstOrderRecurrencePHIRecipe::computeCost(),llvm::VPInterleaveRecipe::computeCost(),llvm::VPWidenMemoryRecipe::computeCost(),llvm::VPWidenLoadEVLRecipe::computeCost(),llvm::VPWidenStoreEVLRecipe::computeCost(),llvm::LoopVectorizationCostModel::getInstructionCost(),isFreeConcat(), andllvm::LoopVectorizationCostModel::setVectorizedCallDecision().
unsigned TargetTransformInfo::getStoreMinimumVF | ( | unsigned | VF, |
Type * | ScalarMemTy, | ||
Type * | ScalarValTy | ||
) | const |
VF | Initial estimation of the minimum vector factor. |
ScalarMemTy | Scalar memory type of the store operation. |
ScalarValTy | Scalar type of the stored value. Currently only used by the SLP vectorizer. |
Definition at line812 of fileTargetTransformInfo.cpp.
unsigned TargetTransformInfo::getStoreVectorFactor | ( | unsigned | VF, |
unsigned | StoreSize, | ||
unsigned | ChainSizeInBytes, | ||
VectorType * | VecTy | ||
) | const |
SizeInBytes
stores or has a better vector factor.Definition at line1352 of fileTargetTransformInfo.cpp.
InstructionCost TargetTransformInfo::getStridedMemoryOpCost | ( | unsigned | Opcode, |
Type * | DataTy, | ||
constValue * | Ptr, | ||
bool | VariableMask, | ||
Align | Alignment, | ||
TTI::TargetCostKind | CostKind =TTI::TCK_RecipThroughput , | ||
constInstruction * | I =nullptr | ||
) | const |
Opcode
- is a type of memory access Load or StoreDataTy
- a vector type of the data to be loaded or storedPtr
- pointer [or vector of pointers] - address[es] in memoryVariableMask
- true when the memory access is predicated with a mask that is not a compile-time constantAlignment
- alignment of single elementI
- the optional original context instruction, if one exists, e.g. the load/store to transform or the call to the gather/scatter intrinsicDefinition at line1156 of fileTargetTransformInfo.cpp.
Referencesassert(),CostKind,I, andPtr.
Referenced byllvm::slpvectorizer::BoUpSLP::canVectorizeLoads(), andllvm::slpvectorizer::BoUpSLP::transformNodes().
bool TargetTransformInfo::getTgtMemIntrinsic | ( | IntrinsicInst * | Inst, |
MemIntrinsicInfo & | Info | ||
) | const |
Definition at line1251 of fileTargetTransformInfo.cpp.
ReferencesInfo.
Referenced bygetAccessType(), andisAddressUse().
void TargetTransformInfo::getUnrollingPreferences | ( | Loop * | L, |
ScalarEvolution & | SE, | ||
UnrollingPreferences & | UP, | ||
OptimizationRemarkEmitter * | ORE | ||
) | const |
Get target-customized preferences for the generic loop unrolling transformation.
The caller will initialize UP with the current target-independent defaults.
Definition at line399 of fileTargetTransformInfo.cpp.
Referenced byllvm::LoopVectorizationPlanner::executePlan(), andllvm::gatherUnrollingPreferences().
InstructionCost TargetTransformInfo::getVectorInstrCost | ( | constInstruction & | I, |
Type * | Val, | ||
TTI::TargetCostKind | CostKind, | ||
unsigned | Index =-1 | ||
) | const |
A typical suitable use case is cost estimation when vector instruction exists (e.g., from basic blocks during transformation).
Definition at line1105 of fileTargetTransformInfo.cpp.
InstructionCost TargetTransformInfo::getVectorInstrCost | ( | unsigned | Opcode, |
Type * | Val, | ||
TTI::TargetCostKind | CostKind, | ||
unsigned | Index, | ||
Value * | Scalar, | ||
ArrayRef< std::tuple<Value *,User *, int > > | ScalarUserAndIdx | ||
) | const |
ScalarUserAndIdx | encodes the information about extracts from a vector with 'Scalar' being the value being extracted,'User' being the user of theextract(nullptr if user is not known before vectorization) and 'Idx' being the extract lane. |
Definition at line1091 of fileTargetTransformInfo.cpp.
InstructionCost TargetTransformInfo::getVectorInstrCost | ( | unsigned | Opcode, |
Type * | Val, | ||
TTI::TargetCostKind | CostKind, | ||
unsigned | Index =-1 , | ||
Value * | Op0 =nullptr , | ||
Value * | Op1 =nullptr | ||
) | const |
Definition at line1079 of fileTargetTransformInfo.cpp.
Referencesassert(), andCostKind.
Referenced byllvm::slpvectorizer::BoUpSLP::getReorderingData(), andllvm::slpvectorizer::BoUpSLP::getTreeCost().
TargetTransformInfo::VPLegalization TargetTransformInfo::getVPLegalizationStrategy | ( | constVPIntrinsic & | PI | ) | const |
Definition at line1378 of fileTargetTransformInfo.cpp.
InstructionCost llvm::TargetTransformInfo::getVPMemoryOpCost | ( | unsigned | Opcode, |
Type * | Src, | ||
Align | Alignment, | ||
unsigned | AddressSpace, | ||
TTI::TargetCostKind | CostKind =TTI::TCK_RecipThroughput , | ||
constInstruction * | I =nullptr | ||
) | const |
std::optional<unsigned > TargetTransformInfo::getVScaleForTuning | ( | ) | const |
Definition at line789 of fileTargetTransformInfo.cpp.
Referenced bygetVScaleForTuning().
bool TargetTransformInfo::hasActiveVectorLength | ( | unsigned | Opcode, |
Type * | DataType, | ||
Align | Alignment | ||
) | const |
Definition at line1424 of fileTargetTransformInfo.cpp.
Referenced byllvm::LoopVectorizationCostModel::setTailFoldingStyles().
Used by the LowerTypeTests pass, which constructs an IR inline assembler node containing a jump table in a format suitable for the target, so it needs to know what format of jump table it can legally use.
For non-Arm targets, this function isn't used. It defaults to returning false, but it shouldn't matter what it returns anyway.
Definition at line1382 of fileTargetTransformInfo.cpp.
Return true if branch divergence exists.
Branch divergence has a significantly negative impact on GPU performance when threads in the same wavefront take different paths due to conditional branches.
IfF
is passed, provides a context function. IfF
is known to only execute in a single threaded environment, the target may choose to skip uniformity analysis and assume all values are uniform.
Definition at line289 of fileTargetTransformInfo.cpp.
ReferencesF.
Referenced byllvm::LoopVectorizationCostModel::computeMaxVF(),llvm::UniformityInfoAnalysis::run(),llvm::JumpThreadingPass::run(),runImpl(),llvm::SpeculativeExecutionPass::runImpl(), andunswitchLoop().
Definition at line763 of fileTargetTransformInfo.cpp.
Referenced byisSafeCheapLoadStore().
Return true if the target has a unified operation to calculate division and remainder.
If so, the additional implicit multiplication and subtraction required to calculate a remainder from division are free. This can enable more aggressive transformations for division and remainder than would typically be allowed using throughput or size cost models.
Definition at line547 of fileTargetTransformInfo.cpp.
Referenced byoptimizeDivRem().
bool TargetTransformInfo::hasVolatileVariant | ( | Instruction * | I, |
unsigned | AddrSpace | ||
) | const |
Return true if the given instruction (assumed to be a memory access instruction) has a volatile variant.
If that's the case then we can avoid addrspacecast to generic AS for volatile loads/stores. Default implementation returns false, which prevents address space inference for volatile loads/stores.
Definition at line551 of fileTargetTransformInfo.cpp.
ReferencesI.
Referenced byreplaceSimplePointerUse().
Return true if the hardware has a fast square-root instruction.
Definition at line699 of fileTargetTransformInfo.cpp.
Referenced byfoldSqrt(), andrunPartiallyInlineLibCalls().
std::optional<Instruction * > TargetTransformInfo::instCombineIntrinsic | ( | InstCombiner & | IC, |
IntrinsicInst & | II | ||
) | const |
Targets can implement their own combinations for target-specific intrinsics.
This function will be called from the InstCombine pass every time a target-specific intrinsic is encountered.
Definition at line377 of fileTargetTransformInfo.cpp.
ReferencesII.
Referenced byllvm::InstCombiner::targetInstCombineIntrinsic().
| inline |
Handle the invalidation of this information.
When used as a result ofTargetIRAnalysis
this method will be called when the function this was computed for changes. When it returns false, the information is preserved across those changes.
Definition at line247 of fileTargetTransformInfo.h.
Definition at line301 of fileTargetTransformInfo.cpp.
Referenced byllvm::GenericUniformityAnalysisImpl< ContextT >::initialize().
Definition at line1341 of fileTargetTransformInfo.cpp.
bool TargetTransformInfo::isExpensiveToSpeculativelyExecute | ( | constInstruction * | I | ) | const |
Return true if the cost of the instruction is too high to speculatively execute and should be kept behind a branch.
This normally just wraps around agetInstructionCost() call, but some targets might report a low TCK_SizeAndLatency value that is incompatible with the fixed TCC_Expensive value. NOTE: This assumes the instruction passesisSafeToSpeculativelyExecute().
Definition at line703 of fileTargetTransformInfo.cpp.
ReferencesI.
Referenced bysinkSelectOperand().
Return true if it is faster to check if a floating-point value is NaN (or not-NaN) versus a comparison against a constant FP zero value.
Targets should override this if materializing a 0.0 for comparison is generally as cheap as checking for ordered/unordered.
Definition at line708 of fileTargetTransformInfo.cpp.
Referenced byoptimizeSQRT().
bool TargetTransformInfo::isFPVectorizationPotentiallyUnsafe | ( | ) | const |
Indicate that it is potentially unsafe to automatically vectorize floating-point operations because the semantics of vector and scalar floating-point semantics may differ.
For example,ARM NEON v7 SIMD math does not support IEEE-754 denormal numbers, while depending on the platform, scalar floating-point math does. This applies to floating-point math operations and calls, not memory operations, shuffles, or casts.
Definition at line680 of fileTargetTransformInfo.cpp.
Referenced byllvm::LoopVectorizePass::processLoop().
bool TargetTransformInfo::isHardwareLoopProfitable | ( | Loop * | L, |
ScalarEvolution & | SE, | ||
AssumptionCache & | AC, | ||
TargetLibraryInfo * | LibInfo, | ||
HardwareLoopInfo & | HWLoopInfo | ||
) | const |
Query the target whether it would be profitable to convert the given loop into a hardware loop.
Definition at line356 of fileTargetTransformInfo.cpp.
bool TargetTransformInfo::isIndexedLoadLegal | ( | enumMemIndexedMode | Mode, |
Type * | Ty | ||
) | const |
Definition at line1302 of fileTargetTransformInfo.cpp.
Referenced bycanHoistIVInc(), andmayUsePostIncMode().
bool TargetTransformInfo::isIndexedStoreLegal | ( | enumMemIndexedMode | Mode, |
Type * | Ty | ||
) | const |
Definition at line1307 of fileTargetTransformInfo.cpp.
Referenced bycanHoistIVInc(), andmayUsePostIncMode().
bool TargetTransformInfo::isLegalAddImmediate | ( | int64_t | Imm | ) | const |
Return true if the specified immediate is legal add immediate, that is the target has add instructions which can add a register with the immediate without having to materialize the immediate into a register.
Definition at line410 of fileTargetTransformInfo.cpp.
Referenced byisLegalAddImmediate().
bool TargetTransformInfo::isLegalAddressingMode | ( | Type * | Ty, |
GlobalValue * | BaseGV, | ||
int64_t | BaseOffset, | ||
bool | HasBaseReg, | ||
int64_t | Scale, | ||
unsigned | AddrSpace =0 , | ||
Instruction * | I =nullptr , | ||
int64_t | ScalableOffset =0 | ||
) | const |
Return true if the addressing mode represented by AM is legal for this target, for a load/store of the specified type.
The type may be VoidTy, in which case only return true if the addressing mode is legal for a load/store of any legal type. If target returns true inLSRWithInstrQueries(), I may be valid.
ScalableOffset | represents a quantity of bytes multiplied by vscale, an invariant value known only at runtime. Most targets should not accept a scalable offset. |
TODO: Handle pre/postinc as well.
Definition at line422 of fileTargetTransformInfo.cpp.
ReferencesI.
Referenced byisAddFoldable(),isAMCompletelyFolded(), andIsSimplerBaseSCEVForTarget().
bool TargetTransformInfo::isLegalAddScalableImmediate | ( | int64_t | Imm | ) | const |
Return true if adding the specified scalable immediate is legal, that is the target has add instructions which can add a register with the immediate (multiplied by vscale) without having to materialize the immediate into a register.
Definition at line414 of fileTargetTransformInfo.cpp.
Referenced byisLegalAddImmediate().
bool TargetTransformInfo::isLegalAltInstr | ( | VectorType * | VecTy, |
unsigned | Opcode0, | ||
unsigned | Opcode1, | ||
constSmallBitVector & | OpcodeMask | ||
) | const |
Return true if this is an alternating opcode pattern that can be lowered to a single instruction on the target.
InX86 this is for the addsub instruction which corrsponds to a Shuffle + Fadd + FSub pattern in IR. This function expectes two opcodes:Opcode1
andOpcode2
being selected byOpcodeMask
. The mask contains one bit per lane and is a0
whenOpcode0
is selected and1
when Opcode1 is selected.VecTy
is the vector type of the instruction to be generated.
Definition at line495 of fileTargetTransformInfo.cpp.
bool TargetTransformInfo::isLegalBroadcastLoad | ( | Type * | ElementTy, |
ElementCount | NumElements | ||
) | const |
\Returns true if the target supports broadcasting a load to a vector of type <NumElements x ElementTy>.
Definition at line485 of fileTargetTransformInfo.cpp.
bool TargetTransformInfo::isLegalICmpImmediate | ( | int64_t | Imm | ) | const |
Return true if the specified immediate is legal icmp immediate, that is the target has icmp instructions which can compare a register against the immediate without having to materialize the immediate into a register.
Definition at line418 of fileTargetTransformInfo.cpp.
Referenced byisAMCompletelyFolded().
bool TargetTransformInfo::isLegalInterleavedAccessType | ( | VectorType * | VTy, |
unsigned | Factor, | ||
Align | Alignment, | ||
unsigned | AddrSpace | ||
) | const |
Return true is the target supports interleaved access for the given vector typeVTy
, interleave factorFactor
, alignmentAlignment
and address spaceAddrSpace
.
Definition at line531 of fileTargetTransformInfo.cpp.
Referenced byllvm::slpvectorizer::BoUpSLP::transformNodes().
Return true if the target supports masked compress store.
Definition at line516 of fileTargetTransformInfo.cpp.
Referenced byoptimizeCallInst().
Return true if the target supports masked expand load.
Definition at line521 of fileTargetTransformInfo.cpp.
Referenced byoptimizeCallInst().
Return true if the target supports masked gather.
Definition at line490 of fileTargetTransformInfo.cpp.
Referenced byllvm::slpvectorizer::BoUpSLP::canVectorizeLoads(),llvm::LoopVectorizationCostModel::isLegalGatherOrScatter(),llvm::LoopVectorizationCostModel::isScalarWithPredication(), andoptimizeCallInst().
Return true if the target supports masked load.
Definition at line471 of fileTargetTransformInfo.cpp.
Referenced byllvm::LoopVectorizationCostModel::interleavedAccessCanBeWidened(),llvm::LoopVectorizationCostModel::isLegalMaskedLoad(), andoptimizeCallInst().
Return true if the target supports masked scatter.
Definition at line501 of fileTargetTransformInfo.cpp.
Referenced byllvm::LoopVectorizationCostModel::isLegalGatherOrScatter(),llvm::LoopVectorizationCostModel::isScalarWithPredication(), andoptimizeCallInst().
Return true if the target supports masked store.
Definition at line466 of fileTargetTransformInfo.cpp.
Referenced byllvm::LoopVectorizationCostModel::interleavedAccessCanBeWidened(),llvm::LoopVectorizationCostModel::isLegalMaskedStore(), andoptimizeCallInst().
Definition at line538 of fileTargetTransformInfo.cpp.
Referenced byoptimizeCallInst().
Return true if the target supports nontemporal load.
Definition at line481 of fileTargetTransformInfo.cpp.
Return true if the target supports nontemporal store.
Definition at line476 of fileTargetTransformInfo.cpp.
Return true if the target supports strided load.
Definition at line526 of fileTargetTransformInfo.cpp.
Referenced byllvm::slpvectorizer::BoUpSLP::canVectorizeLoads(), andllvm::slpvectorizer::BoUpSLP::transformNodes().
Definition at line1316 of fileTargetTransformInfo.cpp.
bool TargetTransformInfo::isLegalToVectorizeLoadChain | ( | unsigned | ChainSizeInBytes, |
Align | Alignment, | ||
unsigned | AddrSpace | ||
) | const |
Definition at line1324 of fileTargetTransformInfo.cpp.
bool TargetTransformInfo::isLegalToVectorizeReduction | ( | constRecurrenceDescriptor & | RdxDesc, |
ElementCount | VF | ||
) | const |
Definition at line1336 of fileTargetTransformInfo.cpp.
Definition at line1320 of fileTargetTransformInfo.cpp.
bool TargetTransformInfo::isLegalToVectorizeStoreChain | ( | unsigned | ChainSizeInBytes, |
Align | Alignment, | ||
unsigned | AddrSpace | ||
) | const |
Definition at line1330 of fileTargetTransformInfo.cpp.
Test whether calls to a function lower to actual program function calls.
The idea is to test whether the program is likely to require a 'call' instruction or equivalent in order to call the given function.
FIXME: It's not clear that this is a good or useful query API. Client's should probably move to simpler cost metrics using the above. Alternatively, we could split the cost interface into distinct code-size and execution-speed costs. This would allow modelling the core of this query more accurately as a call is a single small instruction, but incurs significant execution cost.
Definition at line352 of fileTargetTransformInfo.cpp.
ReferencesF.
Referenced byllvm::CodeMetrics::analyzeBasicBlock(),analyzeLoopUnrollCost(), andrunCGProfilePass().
bool TargetTransformInfo::isLSRCostLess | ( | constTargetTransformInfo::LSRCost & | C1, |
constTargetTransformInfo::LSRCost & | C2 | ||
) | const |
Return true if LSR cost of C1 is lower than C2.
Definition at line432 of fileTargetTransformInfo.cpp.
Returns true if this is an instance of a function with multiple versions.
Definition at line1390 of fileTargetTransformInfo.cpp.
ReferencesF.
Referenced bycollectVersions(), andOptimizeNonTrivialIFuncs().
Definition at line324 of fileTargetTransformInfo.cpp.
Referenced byisNoopPtrIntCastPair().
bool TargetTransformInfo::isNumRegsMajorCostOfLSR | ( | ) | const |
Return true if LSR major cost is number of registers.
Targets which implement their own isLSRCostLess and unset number of registers as major cost should return false, otherwise return true.
Definition at line437 of fileTargetTransformInfo.cpp.
bool TargetTransformInfo::isProfitableLSRChainElement | ( | Instruction * | I | ) | const |
I
.Definition at line445 of fileTargetTransformInfo.cpp.
ReferencesI.
Referenced byisProfitableChain().
bool TargetTransformInfo::isProfitableToHoist | ( | Instruction * | I | ) | const |
Return true if it is profitable to hoist instruction in the then/else to before if.
Definition at line577 of fileTargetTransformInfo.cpp.
ReferencesI.
Referenced byshouldHoistCommonInstructions().
bool TargetTransformInfo::isProfitableToSinkOperands | ( | Instruction * | I, |
SmallVectorImpl<Use * > & | Ops | ||
) | const |
Return true if sinking I's operands to the same basic block as I is profitable, e.g.
because the operands can be folded into a target instruction during instruction selection. After calling the functionOps
contains the Uses to sink ordered by dominance (dominating users come first).
Definition at line1429 of fileTargetTransformInfo.cpp.
ReferencesI.
bool TargetTransformInfo::isSingleThreaded | ( | ) | const |
Definition at line338 of fileTargetTransformInfo.cpp.
Returns whether V is a source of divergence.
This function provides the target-dependent information for the target-independent UniformityAnalysis.
Definition at line293 of fileTargetTransformInfo.cpp.
Referenced byllvm::GenericUniformityAnalysisImpl< ContextT >::initialize().
bool TargetTransformInfo::isTargetIntrinsicTriviallyScalarizable | ( | Intrinsic::ID | ID | ) | const |
Definition at line608 of fileTargetTransformInfo.cpp.
Referenced byllvm::isTriviallyScalarizable().
bool TargetTransformInfo::isTargetIntrinsicWithOverloadTypeAtArg | ( | Intrinsic::ID | ID, |
int | OpdIdx | ||
) | const |
Identifies if the vector form of the intrinsic is overloaded on the type of the operand at indexOpdIdx
, or on the return type ifOpdIdx
is -1.
Definition at line618 of fileTargetTransformInfo.cpp.
Referenced byllvm::isVectorIntrinsicWithOverloadTypeAtArg().
bool TargetTransformInfo::isTargetIntrinsicWithScalarOpAtArg | ( | Intrinsic::ID | ID, |
unsigned | ScalarOpdIdx | ||
) | const |
Identifies if the vector form of the intrinsic has a scalar operand.
Definition at line613 of fileTargetTransformInfo.cpp.
Referenced byllvm::isVectorIntrinsicWithScalarOpAtArg().
bool TargetTransformInfo::isTargetIntrinsicWithStructReturnOverloadAtField | ( | Intrinsic::ID | ID, |
int | RetIdx | ||
) | const |
Identifies if the vector form of the intrinsic that returns a struct is overloaded at the struct element indexRetIdx
.
Definition at line623 of fileTargetTransformInfo.cpp.
Referenced byllvm::isVectorIntrinsicWithStructReturnOverloadAtField().
Return true if it's free to truncate a value of type Ty1 to type Ty2.
e.g. On x86 it's free to truncate a i32 value in register EAX to i16 by referencing its sub-register AX.
Definition at line573 of fileTargetTransformInfo.cpp.
Referenced byllvm::LoopVectorizationCostModel::isOptimizableIVTruncate(), andllvm::SCEVExpander::replaceCongruentIVs().
Return true if this type is legal.
Definition at line583 of fileTargetTransformInfo.cpp.
Referenced byllvm::slpvectorizer::BoUpSLP::canVectorizeLoads(),llvm::computeMinimumValueSizes(),foldConsecutiveLoads(),isLoadCombineCandidateImpl(), andisTypeLegalForLookupTable().
Query the target whether the specified address space cast from FromAS to ToAS is valid.
Definition at line305 of fileTargetTransformInfo.cpp.
Referenced byllvm::expandMemMoveAsLoop(),llvm::InstCombiner::isValidAddrSpaceCast(), andtryInsertCastToCommonAddrSpace().
Return true if it's significantly cheaper to shift a vector by a uniform scalar than by an amount which will vary across each lane.
On x86 before AVX2 for example, there is a "psllw" instruction for the former case, but no simple instruction for a general "a << b" operation on vectors. This should also apply to lowering for vector funnel shifts (rotates).
Definition at line1434 of fileTargetTransformInfo.cpp.
bool TargetTransformInfo::isVScaleKnownToBeAPowerOfTwo | ( | ) | const |
Definition at line793 of fileTargetTransformInfo.cpp.
Referenced byllvm::LoopVectorizationCostModel::computeMaxVF().
bool TargetTransformInfo::LSRWithInstrQueries | ( | ) | const |
Return true if the loop strength reduce pass should make Instruction* based TTI queries toisLegalAddressingMode().
This is needed onSystemZ, where e.g. a memcpy can only have a 12 bit unsigned immediate offset and no index register.
Definition at line569 of fileTargetTransformInfo.cpp.
Referenced byisAMCompletelyFolded().
TargetTransformInfo & TargetTransformInfo::operator= | ( | TargetTransformInfo && | RHS | ) |
Definition at line210 of fileTargetTransformInfo.cpp.
ReferencesRHS.
bool TargetTransformInfo::preferEpilogueVectorization | ( | ) | const |
Return true if the loop vectorizer should consider vectorizing an otherwise scalar epilogue loop.
Definition at line1373 of fileTargetTransformInfo.cpp.
Referenced byllvm::LoopVectorizationCostModel::isEpilogueVectorizationProfitable().
bool TargetTransformInfo::preferFixedOverScalableIfEqualCost | ( | ) | const |
Definition at line1359 of fileTargetTransformInfo.cpp.
bool TargetTransformInfo::preferInLoopReduction | ( | unsigned | Opcode, |
Type * | Ty, | ||
ReductionFlags | Flags | ||
) | const |
Definition at line1363 of fileTargetTransformInfo.cpp.
Referenced byllvm::LoopVectorizationCostModel::collectElementTypesForWidening(), andllvm::LoopVectorizationCostModel::collectInLoopReductions().
bool TargetTransformInfo::preferPredicatedReductionSelect | ( | unsigned | Opcode, |
Type * | Ty, | ||
ReductionFlags | Flags | ||
) | const |
As opposed to the normal scheme of p = phi (0, a) which allows the select to be pulled out of the loop. If the select(.., add, ..) can be predicated by the target, this can lead to cleaner code generation.
Definition at line1368 of fileTargetTransformInfo.cpp.
Referenced byllvm::LoopVectorizationCostModel::usePredicatedReductionSelect().
bool TargetTransformInfo::preferPredicateOverEpilogue | ( | TailFoldingInfo * | TFI | ) | const |
Query the target whether it would be prefered to create a predicated vector loop, which can avoid the need to emit a scalar epilogue loop.
Definition at line366 of fileTargetTransformInfo.cpp.
Referenced bygetScalarEpilogueLowering().
bool TargetTransformInfo::prefersVectorizedAddressing | ( | ) | const |
Return true if target doesn't mind addresses in vectors.
Definition at line556 of fileTargetTransformInfo.cpp.
Referenced byllvm::LoopVectorizationCostModel::setCostBasedWideningDecision().
bool TargetTransformInfo::preferToKeepConstantsAttached | ( | constInstruction & | Inst, |
constFunction & | Fn | ||
) | const |
It can be advantageous to detach complex constants from their uses to make their generation cheaper.
This hook allows targets to report when such transformations might negatively effect the code generation of the underlying operation. The motivating example is divides whereby hoisting constants prevents the code generator's ability to transform them into combinations of simpler operations.
Definition at line754 of fileTargetTransformInfo.cpp.
| inlinestatic |
A helper function to determine the type of reduction algorithm used for a givenOpcode
and set ofFastMathFlagsFMF
.
Definition at line1552 of fileTargetTransformInfo.h.
Referenced byllvm::BasicTTIImplBase< T >::getArithmeticReductionCost(),llvm::AArch64TTIImpl::getArithmeticReductionCost(),llvm::GCNTTIImpl::getArithmeticReductionCost(),llvm::RISCVTTIImpl::getArithmeticReductionCost(),llvm::SystemZTTIImpl::getArithmeticReductionCost(),llvm::X86TTIImpl::getArithmeticReductionCost(), andllvm::ARMTTIImpl::getArithmeticReductionCost().
Value * TargetTransformInfo::rewriteIntrinsicWithAddressSpace | ( | IntrinsicInst * | II, |
Value * | OldV, | ||
Value * | NewV | ||
) | const |
Rewrite intrinsic callII
such thatOldV
will be replaced withNewV
, which has a different address space.
This should happen for every operand index that collectFlatAddressOperands returned for the intrinsic.
II
with modified operands).Definition at line347 of fileTargetTransformInfo.cpp.
ReferencesII.
bool TargetTransformInfo::shouldBuildLookupTables | ( | ) | const |
Return true if switches should be turned into lookup tables for the target.
Definition at line591 of fileTargetTransformInfo.cpp.
Referenced byswitchToLookupTable().
Return true if switches should be turned into lookup tables containing this constant value for the target.
Definition at line595 of fileTargetTransformInfo.cpp.
Referencesllvm::CallingConv::C.
Referenced byvalidLookupTableConstant().
bool TargetTransformInfo::shouldBuildRelLookupTables | ( | ) | const |
Return true if lookup tables should be turned into relative lookup tables.
Definition at line600 of fileTargetTransformInfo.cpp.
bool TargetTransformInfo::shouldConsiderAddressTypePromotion | ( | constInstruction & | I, |
bool & | AllowPromotionWithoutCommonHeader | ||
) | const |
AllowPromotionWithoutCommonHeader
Set true if promotingI
is profitable without finding other extensions fed by the same input.Definition at line817 of fileTargetTransformInfo.cpp.
ReferencesI.
bool TargetTransformInfo::shouldDropLSRSolutionIfLessProfitable | ( | ) | const |
Return true if LSR should drop a found solution if it's calculated to be less profitable than the baseline.
Definition at line441 of fileTargetTransformInfo.cpp.
bool TargetTransformInfo::shouldExpandReduction | ( | constIntrinsicInst * | II | ) | const |
Definition at line1398 of fileTargetTransformInfo.cpp.
ReferencesII.
bool TargetTransformInfo::shouldMaximizeVectorBandwidth | ( | TargetTransformInfo::RegisterKind | K | ) | const |
K
Register Kind for vectorization.Definition at line797 of fileTargetTransformInfo.cpp.
AS
.Definition at line862 of fileTargetTransformInfo.cpp.
bool TargetTransformInfo::shouldTreatInstructionLikeSelect | ( | constInstruction * | I | ) | const |
Should the Select Optimization pass treat the given instruction like a select, potentially converting it to a conditional branch.
This can include select-like instructions like or(zext(c), x) that can be converted to selects.
Definition at line667 of fileTargetTransformInfo.cpp.
ReferencesI.
std::optional<Value * > TargetTransformInfo::simplifyDemandedUseBitsIntrinsic | ( | InstCombiner & | IC, |
IntrinsicInst & | II, | ||
APInt | DemandedMask, | ||
KnownBits & | Known, | ||
bool & | KnownBitsComputed | ||
) | const |
Can be used to implement target-specific instruction combining.
Definition at line382 of fileTargetTransformInfo.cpp.
ReferencesII.
Referenced byllvm::InstCombiner::targetSimplifyDemandedUseBitsIntrinsic().
std::optional<Value * > TargetTransformInfo::simplifyDemandedVectorEltsIntrinsic | ( | InstCombiner & | IC, |
IntrinsicInst & | II, | ||
APInt | DemandedElts, | ||
APInt & | UndefElts, | ||
APInt & | UndefElts2, | ||
APInt & | UndefElts3, | ||
std::function< void(Instruction *,unsigned,APInt,APInt &)> | SimplifyAndSetOp | ||
) | const |
Can be used to implement target-specific instruction combining.
Definition at line389 of fileTargetTransformInfo.cpp.
ReferencesII.
Referenced byllvm::InstCombiner::targetSimplifyDemandedVectorEltsIntrinsic().
bool TargetTransformInfo::supportsEfficientVectorElementLoadStore | ( | ) | const |
If target has efficient vector element load/store instructions, it can return true here so that insertion/extraction costs are not added to the scalarization cost of a load/store.
Definition at line641 of fileTargetTransformInfo.cpp.
bool TargetTransformInfo::supportsScalableVectors | ( | ) | const |
Definition at line1416 of fileTargetTransformInfo.cpp.
Referenced byllvm::LoopVectorizationPlanner::planInVPlanNativePath().
If target supports tail call onCB
.
Definition at line649 of fileTargetTransformInfo.cpp.
Referenced byllvm::coro::BaseCloner::create(), andllvm::coro::createMustTailCall().
bool TargetTransformInfo::supportsTailCalls | ( | ) | const |
If the target supports tail calls.
Definition at line645 of fileTargetTransformInfo.cpp.
bool TargetTransformInfo::useAA | ( | ) | const |
Definition at line581 of fileTargetTransformInfo.cpp.
Return true if the input function which is cold at all call sites, should use coldcc calling convention.
Definition at line604 of fileTargetTransformInfo.cpp.
ReferencesF.
Referenced byOptimizeFunctions().