LLVM API Documentation

Classes | Public Member Functions | Static Public Attributes | Protected Member Functions | Protected Attributes
llvm::TargetTransformInfo Class Reference

#include <TargetTransformInfo.h>

Collaboration diagram for llvm::TargetTransformInfo:
Collaboration graph
[legend]

List of all members.

Classes

struct  UnrollingPreferences
 Parameters that control the generic loop unrolling transformation. More...

Public Member Functions

virtual ~TargetTransformInfo ()=0
 This class is intended to be subclassed by real implementations.

Static Public Attributes

static char ID = 0
 Analysis group identification.

Protected Member Functions

void pushTTIStack (Pass *P)
virtual void getAnalysisUsage (AnalysisUsage &AU) const
 All pass subclasses must call TargetTransformInfo::getAnalysisUsage.

Protected Attributes

TargetTransformInfoPrevTTI
 The TTI instance one level down the stack.
TargetTransformInfoTopTTI
 The top of the stack of TTI analyses available.

Generic Target Information

enum  TargetCostConstants { TCC_Free = 0, TCC_Basic = 1, TCC_Expensive = 4 }
 Underlying constants for 'cost' values in this interface. More...
virtual unsigned getOperationCost (unsigned Opcode, Type *Ty, Type *OpTy=nullptr) const
 Estimate the cost of a specific operation when lowered.
virtual unsigned getGEPCost (const Value *Ptr, ArrayRef< const Value * > Operands) const
 Estimate the cost of a GEP operation when lowered.
virtual unsigned getCallCost (FunctionType *FTy, int NumArgs=-1) const
 Estimate the cost of a function call when lowered.
virtual unsigned getCallCost (const Function *F, int NumArgs=-1) const
 Estimate the cost of calling a specific function when lowered.
virtual unsigned getCallCost (const Function *F, ArrayRef< const Value * > Arguments) const
 Estimate the cost of calling a specific function when lowered.
virtual unsigned getIntrinsicCost (Intrinsic::ID IID, Type *RetTy, ArrayRef< Type * > ParamTys) const
 Estimate the cost of an intrinsic when lowered.
virtual unsigned getIntrinsicCost (Intrinsic::ID IID, Type *RetTy, ArrayRef< const Value * > Arguments) const
 Estimate the cost of an intrinsic when lowered.
virtual unsigned getUserCost (const User *U) const
 Estimate the cost of a given IR user when lowered.
virtual bool hasBranchDivergence () const
 hasBranchDivergence - 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.
virtual bool isLoweredToCall (const Function *F) const
 Test whether calls to a function lower to actual program function calls.
virtual void getUnrollingPreferences (const Function *F, Loop *L, UnrollingPreferences &UP) const
 Get target-customized preferences for the generic loop unrolling transformation. The caller will initialize UP with the current target-independent defaults.

Scalar Target Information

enum  PopcntSupportKind { PSK_Software, PSK_SlowHardware, PSK_FastHardware }
 Flags indicating the kind of support for population count. More...
virtual 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.
virtual 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.
virtual bool isLegalAddressingMode (Type *Ty, GlobalValue *BaseGV, int64_t BaseOffset, bool HasBaseReg, int64_t Scale) 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. TODO: Handle pre/postinc as well.
virtual bool isLegalPredicatedStore (Type *DataType, int Consecutive) const
 Return true if the target works with masked instruction AVX2 allows masks for consecutive load and store for i32 and i64 elements. AVX-512 architecture will also allow masks for non-consecutive memory accesses.
virtual bool isLegalPredicatedLoad (Type *DataType, int Consecutive) const
virtual int getScalingFactorCost (Type *Ty, GlobalValue *BaseGV, int64_t BaseOffset, bool HasBaseReg, int64_t Scale) 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.
virtual bool isTruncateFree (Type *Ty1, Type *Ty2) const
 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.
virtual bool isTypeLegal (Type *Ty) const
 Return true if this type is legal.
virtual unsigned getJumpBufAlignment () const
 Returns the target's jmp_buf alignment in bytes.
virtual unsigned getJumpBufSize () const
 Returns the target's jmp_buf size in bytes.
virtual bool shouldBuildLookupTables () const
 Return true if switches should be turned into lookup tables for the target.
virtual PopcntSupportKind getPopcntSupport (unsigned IntTyWidthInBit) const
 Return hardware support for population count.
virtual bool haveFastSqrt (Type *Ty) const
 Return true if the hardware has a fast square-root instruction.
