LLVM
8.0.1
|
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 |
If not nullptr, enable inline expansion of memcmp. More... | |
struct | ReductionFlags |
Flags describing the kind of vector reduction. More... | |
struct | UnrollingPreferences |
Parameters that control the generic loop unrolling transformation. More... | |
Public Member Functions | |
template<typename T > | |
TargetTransformInfo (T Impl) | |
Construct a TTI object using a type implementing the Concept API below. More... | |
TargetTransformInfo (const DataLayout &DL) | |
Construct a baseline TTI object using a minimal implementation of the Concept API below. More... | |
TargetTransformInfo (TargetTransformInfo &&Arg) | |
TargetTransformInfo & | operator= (TargetTransformInfo &&RHS) |
~TargetTransformInfo () | |
bool | invalidate (Function &, const PreservedAnalyses &, FunctionAnalysisManager::Invalidator &) |
Handle the invalidation of this information. More... | |
Generic Target Information | |
enum | TargetCostKind { TCK_RecipThroughput, TCK_Latency, TCK_CodeSize } |
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... | |
int | getInstructionCost (const Instruction *I, enum TargetCostKind kind) const |
Query the cost of a specified instruction. More... | |
int | getOperationCost (unsigned Opcode, Type *Ty, Type *OpTy=nullptr) const |
Estimate the cost of a specific operation when lowered. More... | |
int | getGEPCost (Type *PointeeType, const Value *Ptr, ArrayRef< const Value *> Operands) const |
Estimate the cost of a GEP operation when lowered. More... | |
int | getExtCost (const Instruction *I, const Value *Src) const |
Estimate the cost of a EXT operation when lowered. More... | |
int | getCallCost (FunctionType *FTy, int NumArgs=-1) const |
Estimate the cost of a function call when lowered. More... | |
int | getCallCost (const Function *F, int NumArgs=-1) const |
Estimate the cost of calling a specific function when lowered. More... | |
int | getCallCost (const Function *F, ArrayRef< const Value *> Arguments) const |
Estimate the cost of calling a specific function when lowered. More... | |
unsigned | getInliningThresholdMultiplier () const |
int | getIntrinsicCost (Intrinsic::ID IID, Type *RetTy, ArrayRef< Type *> ParamTys) const |
Estimate the cost of an intrinsic when lowered. More... | |
int | getIntrinsicCost (Intrinsic::ID IID, Type *RetTy, ArrayRef< const Value *> Arguments) const |
Estimate the cost of an intrinsic when lowered. More... | |
unsigned | getEstimatedNumberOfCaseClusters (const SwitchInst &SI, unsigned &JTSize) const |
int | getUserCost (const User *U, ArrayRef< const Value *> Operands) const |
Estimate the cost of a given IR user when lowered. More... | |
int | getUserCost (const User *U) const |
This is a helper function which calls the two-argument getUserCost with Operands which are the current operands U has. More... | |
bool | hasBranchDivergence () const |
Return true if branch divergence exists. More... | |
bool | isSourceOfDivergence (const Value *V) const |
Returns whether V is a source of divergence. More... | |
bool | isAlwaysUniform (const Value *V) const |
unsigned | getFlatAddressSpace () const |
Returns the address space ID for a target's 'flat' address space. More... | |
bool | isLoweredToCall (const Function *F) const |
Test whether calls to a function lower to actual program function calls. More... | |
void | getUnrollingPreferences (Loop *L, ScalarEvolution &, UnrollingPreferences &UP) const |
Get target-customized preferences for the generic loop unrolling transformation. More... | |
Scalar Target Information | |
enum | PopcntSupportKind { PSK_Software, PSK_SlowHardware, PSK_FastHardware } |
Flags indicating the kind of support for population count. More... | |
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. More... | |
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. More... | |
bool | isLegalAddressingMode (Type *Ty, GlobalValue *BaseGV, int64_t BaseOffset, bool HasBaseReg, int64_t Scale, unsigned AddrSpace=0, Instruction *I=nullptr) const |
Return true if the addressing mode represented by AM is legal for this target, for a load/store of the specified type. More... | |
bool | isLSRCostLess (TargetTransformInfo::LSRCost &C1, TargetTransformInfo::LSRCost &C2) const |
Return true if LSR cost of C1 is lower than C1. More... | |
bool | canMacroFuseCmp () const |
Return true if the target can fuse a compare and branch. More... | |
bool | shouldFavorPostInc () const |
bool | isLegalMaskedStore (Type *DataType) const |
Return true if the target supports masked load/store AVX2 and AVX-512 targets allow masks for consecutive load and store. More... | |
bool | isLegalMaskedLoad (Type *DataType) const |
bool | isLegalMaskedScatter (Type *DataType) const |
Return true if the target supports masked gather/scatter AVX-512 fully supports gather and scatter for vectors with 32 and 64 bits scalar type. More... | |
bool | isLegalMaskedGather (Type *DataType) const |
bool | hasDivRemOp (Type *DataType, bool IsSigned) const |
Return true if the target has a unified operation to calculate division and remainder. More... | |
bool | hasVolatileVariant (Instruction *I, unsigned AddrSpace) const |
Return true if the given instruction (assumed to be a memory access instruction) has a volatile variant. More... | |
bool | prefersVectorizedAddressing () const |
Return true if target doesn't mind addresses in vectors. More... | |
int | getScalingFactorCost (Type *Ty, GlobalValue *BaseGV, int64_t 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. More... | |
bool | LSRWithInstrQueries () const |
Return true if the loop strength reduce pass should make Instruction* based TTI queries to isLegalAddressingMode(). More... | |
bool | isTruncateFree (Type *Ty1, Type *Ty2) const |
Return true if it's free to truncate a value of type Ty1 to type Ty2. More... | |
bool | isProfitableToHoist (Instruction *I) const |
Return true if it is profitable to hoist instruction in the then/else to before if. More... | |
bool | useAA () const |
bool | isTypeLegal (Type *Ty) const |
Return true if this type is legal. More... | |
unsigned | getJumpBufAlignment () const |
Returns the target's jmp_buf alignment in bytes. More... | |
unsigned | getJumpBufSize () const |
Returns the target's jmp_buf size in bytes. More... | |
bool | shouldBuildLookupTables () const |
Return true if switches should be turned into lookup tables for the target. More... | |
bool | shouldBuildLookupTablesForConstant (Constant *C) const |
Return true if switches should be turned into lookup tables containing this constant value for the target. More... | |
bool | useColdCCForColdCall (Function &F) const |
Return true if the input function which is cold at all call sites, should use coldcc calling convention. More... | |
unsigned | getScalarizationOverhead (Type *Ty, bool Insert, bool Extract) const |
unsigned | getOperandsScalarizationOverhead (ArrayRef< const Value *> Args, unsigned VF) const |
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. More... | |
bool | enableAggressiveInterleaving (bool LoopHasReductions) const |
Don't restrict interleaved unrolling to small loops. More... | |
const MemCmpExpansionOptions * | enableMemCmpExpansion (bool IsZeroCmp) const |
bool | enableInterleavedAccessVectorization () const |
Enable matching of interleaved access groups. More... | |
bool | enableMaskedInterleavedAccessVectorization () const |
Enable matching of interleaved access groups that contain predicated accesses or gaps and therefore vectorized using masked vector loads/stores. More... | |
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. More... | |
bool | allowsMisalignedMemoryAccesses (LLVMContext &Context, unsigned BitWidth, unsigned AddressSpace=0, unsigned Alignment=1, bool *Fast=nullptr) const |
Determine if the target supports unaligned memory accesses. More... | |
PopcntSupportKind | getPopcntSupport (unsigned IntTyWidthInBit) const |
Return hardware support for population count. More... | |
bool | haveFastSqrt (Type *Ty) const |
Return true if the hardware has a fast square-root instruction. More... | |
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. More... | |
int | getFPOpCost (Type *Ty) const |
Return the expected cost of supporting the floating point operation of the specified type. More... | |
int | getIntImmCost (const APInt &Imm, Type *Ty) const |
Return the expected cost of materializing for the given integer immediate of the specified type. More... | |
int | getIntImmCost (unsigned Opc, unsigned Idx, const APInt &Imm, Type *Ty) const |
Return the expected cost of materialization for the given integer immediate of the specified type for a given instruction. More... | |
int | getIntImmCost (Intrinsic::ID IID, unsigned Idx, const APInt &Imm, Type *Ty) const |
int | getIntImmCodeSizeCost (unsigned Opc, unsigned Idx, const APInt &Imm, Type *Ty) const |
Return the expected cost for the given integer when optimising for size. More... | |
This pass provides access to the codegen interfaces that are needed for IR-level transformations.
Definition at line 78 of file TargetTransformInfo.h.
|
strong |
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 line 946 of file TargetTransformInfo.h.
Additional information about an operand's possible values.
Enumerator | |
---|---|
OK_AnyValue | |
OK_UniformValue | |
OK_UniformConstantValue | |
OK_NonUniformConstantValue |
Definition at line 673 of file TargetTransformInfo.h.
Additional properties of an operand's values.
Enumerator | |
---|---|
OP_None | |
OP_PowerOf2 |
Definition at line 681 of file TargetTransformInfo.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 line 453 of file TargetTransformInfo.h.
The various kinds of shuffle patterns for vector queries.
Definition at line 657 of file TargetTransformInfo.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 line 166 of file TargetTransformInfo.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.
Enumerator | |
---|---|
TCK_RecipThroughput | Reciprocal throughput. |
TCK_Latency | The latency of instruction. |
TCK_CodeSize | Instruction code size. |
Definition at line 121 of file TargetTransformInfo.h.
llvm::TargetTransformInfo::TargetTransformInfo | ( | T | Impl | ) |
Construct a TTI object using a type implementing the Concept
API below.
This is used by targets to construct a TTI wrapping their target-specific implementaion that encodes appropriate costs for their target.
Definition at line 1626 of file TargetTransformInfo.h.
|
explicit |
Construct a baseline TTI object using a minimal implementation of the Concept
API below.
The TTI implementation will reflect the information in the DataLayout provided if non-null.
Definition at line 44 of file TargetTransformInfo.cpp.
TargetTransformInfo::TargetTransformInfo | ( | TargetTransformInfo && | Arg | ) |
Definition at line 49 of file TargetTransformInfo.cpp.
TargetTransformInfo::~TargetTransformInfo | ( | ) |
Definition at line 47 of file TargetTransformInfo.cpp.
bool TargetTransformInfo::allowsMisalignedMemoryAccesses | ( | LLVMContext & | Context, |
unsigned | BitWidth, | ||
unsigned | AddressSpace = 0 , |
||
unsigned | Alignment = 1 , |
||
bool * | Fast = nullptr |
||
) | const |
Determine if the target supports unaligned memory accesses.
Definition at line 279 of file TargetTransformInfo.cpp.
bool TargetTransformInfo::areFunctionArgsABICompatible | ( | const Function * | Caller, |
const Function * | Callee, | ||
SmallPtrSetImpl< Argument *> & | Args | ||
) | const |
Args
will be passed to the callee. [out] | Args | The list of compatible arguments. The implementation may filter out any incompatible args from this list. |
Definition at line 628 of file TargetTransformInfo.cpp.
Referenced by areFunctionArgsABICompatible().
bool TargetTransformInfo::areInlineCompatible | ( | const Function * | Caller, |
const Function * | Callee | ||
) | const |
Definition at line 623 of file TargetTransformInfo.cpp.
Referenced by functionsHaveCompatibleAttributes(), and isWrapperOnlyCall().
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 line 158 of file TargetTransformInfo.cpp.
Referenced by DeleteTriviallyDeadInstructions().
Don't restrict interleaved unrolling to small loops.
Definition at line 258 of file TargetTransformInfo.cpp.
Referenced by llvm::LoopVectorizationCostModel::selectInterleaveCount().
bool TargetTransformInfo::enableInterleavedAccessVectorization | ( | ) | const |
Enable matching of interleaved access groups.
Definition at line 267 of file TargetTransformInfo.cpp.
Referenced by llvm::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 line 271 of file TargetTransformInfo.cpp.
Referenced by useMaskedInterleavedAccesses().
const TargetTransformInfo::MemCmpExpansionOptions * TargetTransformInfo::enableMemCmpExpansion | ( | bool | IsZeroCmp | ) | const |
Definition at line 263 of file TargetTransformInfo.cpp.
int TargetTransformInfo::getAddressComputationCost | ( | Type * | Ty, |
ScalarEvolution * | SE = nullptr , |
||
const SCEV * | Ptr = nullptr |
||
) | const |
Definition at line 565 of file TargetTransformInfo.cpp.
References assert().
Referenced by chainToBasePointerCost(), and isStrideMul().
int TargetTransformInfo::getArithmeticInstrCost | ( | unsigned | Opcode, |
Type * | Ty, | ||
OperandValueKind | Opd1Info = OK_AnyValue , |
||
OperandValueKind | Opd2Info = OK_AnyValue , |
||
OperandValueProperties | Opd1PropInfo = OP_None , |
||
OperandValueProperties | Opd2PropInfo = OP_None , |
||
ArrayRef< const Value *> | Args = ArrayRef<const Value *>() |
||
) | 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 of clock cycles per instruction when the instructions are not part of a limiting 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.
Definition at line 440 of file TargetTransformInfo.cpp.
References assert().
Referenced by createRdxShuffleMask(), isBroadcastShuffle(), matchVectorSplittingReduction(), llvm::LoopVectorizationCostModel::setCostBasedWideningDecision(), and visitIVCast().
int TargetTransformInfo::getArithmeticReductionCost | ( | unsigned | Opcode, |
Type * | Ty, | ||
bool | IsPairwiseForm | ||
) | const |
Calculate the cost of performing a vector reduction.
This is the cost of reducing the vector value of type Ty
to a scalar value using the operation denoted by Opcode
. The form of the reduction can either be a pairwise reduction or a reduction that splits the vector at every reduction level.
Pairwise: (v0, v1, v2, v3) ((v0+v1), (v2+v3), undef, undef) Split: (v0, v1, v2, v3) ((v0+v2), (v1+v3), undef, undef)
Definition at line 573 of file TargetTransformInfo.cpp.
References assert().
Referenced by createRdxShuffleMask(), and matchVectorSplittingReduction().
unsigned TargetTransformInfo::getAtomicMemIntrinsicMaxElementSize | ( | ) | const |
Definition at line 599 of file TargetTransformInfo.cpp.
llvm::Optional< unsigned > TargetTransformInfo::getCacheAssociativity | ( | CacheLevel | Level | ) | const |
Definition at line 370 of file TargetTransformInfo.cpp.
unsigned TargetTransformInfo::getCacheLineSize | ( | ) | const |
Definition at line 361 of file TargetTransformInfo.cpp.
llvm::Optional< unsigned > TargetTransformInfo::getCacheSize | ( | CacheLevel | Level | ) | const |
Definition at line 365 of file TargetTransformInfo.cpp.
int TargetTransformInfo::getCallCost | ( | FunctionType * | FTy, |
int | NumArgs = -1 |
||
) | const |
Estimate the cost of a function call when lowered.
The contract for this is the same as getOperationCost
except that it supports an interface that provides extra information specific to call instructions.
This is the most basic query for estimating call cost: it only knows the function type and (potentially) the number of arguments at the call site. The latter is only interesting for varargs function types.
Definition at line 64 of file TargetTransformInfo.cpp.
References assert().
Estimate the cost of calling a specific function when lowered.
This overload adds the ability to reason about the particular function being called in the event it is a library call with special lowering.
int TargetTransformInfo::getCallCost | ( | const Function * | F, |
ArrayRef< const Value *> | Arguments | ||
) | const |
Estimate the cost of calling a specific function when lowered.
This overload allows specifying a set of candidate argument values.
Definition at line 70 of file TargetTransformInfo.cpp.
References assert().
int TargetTransformInfo::getCallInstrCost | ( | Function * | F, |
Type * | RetTy, | ||
ArrayRef< Type *> | Tys | ||
) | const |
Definition at line 554 of file TargetTransformInfo.cpp.
References assert().
Referenced by getVectorCallCost().
int TargetTransformInfo::getCastInstrCost | ( | unsigned | Opcode, |
Type * | Dst, | ||
Type * | Src, | ||
const Instruction * | I = nullptr |
||
) | const |
Definition at line 458 of file TargetTransformInfo.cpp.
References assert(), and llvm::Instruction::getOpcode().
Referenced by chainToBasePointerCost(), matchVectorSplittingReduction(), and llvm::LoopVectorizationCostModel::setCostBasedWideningDecision().
int TargetTransformInfo::getCFInstrCost | ( | unsigned | Opcode | ) | const |
Definition at line 475 of file TargetTransformInfo.cpp.
References assert().
Referenced by llvm::LoopVectorizationCostModel::collectInstsToScalarize(), matchVectorSplittingReduction(), and llvm::LoopVectorizationCostModel::setCostBasedWideningDecision().
int TargetTransformInfo::getCmpSelInstrCost | ( | unsigned | Opcode, |
Type * | ValTy, | ||
Type * | CondTy = nullptr , |
||
const Instruction * | I = nullptr |
||
) | const |
Definition at line 481 of file TargetTransformInfo.cpp.
References assert(), and llvm::Instruction::getOpcode().
Referenced by createRdxShuffleMask(), matchVectorSplittingReduction(), and llvm::LoopVectorizationCostModel::setCostBasedWideningDecision().
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 line 590 of file TargetTransformInfo.cpp.
unsigned TargetTransformInfo::getEstimatedNumberOfCaseClusters | ( | const SwitchInst & | SI, |
unsigned & | JTSize | ||
) | const |
'SI'
. JTSize
Set a jump table size only when SI
is suitable for a jump table. Definition at line 99 of file TargetTransformInfo.cpp.
int TargetTransformInfo::getExtCost | ( | const Instruction * | I, |
const Value * | Src | ||
) | const |
Estimate the cost of a EXT operation when lowered.
The contract for this function is the same as getOperationCost
except that it supports an interface that provides extra information specific to the EXT operation.
Definition at line 86 of file TargetTransformInfo.cpp.
int TargetTransformInfo::getExtractWithExtendCost | ( | unsigned | Opcode, |
Type * | Dst, | ||
VectorType * | VecTy, | ||
unsigned | Index = -1 |
||
) | const |
Definition at line 467 of file TargetTransformInfo.cpp.
References assert().
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 line 123 of file TargetTransformInfo.cpp.
Referenced by cloneConstantExprWithNewAddressSpace().
int TargetTransformInfo::getFPOpCost | ( | Type * | Ty | ) | const |
Return the expected cost of supporting the floating point operation of the specified type.
Definition at line 301 of file TargetTransformInfo.cpp.
References assert().
int TargetTransformInfo::getGatherScatterOpCost | ( | unsigned | Opcode, |
Type * | DataTy, | ||
Value * | Ptr, | ||
bool | VariableMask, | ||
unsigned | Alignment | ||
) | const |
Opcode
- is a type of memory access Load or Store DataTy
- a vector type of the data to be loaded or stored Ptr
- pointer [or vector of pointers] - address[es] in memory VariableMask
- true when the memory access is predicated with a mask that is not a compile-time constant Alignment
- alignment of single element Definition at line 517 of file TargetTransformInfo.cpp.
References assert().
Referenced by isStrideMul().
int TargetTransformInfo::getGEPCost | ( | Type * | PointeeType, |
const Value * | Ptr, | ||
ArrayRef< const Value *> | Operands | ||
) | const |
Estimate the cost of a GEP operation when lowered.
The contract for this function is the same as getOperationCost
except that it supports an interface that provides extra information specific to the GEP operation.
Definition at line 81 of file TargetTransformInfo.cpp.
Referenced by isGEPFoldable().
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 line 77 of file TargetTransformInfo.cpp.
|
inline |
Query the cost of a specified instruction.
Clients should use this interface to query the cost of an existing instruction. The instruction must have a valid parent (basic block).
Note, this method does not cache the cost calculation and it can be expensive in some cases.
Definition at line 134 of file TargetTransformInfo.h.
References llvm_unreachable.
Referenced by canSplitCallSite().
int TargetTransformInfo::getInterleavedMemoryOpCost | ( | unsigned | Opcode, |
Type * | VecTy, | ||
unsigned | Factor, | ||
ArrayRef< unsigned > | Indices, | ||
unsigned | Alignment, | ||
unsigned | AddressSpace, | ||
bool | UseMaskForCond = false , |
||
bool | UseMaskForGaps = false |
||
) | const |
Opcode
is the memory operation code VecTy
is the vector type of the interleaved access. Factor
is the interleave factor Indices
is the indices for interleaved load members (as interleaved load allows gaps) Alignment
is the alignment of the memory operation AddressSpace
is address space of the pointer. UseMaskForCond
indicates if the memory access is predicated. UseMaskForGaps
indicates if gaps should be masked. Definition at line 526 of file TargetTransformInfo.cpp.
References assert().
Referenced by isStrideMul().
int TargetTransformInfo::getIntImmCodeSizeCost | ( | unsigned | Opc, |
unsigned | Idx, | ||
const APInt & | 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 line 307 of file TargetTransformInfo.cpp.
References assert().
Return the expected cost of materializing for the given integer immediate of the specified type.
Definition at line 315 of file TargetTransformInfo.cpp.
References assert().
Referenced by isSafeAndProfitableToSpeculateAroundPHI(), and tryUnmergingGEPsAcrossIndirectBr().
int TargetTransformInfo::getIntImmCost | ( | unsigned | Opc, |
unsigned | Idx, | ||
const APInt & | Imm, | ||
Type * | Ty | ||
) | 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 line 321 of file TargetTransformInfo.cpp.
References assert().
int TargetTransformInfo::getIntImmCost | ( | Intrinsic::ID | IID, |
unsigned | Idx, | ||
const APInt & | Imm, | ||
Type * | Ty | ||
) | const |
Definition at line 328 of file TargetTransformInfo.cpp.
References assert().
int llvm::TargetTransformInfo::getIntrinsicCost | ( | Intrinsic::ID | IID, |
Type * | RetTy, | ||
ArrayRef< Type *> | ParamTys | ||
) | const |
Estimate the cost of an intrinsic when lowered.
Mirrors the getCallCost
method but uses an intrinsic identifier.
Referenced by detectShiftUntilZeroIdiom().
int TargetTransformInfo::getIntrinsicCost | ( | Intrinsic::ID | IID, |
Type * | RetTy, | ||
ArrayRef< const Value *> | Arguments | ||
) | const |
Estimate the cost of an intrinsic when lowered.
Mirrors the getCallCost
method but uses an intrinsic identifier.
Definition at line 91 of file TargetTransformInfo.cpp.
References assert().
int TargetTransformInfo::getIntrinsicInstrCost | ( | Intrinsic::ID | ID, |
Type * | RetTy, | ||
ArrayRef< Value *> | Args, | ||
FastMathFlags | FMF, | ||
unsigned | VF = 1 |
||
) | const |
Definition at line 547 of file TargetTransformInfo.cpp.
References assert().
Referenced by getVectorIntrinsicCost(), and matchVectorSplittingReduction().
int TargetTransformInfo::getIntrinsicInstrCost | ( | Intrinsic::ID | ID, |
Type * | RetTy, | ||
ArrayRef< Type *> | Tys, | ||
FastMathFlags | FMF, | ||
unsigned | ScalarizationCostPassed = UINT_MAX |
||
) | const |
Definition at line 538 of file TargetTransformInfo.cpp.
References assert().
unsigned TargetTransformInfo::getJumpBufAlignment | ( | ) | const |
Returns the target's jmp_buf alignment in bytes.
Definition at line 224 of file TargetTransformInfo.cpp.
unsigned TargetTransformInfo::getJumpBufSize | ( | ) | const |
Returns the target's jmp_buf size in bytes.
Definition at line 228 of file TargetTransformInfo.cpp.
Definition at line 644 of file TargetTransformInfo.cpp.
unsigned TargetTransformInfo::getLoadVectorFactor | ( | unsigned | VF, |
unsigned | LoadSize, | ||
unsigned | ChainSizeInBytes, | ||
VectorType * | VecTy | ||
) | const |
SizeInBytes
loads or has a better vector factor. Definition at line 668 of file TargetTransformInfo.cpp.
int TargetTransformInfo::getMaskedMemoryOpCost | ( | unsigned | Opcode, |
Type * | Src, | ||
unsigned | Alignment, | ||
unsigned | AddressSpace | ||
) | const |
Definition at line 508 of file TargetTransformInfo.cpp.
References assert().
Referenced by isStrideMul().
Definition at line 387 of file TargetTransformInfo.cpp.
Referenced by llvm::LoopVectorizePass::runImpl(), and llvm::LoopVectorizationCostModel::selectInterleaveCount().
unsigned TargetTransformInfo::getMaxPrefetchIterationsAhead | ( | ) | const |
Definition at line 383 of file TargetTransformInfo.cpp.
Type * TargetTransformInfo::getMemcpyLoopLoweringType | ( | LLVMContext & | Context, |
Value * | Length, | ||
unsigned | SrcAlign, | ||
unsigned | DestAlign | ||
) | const |
Definition at line 608 of file TargetTransformInfo.cpp.
Referenced by llvm::createMemCpyLoopKnownSize(), and llvm::createMemCpyLoopUnknownSize().
void TargetTransformInfo::getMemcpyLoopResidualLoweringType | ( | SmallVectorImpl< Type *> & | OpsOut, |
LLVMContext & | Context, | ||
unsigned | RemainingBytes, | ||
unsigned | SrcAlign, | ||
unsigned | DestAlign | ||
) | 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 copying RemainingBytes
of memory, where source and destination alignments are SrcAlign
and DestAlign
respectively.
Definition at line 616 of file TargetTransformInfo.cpp.
Referenced by llvm::createMemCpyLoopKnownSize().
int TargetTransformInfo::getMemoryOpCost | ( | unsigned | Opcode, |
Type * | Src, | ||
unsigned | Alignment, | ||
unsigned | AddressSpace, | ||
const Instruction * | I = nullptr |
||
) | const |
Definition at line 497 of file TargetTransformInfo.cpp.
References assert(), and llvm::Instruction::getOpcode().
Referenced by isStrideMul(), and matchVectorSplittingReduction().
Definition at line 351 of file TargetTransformInfo.cpp.
Referenced by llvm::LoopVectorizationCostModel::computeMaxVF().
int TargetTransformInfo::getMinMaxReductionCost | ( | Type * | Ty, |
Type * | CondTy, | ||
bool | IsPairwiseForm, | ||
bool | IsUnsigned | ||
) | const |
Definition at line 580 of file TargetTransformInfo.cpp.
References assert().
Referenced by createRdxShuffleMask(), and matchVectorSplittingReduction().
unsigned TargetTransformInfo::getMinPrefetchStride | ( | ) | const |
Definition at line 379 of file TargetTransformInfo.cpp.
unsigned TargetTransformInfo::getMinVectorRegisterBitWidth | ( | ) | const |
Definition at line 343 of file TargetTransformInfo.cpp.
Definition at line 561 of file TargetTransformInfo.cpp.
Referenced by isStrideMul().
Definition at line 335 of file TargetTransformInfo.cpp.
Referenced by llvm::LoopVectorizationCostModel::computeMaxVF(), DeleteTriviallyDeadInstructions(), llvm::LoopVectorizePass::runImpl(), and llvm::LoopVectorizationCostModel::selectInterleaveCount().
|
static |
Collect properties of V used in cost analysis, e.g. OP_PowerOf2.
Definition at line 392 of file TargetTransformInfo.cpp.
References E, llvm::getSplatValue(), I, OK_AnyValue, OK_NonUniformConstantValue, OK_UniformConstantValue, OK_UniformValue, OP_None, and OP_PowerOf2.
Referenced by llvm::BasicTTIImplBase< AMDGPUTTIImpl >::getIntrinsicInstrCost(), matchVectorSplittingReduction(), and llvm::LoopVectorizationCostModel::setCostBasedWideningDecision().
unsigned TargetTransformInfo::getOperandsScalarizationOverhead | ( | ArrayRef< const Value *> | Args, |
unsigned | VF | ||
) | const |
Definition at line 249 of file TargetTransformInfo.cpp.
Referenced by getScalarizationOverhead(), and getScalarizationOverhead().
int TargetTransformInfo::getOperationCost | ( | unsigned | Opcode, |
Type * | Ty, | ||
Type * | OpTy = nullptr |
||
) | const |
Estimate the cost of a specific operation when lowered.
Note that this is designed to work on an arbitrary synthetic opcode, and thus work for hypothetical queries before an instruction has even been formed. However, this does not work for GEPs, and must not be called for a GEP instruction. Instead, use the dedicated getGEPCost interface as analyzing a GEP's cost required more information.
Typically only the result type is required, and the operand type can be omitted. However, if the opcode is one of the cast instructions, the operand type is required.
The returned cost is defined in terms of TargetCostConstants
, see its comments for a detailed explanation of the cost values.
Definition at line 57 of file TargetTransformInfo.cpp.
References assert().
Value * TargetTransformInfo::getOrCreateResultFromMemIntrinsic | ( | IntrinsicInst * | Inst, |
Type * | ExpectedType | ||
) | const |
Definition at line 603 of file TargetTransformInfo.cpp.
TargetTransformInfo::PopcntSupportKind TargetTransformInfo::getPopcntSupport | ( | unsigned | IntTyWidthInBit | ) | const |
Return hardware support for population count.
Definition at line 289 of file TargetTransformInfo.cpp.
Referenced by detectShiftUntilZeroIdiom().
unsigned TargetTransformInfo::getPrefetchDistance | ( | ) | const |
Definition at line 375 of file TargetTransformInfo.cpp.
Definition at line 339 of file TargetTransformInfo.cpp.
Referenced by llvm::LoopVectorizationCostModel::calculateRegisterUsage(), and llvm::LoopVectorizationCostModel::computeMaxVF().
unsigned TargetTransformInfo::getScalarizationOverhead | ( | Type * | Ty, |
bool | Insert, | ||
bool | Extract | ||
) | const |
Definition at line 244 of file TargetTransformInfo.cpp.
References getOperandsScalarizationOverhead().
Referenced by llvm::LoopVectorizationCostModel::collectInstsToScalarize(), getScalarizationOverhead(), llvm::LoopVectorizationCostModel::setCostBasedWideningDecision(), and useColdCCForColdCall().
int TargetTransformInfo::getScalingFactorCost | ( | Type * | Ty, |
GlobalValue * | BaseGV, | ||
int64_t | 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 line 195 of file TargetTransformInfo.cpp.
References assert().
Referenced by getScalingFactorCost().
int TargetTransformInfo::getShuffleCost | ( | ShuffleKind | Kind, |
Type * | Tp, | ||
int | Index = 0 , |
||
Type * | SubTp = nullptr |
||
) | const |
Definition at line 451 of file TargetTransformInfo.cpp.
References assert().
Referenced by isStrideMul(), and llvm::LoopVectorizationCostModel::setCostBasedWideningDecision().
unsigned TargetTransformInfo::getStoreVectorFactor | ( | unsigned | VF, |
unsigned | StoreSize, | ||
unsigned | ChainSizeInBytes, | ||
VectorType * | VecTy | ||
) | const |
SizeInBytes
stores or has a better vector factor. Definition at line 675 of file TargetTransformInfo.cpp.
bool TargetTransformInfo::getTgtMemIntrinsic | ( | IntrinsicInst * | Inst, |
MemIntrinsicInfo & | Info | ||
) | const |
Definition at line 594 of file TargetTransformInfo.cpp.
Referenced by getAccessType(), and isAddressUse().
void TargetTransformInfo::getUnrollingPreferences | ( | Loop * | L, |
ScalarEvolution & | SE, | ||
UnrollingPreferences & | UP | ||
) | const |
Get target-customized preferences for the generic loop unrolling transformation.
The caller will initialize UP with the current target-independent defaults.
Definition at line 131 of file TargetTransformInfo.cpp.
Referenced by llvm::gatherUnrollingPreferences().
Estimate the cost of a given IR user when lowered.
This can estimate the cost of either a ConstantExpr or Instruction when lowered. It has two primary advantages over the getOperationCost
and getGEPCost
above, and one significant disadvantage: it can only be used when the IR construct has already been formed.
The advantages are that it can inspect the SSA use graph to reason more accurately about the cost. For example, all-constant-GEPs can often be folded into a load or other instruction, but if they are used in some other context they may not be folded. This routine can distinguish such cases.
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 of TargetCostConstants
, see its comments for a detailed explanation of the cost values.
Definition at line 104 of file TargetTransformInfo.cpp.
References assert().
Referenced by llvm::CodeMetrics::analyzeBasicBlock(), analyzeLoopUnrollCost(), llvm::ComputeSpeculationCost(), ComputeSpeculationCost(), findProfitablePHIs(), isFreeInLoop(), matchVectorSplittingReduction(), sinkSelectOperand(), and unswitchBestCondition().
This is a helper function which calls the two-argument getUserCost with Operands
which are the current operands U has.
Definition at line 276 of file TargetTransformInfo.h.
References F(), llvm::User::value_op_begin(), and llvm::User::value_op_end().
int TargetTransformInfo::getVectorInstrCost | ( | unsigned | Opcode, |
Type * | Val, | ||
unsigned | Index = -1 |
||
) | const |
Definition at line 490 of file TargetTransformInfo.cpp.
References assert().
Referenced by findBuildVector(), isBroadcastShuffle(), isStrideMul(), and matchVectorSplittingReduction().
bool TargetTransformInfo::hasBranchDivergence | ( | ) | const |
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.
Definition at line 111 of file TargetTransformInfo.cpp.
Referenced by llvm::LoopVectorizationCostModel::computeMaxVF(), llvm::SpeculativeExecutionPass::runImpl(), and llvm::LegacyDivergenceAnalysis::runOnFunction().
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 line 182 of file TargetTransformInfo.cpp.
Referenced by optimizeDivRem().
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 line 186 of file TargetTransformInfo.cpp.
Referenced by isSimplePointerUseValidToReplace().
Return true if the hardware has a fast square-root instruction.
Definition at line 293 of file TargetTransformInfo.cpp.
Referenced by runPartiallyInlineLibCalls().
|
inline |
Handle the invalidation of this information.
When used as a result of TargetIRAnalysis
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 line 107 of file TargetTransformInfo.h.
Definition at line 119 of file TargetTransformInfo.cpp.
Referenced by llvm::GPUDivergenceAnalysis::GPUDivergenceAnalysis().
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 line 297 of file TargetTransformInfo.cpp.
Referenced by optimizeSQRT().
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 line 275 of file TargetTransformInfo.cpp.
Referenced by llvm::LoopVectorizePass::processLoop().
bool TargetTransformInfo::isIndexedLoadLegal | ( | enum MemIndexedMode | Mode, |
Type * | Ty | ||
) | const |
Definition at line 634 of file TargetTransformInfo.cpp.
Referenced by DeleteTriviallyDeadInstructions(), and mayUsePostIncMode().
bool TargetTransformInfo::isIndexedStoreLegal | ( | enum MemIndexedMode | Mode, |
Type * | Ty | ||
) | const |
Definition at line 639 of file TargetTransformInfo.cpp.
Referenced by DeleteTriviallyDeadInstructions(), and mayUsePostIncMode().
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 line 136 of file TargetTransformInfo.cpp.
Referenced by mayUsePostIncMode().
bool TargetTransformInfo::isLegalAddressingMode | ( | Type * | Ty, |
GlobalValue * | BaseGV, | ||
int64_t | BaseOffset, | ||
bool | HasBaseReg, | ||
int64_t | Scale, | ||
unsigned | AddrSpace = 0 , |
||
Instruction * | I = nullptr |
||
) | 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 in LSRWithInstrQueries(), I may be valid. TODO: Handle pre/postinc as well.
Definition at line 144 of file TargetTransformInfo.cpp.
Referenced by llvm::createSeparateConstOffsetFromGEPPass(), isAddFoldable(), isAlwaysFoldable(), and isAMCompletelyFolded().
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 line 140 of file TargetTransformInfo.cpp.
Referenced by isAMCompletelyFolded().
Definition at line 174 of file TargetTransformInfo.cpp.
Referenced by llvm::LoopVectorizationCostModel::isLegalMaskedGather().
Definition at line 170 of file TargetTransformInfo.cpp.
Referenced by llvm::LoopVectorizationCostModel::interleavedAccessCanBeWidened(), and llvm::LoopVectorizationCostModel::isLegalMaskedLoad().
Return true if the target supports masked gather/scatter AVX-512 fully supports gather and scatter for vectors with 32 and 64 bits scalar type.
Definition at line 178 of file TargetTransformInfo.cpp.
Referenced by llvm::LoopVectorizationCostModel::isLegalMaskedScatter().
Return true if the target supports masked load/store AVX2 and AVX-512 targets allow masks for consecutive load and store.
Definition at line 166 of file TargetTransformInfo.cpp.
Referenced by llvm::LoopVectorizationCostModel::interleavedAccessCanBeWidened(), and llvm::LoopVectorizationCostModel::isLegalMaskedStore().
Definition at line 648 of file TargetTransformInfo.cpp.
bool TargetTransformInfo::isLegalToVectorizeLoadChain | ( | unsigned | ChainSizeInBytes, |
unsigned | Alignment, | ||
unsigned | AddrSpace | ||
) | const |
Definition at line 656 of file TargetTransformInfo.cpp.
Definition at line 652 of file TargetTransformInfo.cpp.
bool TargetTransformInfo::isLegalToVectorizeStoreChain | ( | unsigned | ChainSizeInBytes, |
unsigned | Alignment, | ||
unsigned | AddrSpace | ||
) | const |
Definition at line 662 of file TargetTransformInfo.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 line 127 of file TargetTransformInfo.cpp.
Referenced by llvm::CodeMetrics::analyzeBasicBlock(), analyzeLoopUnrollCost(), findTRECandidate(), and llvm::CGProfilePass::run().
bool TargetTransformInfo::isLSRCostLess | ( | TargetTransformInfo::LSRCost & | C1, |
TargetTransformInfo::LSRCost & | C2 | ||
) | const |
Return true if LSR cost of C1 is lower than C1.
Definition at line 154 of file TargetTransformInfo.cpp.
Referenced by DeleteTriviallyDeadInstructions().
bool TargetTransformInfo::isProfitableToHoist | ( | Instruction * | I | ) | const |
Return true if it is profitable to hoist instruction in the then/else to before if.
Definition at line 214 of file TargetTransformInfo.cpp.
Referenced by HoistThenElseCodeToIf().
Returns whether V is a source of divergence.
This function provides the target-dependent information for the target-independent LegacyDivergenceAnalysis. LegacyDivergenceAnalysis first builds the dependency graph, and then runs the reachability algorithm starting with the sources of divergence.
Definition at line 115 of file TargetTransformInfo.cpp.
Referenced by llvm::GPUDivergenceAnalysis::GPUDivergenceAnalysis().
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 line 210 of file TargetTransformInfo.cpp.
Referenced by llvm::LoopVectorizationCostModel::isOptimizableIVTruncate(), mayUsePostIncMode(), and llvm::SCEVExpander::replaceCongruentIVs().
Return true if this type is legal.
Definition at line 220 of file TargetTransformInfo.cpp.
Referenced by llvm::computeMinimumValueSizes(), isAlwaysFoldable(), and ShouldBuildLookupTable().
bool TargetTransformInfo::LSRWithInstrQueries | ( | ) | const |
Return true if the loop strength reduce pass should make Instruction* based TTI queries to isLegalAddressingMode().
This is needed on SystemZ, where e.g. a memcpy can only have a 12 bit unsigned immediate offset and no index register.
Definition at line 206 of file TargetTransformInfo.cpp.
Referenced by isAMCompletelyFolded().
TargetTransformInfo & TargetTransformInfo::operator= | ( | TargetTransformInfo && | RHS | ) |
Definition at line 52 of file TargetTransformInfo.cpp.
bool TargetTransformInfo::prefersVectorizedAddressing | ( | ) | const |
Return true if target doesn't mind addresses in vectors.
Definition at line 191 of file TargetTransformInfo.cpp.
Referenced by getScalarizationOverhead(), and llvm::LoopVectorizationCostModel::setCostBasedWideningDecision().
bool TargetTransformInfo::shouldBuildLookupTables | ( | ) | const |
Return true if switches should be turned into lookup tables for the target.
Definition at line 232 of file TargetTransformInfo.cpp.
Referenced by SwitchToLookupTable().
Return true if switches should be turned into lookup tables containing this constant value for the target.
Definition at line 235 of file TargetTransformInfo.cpp.
Referenced by ValidLookupTableConstant().
bool TargetTransformInfo::shouldConsiderAddressTypePromotion | ( | const Instruction & | I, |
bool & | AllowPromotionWithoutCommonHeader | ||
) | const |
AllowPromotionWithoutCommonHeader
Set true if promoting I
is profitable without finding other extensions fed by the same input. Definition at line 355 of file TargetTransformInfo.cpp.
bool TargetTransformInfo::shouldExpandReduction | ( | const IntrinsicInst * | II | ) | const |
Definition at line 687 of file TargetTransformInfo.cpp.
References I.
bool TargetTransformInfo::shouldFavorPostInc | ( | ) | const |
Definition at line 162 of file TargetTransformInfo.cpp.
Referenced by DeleteTriviallyDeadInstructions(), and mayUsePostIncMode().
Definition at line 347 of file TargetTransformInfo.cpp.
Referenced by llvm::LoopVectorizationCostModel::computeMaxVF().
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 line 254 of file TargetTransformInfo.cpp.
Referenced by getScalarizationOverhead().
bool TargetTransformInfo::useAA | ( | ) | const |
Definition at line 218 of file TargetTransformInfo.cpp.
Referenced by llvm::createSeparateConstOffsetFromGEPPass().
Return true if the input function which is cold at all call sites, should use coldcc calling convention.
Definition at line 239 of file TargetTransformInfo.cpp.
References getScalarizationOverhead().
Referenced by OptimizeFunctions().
bool TargetTransformInfo::useReductionIntrinsic | ( | unsigned | Opcode, |
Type * | Ty, | ||
ReductionFlags | Flags | ||
) | const |
Definition at line 682 of file TargetTransformInfo.cpp.
Referenced by llvm::createSimpleTargetReduction().