LLVM API Documentation
#include <TargetTransformInfo.h>

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) |
| void | popTTIStack () |
| virtual void | getAnalysisUsage (AnalysisUsage &AU) const |
| All pass subclasses must call TargetTransformInfo::getAnalysisUsage. | |
Protected Attributes | |
| TargetTransformInfo * | PrevTTI |
| The TTI instance one level down the stack. | |
| TargetTransformInfo * | TopTTI |
| 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=0) 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 | isLoweredToCall (const Function *F) const |
| Test whether calls to a function lower to actual program function calls. | |
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 |
| virtual bool | isLegalICmpImmediate (int64_t Imm) const |
| virtual bool | isLegalAddressingMode (Type *Ty, GlobalValue *BaseGV, int64_t BaseOffset, bool HasBaseReg, int64_t Scale) const |
| virtual bool | isTruncateFree (Type *Ty1, Type *Ty2) const |
| virtual bool | isTypeLegal (Type *Ty) const |
| Is this type legal. | |
| virtual unsigned | getJumpBufAlignment () const |
| getJumpBufAlignment - returns the target's jmp_buf alignment in bytes | |
| virtual unsigned | getJumpBufSize () const |
| getJumpBufSize - returns the target's jmp_buf size in bytes. | |
| virtual bool | shouldBuildLookupTables () const |
| virtual PopcntSupportKind | getPopcntSupport (unsigned IntTyWidthInBit) const |
| getPopcntSupport - Return hardware support for population count. | |
| virtual unsigned | getIntImmCost (const APInt &Imm, Type *Ty) const |
Vector Target Information | |
| enum | ShuffleKind { SK_Broadcast, SK_Reverse, SK_InsertSubvector, SK_ExtractSubvector } |
| The various kinds of shuffle patterns for vector queries. More... | |
| enum | OperandValueKind { OK_AnyValue, OK_UniformValue, OK_UniformConstantValue } |
| Additonal information about an operand's possible values. More... | |
| virtual unsigned | getNumberOfRegisters (bool Vector) const |
| virtual unsigned | getRegisterBitWidth (bool Vector) const |
| virtual unsigned | getMaximumUnrollFactor () const |
| virtual unsigned | getArithmeticInstrCost (unsigned Opcode, Type *Ty, OperandValueKind Opd1Info=OK_AnyValue, OperandValueKind Opd2Info=OK_AnyValue) const |
| virtual unsigned | getShuffleCost (ShuffleKind Kind, Type *Tp, int Index=0, Type *SubTp=0) 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=0) 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 | getIntrinsicInstrCost (Intrinsic::ID ID, Type *RetTy, ArrayRef< Type * > Tys) const |
| virtual unsigned | getNumberOfParts (Type *Tp) const |
| virtual unsigned | getAddressComputationCost (Type *Ty) const |
TargetTransformInfo - This pass provides access to the codegen interfaces that are needed for IR-level transformations.
Definition at line 38 of file TargetTransformInfo.h.
Additonal information about an operand's possible values.
Definition at line 267 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".
Definition at line 201 of file TargetTransformInfo.h.
The various kinds of shuffle patterns for vector queries.
Definition at line 259 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.
| 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 91 of file TargetTransformInfo.h.
| TargetTransformInfo::~TargetTransformInfo | ( | ) | [pure virtual] |
This class is intended to be subclassed by real implementations.
Definition at line 26 of file TargetTransformInfo.cpp.
Definition at line 201 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 48 of file TargetTransformInfo.cpp.
References llvm::AnalysisUsage::addRequired().
| unsigned TargetTransformInfo::getArithmeticInstrCost | ( | unsigned | Opcode, |
| Type * | Ty, | ||
| OperandValueKind | Opd1Info = OK_AnyValue, |
||
| OperandValueKind | Opd2Info = OK_AnyValue |
||
| ) | const [virtual] |
Definition at line 152 of file TargetTransformInfo.cpp.
References getArithmeticInstrCost(), and PrevTTI.
Referenced by getArithmeticInstrCost().
| 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 62 of file TargetTransformInfo.cpp.
References getCallCost(), and PrevTTI.
Referenced by getCallCost().
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 67 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 72 of file TargetTransformInfo.cpp.
References getCallCost(), and PrevTTI.
| unsigned TargetTransformInfo::getCastInstrCost | ( | unsigned | Opcode, |
| Type * | Dst, | ||
| Type * | Src | ||
| ) | const [virtual] |
Definition at line 164 of file TargetTransformInfo.cpp.
References getCastInstrCost(), and PrevTTI.
Referenced by getCastInstrCost().
Definition at line 169 of file TargetTransformInfo.cpp.
References getCFInstrCost(), and PrevTTI.
Referenced by getCFInstrCost().
| unsigned TargetTransformInfo::getCmpSelInstrCost | ( | unsigned | Opcode, |
| Type * | ValTy, | ||
| Type * | CondTy = 0 |
||
| ) | const [virtual] |
Definition at line 173 of file TargetTransformInfo.cpp.
References getCmpSelInstrCost(), and PrevTTI.
Referenced by getCmpSelInstrCost().
| 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 57 of file TargetTransformInfo.cpp.
References getGEPCost(), and PrevTTI.
Referenced by getGEPCost().
getIntImmCost - Return the expected cost of materializing the given integer immediate of the specified type.
Definition at line 136 of file TargetTransformInfo.cpp.
References getIntImmCost(), and PrevTTI.
Referenced by getIntImmCost(), and getMemsetStringVal().
| 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 77 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 82 of file TargetTransformInfo.cpp.
References getIntrinsicCost(), and PrevTTI.
| unsigned TargetTransformInfo::getIntrinsicInstrCost | ( | Intrinsic::ID | ID, |
| Type * | RetTy, | ||
| ArrayRef< Type * > | Tys | ||
| ) | const [virtual] |
Definition at line 191 of file TargetTransformInfo.cpp.
References getIntrinsicInstrCost(), and PrevTTI.
Referenced by getIntrinsicInstrCost().
| unsigned TargetTransformInfo::getJumpBufAlignment | ( | ) | const [virtual] |
getJumpBufAlignment - returns the target's jmp_buf alignment in bytes
Definition at line 119 of file TargetTransformInfo.cpp.
References getJumpBufAlignment(), and PrevTTI.
Referenced by getJumpBufAlignment().
| unsigned TargetTransformInfo::getJumpBufSize | ( | ) | const [virtual] |
getJumpBufSize - returns the target's jmp_buf size in bytes.
Definition at line 123 of file TargetTransformInfo.cpp.
References getJumpBufSize(), and PrevTTI.
Referenced by getJumpBufSize().
| unsigned TargetTransformInfo::getMaximumUnrollFactor | ( | ) | const [virtual] |
Definition at line 148 of file TargetTransformInfo.cpp.
References getMaximumUnrollFactor(), and PrevTTI.
Referenced by getMaximumUnrollFactor().
| unsigned TargetTransformInfo::getMemoryOpCost | ( | unsigned | Opcode, |
| Type * | Src, | ||
| unsigned | Alignment, | ||
| unsigned | AddressSpace | ||
| ) | const [virtual] |
Definition at line 183 of file TargetTransformInfo.cpp.
References getMemoryOpCost(), and PrevTTI.
Referenced by getMemoryOpCost().
Definition at line 197 of file TargetTransformInfo.cpp.
References getNumberOfParts(), and PrevTTI.
Referenced by getNumberOfParts().
Definition at line 140 of file TargetTransformInfo.cpp.
References getNumberOfRegisters(), and PrevTTI.
Referenced by getNumberOfRegisters().
| unsigned TargetTransformInfo::getOperationCost | ( | unsigned | Opcode, |
| Type * | Ty, | ||
| Type * | OpTy = 0 |
||
| ) | 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 52 of file TargetTransformInfo.cpp.
References getOperationCost(), and PrevTTI.
Referenced by getOperationCost().
| TargetTransformInfo::PopcntSupportKind TargetTransformInfo::getPopcntSupport | ( | unsigned | IntTyWidthInBit | ) | const [virtual] |
getPopcntSupport - Return hardware support for population count.
Definition at line 132 of file TargetTransformInfo.cpp.
References getPopcntSupport(), and PrevTTI.
Referenced by getPopcntSupport().
Definition at line 144 of file TargetTransformInfo.cpp.
References getRegisterBitWidth(), and PrevTTI.
Referenced by getRegisterBitWidth().
| unsigned TargetTransformInfo::getShuffleCost | ( | ShuffleKind | Kind, |
| Type * | Tp, | ||
| int | Index = 0, |
||
| Type * | SubTp = 0 |
||
| ) | const [virtual] |
Definition at line 159 of file TargetTransformInfo.cpp.
References getShuffleCost(), and PrevTTI.
Referenced by getShuffleCost().
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 87 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] |
Definition at line 178 of file TargetTransformInfo.cpp.
References getVectorInstrCost(), and PrevTTI.
Referenced by getVectorInstrCost().
| bool TargetTransformInfo::isLegalAddImmediate | ( | int64_t | Imm | ) | const [virtual] |
isLegalAddImmediate - 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 95 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] |
isLegalAddressingMode - 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 103 of file TargetTransformInfo.cpp.
References isLegalAddressingMode(), and PrevTTI.
Referenced by isLegalAddressingMode(), and isLegalUse().
| bool TargetTransformInfo::isLegalICmpImmediate | ( | int64_t | Imm | ) | const [virtual] |
isLegalICmpImmediate - 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 99 of file TargetTransformInfo.cpp.
References isLegalICmpImmediate(), and PrevTTI.
Referenced by isLegalICmpImmediate(), and isLegalUse().
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 the a call is a single small instruction, but incurs significant execution cost.
Definition at line 91 of file TargetTransformInfo.cpp.
References isLoweredToCall(), and PrevTTI.
Referenced by llvm::CodeMetrics::analyzeBasicBlock(), and isLoweredToCall().
isTruncateFree - 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 111 of file TargetTransformInfo.cpp.
References isTruncateFree(), and PrevTTI.
Referenced by isTruncateFree(), and llvm::SCEVExpander::replaceCongruentIVs().
Is this type legal.
Definition at line 115 of file TargetTransformInfo.cpp.
References isTypeLegal(), and PrevTTI.
Referenced by isTypeLegal(), and ShouldBuildLookupTable().
| void TargetTransformInfo::popTTIStack | ( | ) | [protected] |
All pass subclasses must in their finalizePass routine call popTTIStack 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 38 of file TargetTransformInfo.cpp.
| 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 29 of file TargetTransformInfo.cpp.
References llvm::Pass::getAnalysis(), PrevTTI, and TopTTI.
| bool TargetTransformInfo::shouldBuildLookupTables | ( | ) | const [virtual] |
shouldBuildLookupTables - Return true if switches should be turned into lookup tables for the target.
Definition at line 127 of file TargetTransformInfo.cpp.
References PrevTTI, and shouldBuildLookupTables().
Referenced by shouldBuildLookupTables(), and SwitchToLookupTable().
char TargetTransformInfo::ID = 0 [static] |
Analysis group identification.
Definition at line 337 of file TargetTransformInfo.h.
TargetTransformInfo* llvm::TargetTransformInfo::PrevTTI [protected] |
The TTI instance one level down the stack.
This is used to implement the default behavior all of the methods which is to delegate up through the stack of TTIs until one can answer the query.
Definition at line 45 of file TargetTransformInfo.h.
Referenced by getAddressComputationCost(), getArithmeticInstrCost(), getCallCost(), getCastInstrCost(), getCFInstrCost(), getCmpSelInstrCost(), getGEPCost(), getIntImmCost(), getIntrinsicCost(), getIntrinsicInstrCost(), getJumpBufAlignment(), getJumpBufSize(), getMaximumUnrollFactor(), getMemoryOpCost(), getNumberOfParts(), getNumberOfRegisters(), getOperationCost(), getPopcntSupport(), getRegisterBitWidth(), getShuffleCost(), getUserCost(), getVectorInstrCost(), isLegalAddImmediate(), isLegalAddressingMode(), isLegalICmpImmediate(), isLoweredToCall(), isTruncateFree(), isTypeLegal(), popTTIStack(), pushTTIStack(), and shouldBuildLookupTables().
TargetTransformInfo* llvm::TargetTransformInfo::TopTTI [protected] |
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 53 of file TargetTransformInfo.h.
Referenced by popTTIStack(), and pushTTIStack().