virtual unsigned getIntImmCost (const APInt &Imm, Type *Ty) const
 Return the expected cost of materializing for the given integer immediate of the specified type.
virtual unsigned 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.
virtual unsigned getIntImmCost (Intrinsic::ID IID, unsigned Idx, const APInt &Imm, Type *Ty) const

Vector Target Information

enum  ShuffleKind {
  SK_Broadcast, SK_Reverse, SK_Alternate, SK_InsertSubvector,
  SK_ExtractSubvector
}
 The various kinds of shuffle patterns for vector queries. More...
enum  OperandValueKind { OK_AnyValue, OK_UniformValue, OK_UniformConstantValue, OK_NonUniformConstantValue }
 Additional information about an operand's possible values. More...
enum  OperandValueProperties { OP_None = 0, OP_PowerOf2 = 1 }
 Additional properties of an operand's values. More...
virtual unsigned getNumberOfRegisters (bool Vector) const
virtual unsigned getRegisterBitWidth (bool Vector) const
virtual unsigned getMaxInterleaveFactor () const
virtual unsigned getArithmeticInstrCost (unsigned Opcode, Type *Ty, OperandValueKind Opd1Info=OK_AnyValue, OperandValueKind Opd2Info=OK_AnyValue, OperandValueProperties Opd1PropInfo=OP_None, OperandValueProperties Opd2PropInfo=OP_None) const
virtual unsigned getShuffleCost (ShuffleKind Kind, Type *Tp, int Index=0, Type *SubTp=nullptr) const
virtual unsigned getCastInstrCost (unsigned Opcode, Type *Dst, Type *Src) const
virtual unsigned getCFInstrCost (unsigned Opcode) const
virtual unsigned getCmpSelInstrCost (unsigned Opcode, Type *ValTy, Type *CondTy=nullptr) const
virtual unsigned getVectorInstrCost (unsigned Opcode, Type *Val, unsigned Index=-1) const
virtual unsigned getMemoryOpCost (unsigned Opcode, Type *Src, unsigned Alignment, unsigned AddressSpace) const
virtual unsigned getReductionCost (unsigned Opcode, Type *Ty, bool IsPairwiseForm) const
 Calculate the cost of performing a vector reduction.
virtual unsigned getIntrinsicInstrCost (Intrinsic::ID ID, Type *RetTy, ArrayRef< Type * > Tys) const
virtual unsigned getNumberOfParts (Type *Tp) const
virtual unsigned getAddressComputationCost (Type *Ty, bool IsComplex=false) const
virtual unsigned getCostOfKeepingLiveOverCall (ArrayRef< Type * > Tys) const

Detailed Description

TargetTransformInfo - This pass provides access to the codegen interfaces that are needed for IR-level transformations.

Definition at line 40 of file TargetTransformInfo.h.


Member Enumeration Documentation

Additional information about an operand's possible values.

Enumerator:
OK_AnyValue 
OK_UniformValue 
OK_UniformConstantValue 
OK_NonUniformConstantValue 

Definition at line 340 of file TargetTransformInfo.h.

Additional properties of an operand's values.

Enumerator:
OP_None 
OP_PowerOf2 

Definition at line 348 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 247 of file TargetTransformInfo.h.

The various kinds of shuffle patterns for vector queries.

Enumerator:
SK_Broadcast 

Broadcast element 0 to all other elements.

SK_Reverse 

Reverse the order of the vector.

SK_Alternate 

Choose alternate elements from vector.

SK_InsertSubvector 

InsertSubvector. Index indicates start offset.

SK_ExtractSubvector 

ExtractSubvector Index indicates start offset.

Definition at line 331 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 unsigned 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.

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 88 of file TargetTransformInfo.h.


Constructor & Destructor Documentation

This class is intended to be subclassed by real implementations.

Definition at line 27 of file TargetTransformInfo.cpp.


Member Function Documentation

unsigned TargetTransformInfo::getAddressComputationCost ( Type Ty,
bool  IsComplex = false 
) const [virtual]
Returns:
The cost of the address computation. For most targets this can be merged into the instruction indexing mode. Some targets might want to distinguish between address computation for memory operations on vector types and scalar types. Such targets should override this function. The 'IsComplex' parameter is a hint that the address computation is likely to involve multiple instructions and as such unlikely to be merged into the address indexing mode.

Definition at line 236 of file TargetTransformInfo.cpp.

References getAddressComputationCost(), and PrevTTI.

Referenced by getAddressComputationCost().

void TargetTransformInfo::getAnalysisUsage ( AnalysisUsage AU) const [protected, virtual]

All pass subclasses must call TargetTransformInfo::getAnalysisUsage.

Definition at line 39 of file TargetTransformInfo.cpp.

References llvm::AnalysisUsage::addRequired().

Returns:
The expected cost of arithmetic ops, such as mul, xor, fsub, etc.

Definition at line 186 of file TargetTransformInfo.cpp.

References getArithmeticInstrCost(), and PrevTTI.

Referenced by getArithmeticInstrCost(), and visitIVCast().

unsigned TargetTransformInfo::getCallCost ( FunctionType FTy,
int  NumArgs = -1 
) const [virtual]

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 53 of file TargetTransformInfo.cpp.

References getCallCost(), and PrevTTI.

Referenced by getCallCost().

unsigned TargetTransformInfo::getCallCost ( const Function F,
int  NumArgs = -1 
) const [virtual]

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.

Definition at line 58 of file TargetTransformInfo.cpp.

References getCallCost(), and PrevTTI.

unsigned TargetTransformInfo::getCallCost ( const Function F,
ArrayRef< const Value * >  Arguments 
) const [virtual]

Estimate the cost of calling a specific function when lowered.

This overload allows specifying a set of candidate argument values.

Definition at line 63 of file TargetTransformInfo.cpp.

References getCallCost(), and PrevTTI.

unsigned TargetTransformInfo::getCastInstrCost ( unsigned  Opcode,
Type Dst,
Type Src 
) const [virtual]
Returns:
The expected cost of cast instructions, such as bitcast, trunc, zext, etc.

Definition at line 199 of file TargetTransformInfo.cpp.

References getCastInstrCost(), and PrevTTI.

Referenced by getCastInstrCost().

Returns:
The expected cost of control-flow related instructions such as Phi, Ret, Br.

Definition at line 204 of file TargetTransformInfo.cpp.

References getCFInstrCost(), and PrevTTI.

Referenced by getCFInstrCost().

unsigned TargetTransformInfo::getCmpSelInstrCost ( unsigned  Opcode,
Type ValTy,
Type CondTy = nullptr 
) const [virtual]
Returns:
The expected cost of compare and select instructions.

Definition at line 208 of file TargetTransformInfo.cpp.

References getCmpSelInstrCost(), and PrevTTI.

Referenced by getCmpSelInstrCost().

Returns:
The cost, if any, of keeping values of the given types alive over a callsite.

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 246 of file TargetTransformInfo.cpp.

References getCostOfKeepingLiveOverCall(), and PrevTTI.

Referenced by getCostOfKeepingLiveOverCall().

unsigned TargetTransformInfo::getGEPCost ( const Value Ptr,
ArrayRef< const Value * >  Operands 
) const [virtual]

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 48 of file TargetTransformInfo.cpp.

References getGEPCost(), and PrevTTI.

Referenced by getGEPCost().

unsigned TargetTransformInfo::getIntImmCost ( const APInt Imm,
Type Ty 
) const [virtual]

Return the expected cost of materializing for the given integer immediate of the specified type.

Definition at line 160 of file TargetTransformInfo.cpp.

References getIntImmCost(), and PrevTTI.

Referenced by getIntImmCost().

unsigned TargetTransformInfo::getIntImmCost ( unsigned  Opc,
unsigned  Idx,
const APInt Imm,
Type Ty 
) const [virtual]

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 164 of file TargetTransformInfo.cpp.

References getIntImmCost(), and PrevTTI.

unsigned TargetTransformInfo::getIntImmCost ( Intrinsic::ID  IID,
unsigned  Idx,
const APInt Imm,
Type Ty 
) const [virtual]

Definition at line 169 of file TargetTransformInfo.cpp.

References getIntImmCost(), and PrevTTI.

unsigned TargetTransformInfo::getIntrinsicCost ( Intrinsic::ID  IID,
Type RetTy,
ArrayRef< Type * >  ParamTys 
) const [virtual]

Estimate the cost of an intrinsic when lowered.

Mirrors the getCallCost method but uses an intrinsic identifier.

Definition at line 68 of file TargetTransformInfo.cpp.

References getIntrinsicCost(), and PrevTTI.

Referenced by getIntrinsicCost().

unsigned TargetTransformInfo::getIntrinsicCost ( Intrinsic::ID  IID,
Type RetTy,
ArrayRef< const Value * >  Arguments 
) const [virtual]

Estimate the cost of an intrinsic when lowered.

Mirrors the getCallCost method but uses an intrinsic identifier.

Definition at line 73 of file TargetTransformInfo.cpp.

References getIntrinsicCost(), and PrevTTI.

unsigned TargetTransformInfo::getIntrinsicInstrCost ( Intrinsic::ID  ID,
Type RetTy,
ArrayRef< Type * >  Tys 
) const [virtual]
Returns:
The cost of Intrinsic instructions.

Definition at line 226 of file TargetTransformInfo.cpp.

References getIntrinsicInstrCost(), and PrevTTI.

Referenced by getIntrinsicInstrCost().

Returns the target's jmp_buf alignment in bytes.

Definition at line 139 of file TargetTransformInfo.cpp.

References getJumpBufAlignment(), and PrevTTI.

Referenced by getJumpBufAlignment().

Returns the target's jmp_buf size in bytes.

Definition at line 143 of file TargetTransformInfo.cpp.

References getJumpBufSize(), and PrevTTI.

Referenced by getJumpBufSize().

Returns:
The maximum interleave factor that any transform should try to perform for this target. This number depends on the level of parallelism and the number of execution units in the CPU.

Definition at line 182 of file TargetTransformInfo.cpp.

References getMaxInterleaveFactor(), and PrevTTI.

Referenced by getMaxInterleaveFactor().

unsigned TargetTransformInfo::getMemoryOpCost ( unsigned  Opcode,
Type Src,
unsigned  Alignment,
unsigned  AddressSpace 
) const [virtual]
Returns:
The cost of Load and Store instructions.

Definition at line 218 of file TargetTransformInfo.cpp.

References getMemoryOpCost(), and PrevTTI.

Referenced by getMemoryOpCost().

Returns:
The number of pieces into which the provided type must be split during legalization. Zero is returned when the answer is unknown.

Definition at line 232 of file TargetTransformInfo.cpp.

References getNumberOfParts(), and PrevTTI.

Referenced by getNumberOfParts().

Returns:
The number of scalar or vector registers that the target has. If 'Vectors' is true, it returns the number of vector registers. If it is set to false, it returns the number of scalar registers.

Definition at line 174 of file TargetTransformInfo.cpp.

References getNumberOfRegisters(), and PrevTTI.

Referenced by getNumberOfRegisters().

unsigned TargetTransformInfo::getOperationCost ( unsigned  Opcode,
Type Ty,
Type OpTy = nullptr 
) const [virtual]

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 43 of file TargetTransformInfo.cpp.

References getOperationCost(), and PrevTTI.

Referenced by getOperationCost().

Return hardware support for population count.

Definition at line 152 of file TargetTransformInfo.cpp.

References getPopcntSupport(), and PrevTTI.

Referenced by getPopcntSupport().

unsigned TargetTransformInfo::getReductionCost ( unsigned  Opcode,
Type Ty,
bool  IsPairwiseForm 
) const [virtual]

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 241 of file TargetTransformInfo.cpp.

References getReductionCost(), and PrevTTI.

Referenced by getReductionCost().

Returns:
The width of the largest scalar or vector register type.

Definition at line 178 of file TargetTransformInfo.cpp.

References getRegisterBitWidth(), and PrevTTI.

Referenced by getRegisterBitWidth().

int TargetTransformInfo::getScalingFactorCost ( Type Ty,
GlobalValue BaseGV,
int64_t  BaseOffset,
bool  HasBaseReg,
int64_t  Scale 
) const [virtual]

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 123 of file TargetTransformInfo.cpp.

References getScalingFactorCost(), and PrevTTI.

Referenced by getScalingFactorCost(), and getScalingFactorCost().

unsigned TargetTransformInfo::getShuffleCost ( ShuffleKind  Kind,
Type Tp,
int  Index = 0,
Type SubTp = nullptr 
) const [virtual]
Returns:
The cost of a shuffle instruction of kind Kind and of type Tp. The index and subtype parameters are used by the subvector insertion and extraction shuffle kinds.

Definition at line 194 of file TargetTransformInfo.cpp.

References getShuffleCost(), and PrevTTI.

Referenced by getShuffleCost().

void TargetTransformInfo::getUnrollingPreferences ( const Function F,
Loop L,
UnrollingPreferences UP 
) const [virtual]

Get target-customized preferences for the generic loop unrolling transformation. The caller will initialize UP with the current target-independent defaults.

Definition at line 91 of file TargetTransformInfo.cpp.

References getUnrollingPreferences(), and PrevTTI.

Referenced by getUnrollingPreferences().

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.

The returned cost is defined in terms of TargetCostConstants, see its comments for a detailed explanation of the cost values.

Definition at line 78 of file TargetTransformInfo.cpp.

References getUserCost(), and PrevTTI.

Referenced by llvm::CodeMetrics::analyzeBasicBlock(), and getUserCost().

unsigned TargetTransformInfo::getVectorInstrCost ( unsigned  Opcode,
Type Val,
unsigned  Index = -1 
) const [virtual]
Returns:
The expected cost of vector Insert and Extract. Use -1 to indicate that there is no information on the index value.

Definition at line 213 of file TargetTransformInfo.cpp.

References getVectorInstrCost(), and PrevTTI.

Referenced by getVectorInstrCost().

hasBranchDivergence - 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 82 of file TargetTransformInfo.cpp.

References hasBranchDivergence(), and PrevTTI.

Referenced by hasBranchDivergence().

bool TargetTransformInfo::haveFastSqrt ( Type Ty) const [virtual]

Return true if the hardware has a fast square-root instruction.

Definition at line 156 of file TargetTransformInfo.cpp.

References haveFastSqrt(), and PrevTTI.

Referenced by haveFastSqrt().

bool TargetTransformInfo::isLegalAddImmediate ( int64_t  Imm) const [virtual]

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 96 of file TargetTransformInfo.cpp.

References isLegalAddImmediate(), and PrevTTI.

Referenced by isLegalAddImmediate().

bool TargetTransformInfo::isLegalAddressingMode ( Type Ty,
GlobalValue BaseGV,
int64_t  BaseOffset,
bool  HasBaseReg,
int64_t  Scale 
) const [virtual]

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. TODO: Handle pre/postinc as well.

Definition at line 115 of file TargetTransformInfo.cpp.

References isLegalAddressingMode(), and PrevTTI.

Referenced by isAMCompletelyFolded(), and isLegalAddressingMode().

bool TargetTransformInfo::isLegalICmpImmediate ( int64_t  Imm) const [virtual]

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 100 of file TargetTransformInfo.cpp.

References isLegalICmpImmediate(), and PrevTTI.

Referenced by isAMCompletelyFolded(), and isLegalICmpImmediate().

bool TargetTransformInfo::isLegalPredicatedLoad ( Type DataType,
int  Consecutive 
) const [virtual]

Definition at line 104 of file TargetTransformInfo.cpp.

bool TargetTransformInfo::isLegalPredicatedStore ( Type DataType,
int  Consecutive 
) const [virtual]

Return true if the target works with masked instruction AVX2 allows masks for consecutive load and store for i32 and i64 elements. AVX-512 architecture will also allow masks for non-consecutive memory accesses.

Definition at line 109 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 86 of file TargetTransformInfo.cpp.

References isLoweredToCall(), and PrevTTI.

Referenced by llvm::CodeMetrics::analyzeBasicBlock(), and isLoweredToCall().

bool TargetTransformInfo::isTruncateFree ( Type Ty1,
Type Ty2 
) const [virtual]

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 131 of file TargetTransformInfo.cpp.

References isTruncateFree(), and PrevTTI.

Referenced by isTruncateFree(), and llvm::SCEVExpander::replaceCongruentIVs().

bool TargetTransformInfo::isTypeLegal ( Type Ty) const [virtual]

Return true if this type is legal.

Definition at line 135 of file TargetTransformInfo.cpp.

References isTypeLegal(), and PrevTTI.

Referenced by isTypeLegal(), and ShouldBuildLookupTable().

void TargetTransformInfo::pushTTIStack ( Pass P) [protected]

All pass subclasses must in their initializePass routine call pushTTIStack with themselves to update the pointers tracking the previous TTI instance in the analysis group's stack, and the top of the analysis group's stack.

Definition at line 30 of file TargetTransformInfo.cpp.

References llvm::Pass::getAnalysis(), PrevTTI, and TopTTI.

Return true if switches should be turned into lookup tables for the target.

Definition at line 147 of file TargetTransformInfo.cpp.

References PrevTTI, and shouldBuildLookupTables().

Referenced by shouldBuildLookupTables(), and SwitchToLookupTable().


Member Data Documentation

char TargetTransformInfo::ID = 0 [static]

Analysis group identification.

Definition at line 444 of file TargetTransformInfo.h.

The top of the stack of TTI analyses available.

This is a convenience routine maintained as TTI analyses become available that complements the PrevTTI delegation chain. When one part of an analysis pass wants to query another part of the analysis pass it can use this to start back at the top of the stack.

Definition at line 55 of file TargetTransformInfo.h.

Referenced by pushTTIStack().


The documentation for this class was generated from the following files: