LLVM API Documentation

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
TargetTransformInfo.cpp
Go to the documentation of this file.
1 //===- llvm/Analysis/TargetTransformInfo.cpp ------------------------------===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
10 #define DEBUG_TYPE "tti"
12 #include "llvm/IR/DataLayout.h"
13 #include "llvm/IR/Operator.h"
14 #include "llvm/IR/Instruction.h"
15 #include "llvm/IR/IntrinsicInst.h"
16 #include "llvm/IR/Instructions.h"
17 #include "llvm/Support/CallSite.h"
19 
20 using namespace llvm;
21 
22 // Setup the analysis group to manage the TargetTransformInfo passes.
23 INITIALIZE_ANALYSIS_GROUP(TargetTransformInfo, "Target Information", NoTTI)
24 char TargetTransformInfo::ID = 0;
25 
27 }
28 
30  TopTTI = this;
32 
33  // Walk up the chain and update the top TTI pointer.
34  for (TargetTransformInfo *PTTI = PrevTTI; PTTI; PTTI = PTTI->PrevTTI)
35  PTTI->TopTTI = this;
36 }
37 
39  TopTTI = 0;
40 
41  // Walk up the chain and update the top TTI pointer.
42  for (TargetTransformInfo *PTTI = PrevTTI; PTTI; PTTI = PTTI->PrevTTI)
43  PTTI->TopTTI = PrevTTI;
44 
45  PrevTTI = 0;
46 }
47 
50 }
51 
52 unsigned TargetTransformInfo::getOperationCost(unsigned Opcode, Type *Ty,
53  Type *OpTy) const {
54  return PrevTTI->getOperationCost(Opcode, Ty, OpTy);
55 }
56 
58  const Value *Ptr, ArrayRef<const Value *> Operands) const {
59  return PrevTTI->getGEPCost(Ptr, Operands);
60 }
61 
63  int NumArgs) const {
64  return PrevTTI->getCallCost(FTy, NumArgs);
65 }
66 
68  int NumArgs) const {
69  return PrevTTI->getCallCost(F, NumArgs);
70 }
71 
73  const Function *F, ArrayRef<const Value *> Arguments) const {
74  return PrevTTI->getCallCost(F, Arguments);
75 }
76 
78  Intrinsic::ID IID, Type *RetTy, ArrayRef<Type *> ParamTys) const {
79  return PrevTTI->getIntrinsicCost(IID, RetTy, ParamTys);
80 }
81 
83  Intrinsic::ID IID, Type *RetTy, ArrayRef<const Value *> Arguments) const {
84  return PrevTTI->getIntrinsicCost(IID, RetTy, Arguments);
85 }
86 
87 unsigned TargetTransformInfo::getUserCost(const User *U) const {
88  return PrevTTI->getUserCost(U);
89 }
90 
92  return PrevTTI->hasBranchDivergence();
93 }
94 
96  return PrevTTI->isLoweredToCall(F);
97 }
98 
100  UnrollingPreferences &UP) const {
102 }
103 
105  return PrevTTI->isLegalAddImmediate(Imm);
106 }
107 
109  return PrevTTI->isLegalICmpImmediate(Imm);
110 }
111 
113  int64_t BaseOffset,
114  bool HasBaseReg,
115  int64_t Scale) const {
116  return PrevTTI->isLegalAddressingMode(Ty, BaseGV, BaseOffset, HasBaseReg,
117  Scale);
118 }
119 
121  int64_t BaseOffset,
122  bool HasBaseReg,
123  int64_t Scale) const {
124  return PrevTTI->getScalingFactorCost(Ty, BaseGV, BaseOffset, HasBaseReg,
125  Scale);
126 }
127 
129  return PrevTTI->isTruncateFree(Ty1, Ty2);
130 }
131 
133  return PrevTTI->isTypeLegal(Ty);
134 }
135 
137  return PrevTTI->getJumpBufAlignment();
138 }
139 
141  return PrevTTI->getJumpBufSize();
142 }
143 
146 }
147 
149 TargetTransformInfo::getPopcntSupport(unsigned IntTyWidthInBit) const {
150  return PrevTTI->getPopcntSupport(IntTyWidthInBit);
151 }
152 
154  return PrevTTI->haveFastSqrt(Ty);
155 }
156 
157 unsigned TargetTransformInfo::getIntImmCost(const APInt &Imm, Type *Ty) const {
158  return PrevTTI->getIntImmCost(Imm, Ty);
159 }
160 
161 unsigned TargetTransformInfo::getNumberOfRegisters(bool Vector) const {
162  return PrevTTI->getNumberOfRegisters(Vector);
163 }
164 
165 unsigned TargetTransformInfo::getRegisterBitWidth(bool Vector) const {
166  return PrevTTI->getRegisterBitWidth(Vector);
167 }
168 
171 }
172 
174  Type *Ty,
175  OperandValueKind Op1Info,
176  OperandValueKind Op2Info) const {
177  return PrevTTI->getArithmeticInstrCost(Opcode, Ty, Op1Info, Op2Info);
178 }
179 
181  int Index, Type *SubTp) const {
182  return PrevTTI->getShuffleCost(Kind, Tp, Index, SubTp);
183 }
184 
185 unsigned TargetTransformInfo::getCastInstrCost(unsigned Opcode, Type *Dst,
186  Type *Src) const {
187  return PrevTTI->getCastInstrCost(Opcode, Dst, Src);
188 }
189 
190 unsigned TargetTransformInfo::getCFInstrCost(unsigned Opcode) const {
191  return PrevTTI->getCFInstrCost(Opcode);
192 }
193 
194 unsigned TargetTransformInfo::getCmpSelInstrCost(unsigned Opcode, Type *ValTy,
195  Type *CondTy) const {
196  return PrevTTI->getCmpSelInstrCost(Opcode, ValTy, CondTy);
197 }
198 
199 unsigned TargetTransformInfo::getVectorInstrCost(unsigned Opcode, Type *Val,
200  unsigned Index) const {
201  return PrevTTI->getVectorInstrCost(Opcode, Val, Index);
202 }
203 
204 unsigned TargetTransformInfo::getMemoryOpCost(unsigned Opcode, Type *Src,
205  unsigned Alignment,
206  unsigned AddressSpace) const {
207  return PrevTTI->getMemoryOpCost(Opcode, Src, Alignment, AddressSpace);
208  ;
209 }
210 
211 unsigned
213  Type *RetTy,
214  ArrayRef<Type *> Tys) const {
215  return PrevTTI->getIntrinsicInstrCost(ID, RetTy, Tys);
216 }
217 
219  return PrevTTI->getNumberOfParts(Tp);
220 }
221 
223  bool IsComplex) const {
224  return PrevTTI->getAddressComputationCost(Tp, IsComplex);
225 }
226 
227 unsigned TargetTransformInfo::getReductionCost(unsigned Opcode, Type *Ty,
228  bool IsPairwise) const {
229  return PrevTTI->getReductionCost(Opcode, Ty, IsPairwise);
230 }
231 
232 namespace {
233 
234 struct NoTTI : ImmutablePass, TargetTransformInfo {
235  const DataLayout *DL;
236 
237  NoTTI() : ImmutablePass(ID), DL(0) {
239  }
240 
241  virtual void initializePass() {
242  // Note that this subclass is special, and must *not* call initializeTTI as
243  // it does not chain.
244  TopTTI = this;
245  PrevTTI = 0;
246  DL = getAnalysisIfAvailable<DataLayout>();
247  }
248 
249  virtual void getAnalysisUsage(AnalysisUsage &AU) const {
250  // Note that this subclass is special, and must *not* call
251  // TTI::getAnalysisUsage as it breaks the recursion.
252  }
253 
254  /// Pass identification.
255  static char ID;
256 
257  /// Provide necessary pointer adjustments for the two base classes.
258  virtual void *getAdjustedAnalysisPointer(const void *ID) {
259  if (ID == &TargetTransformInfo::ID)
260  return (TargetTransformInfo*)this;
261  return this;
262  }
263 
264  unsigned getOperationCost(unsigned Opcode, Type *Ty, Type *OpTy) const {
265  switch (Opcode) {
266  default:
267  // By default, just classify everything as 'basic'.
268  return TCC_Basic;
269 
270  case Instruction::GetElementPtr:
271  llvm_unreachable("Use getGEPCost for GEP operations!");
272 
273  case Instruction::BitCast:
274  assert(OpTy && "Cast instructions must provide the operand type");
275  if (Ty == OpTy || (Ty->isPointerTy() && OpTy->isPointerTy()))
276  // Identity and pointer-to-pointer casts are free.
277  return TCC_Free;
278 
279  // Otherwise, the default basic cost is used.
280  return TCC_Basic;
281 
282  case Instruction::IntToPtr: {
283  if (!DL)
284  return TCC_Basic;
285 
286  // An inttoptr cast is free so long as the input is a legal integer type
287  // which doesn't contain values outside the range of a pointer.
288  unsigned OpSize = OpTy->getScalarSizeInBits();
289  if (DL->isLegalInteger(OpSize) &&
290  OpSize <= DL->getPointerTypeSizeInBits(Ty))
291  return TCC_Free;
292 
293  // Otherwise it's not a no-op.
294  return TCC_Basic;
295  }
296  case Instruction::PtrToInt: {
297  if (!DL)
298  return TCC_Basic;
299 
300  // A ptrtoint cast is free so long as the result is large enough to store
301  // the pointer, and a legal integer type.
302  unsigned DestSize = Ty->getScalarSizeInBits();
303  if (DL->isLegalInteger(DestSize) &&
304  DestSize >= DL->getPointerTypeSizeInBits(OpTy))
305  return TCC_Free;
306 
307  // Otherwise it's not a no-op.
308  return TCC_Basic;
309  }
310  case Instruction::Trunc:
311  // trunc to a native type is free (assuming the target has compare and
312  // shift-right of the same width).
313  if (DL && DL->isLegalInteger(DL->getTypeSizeInBits(Ty)))
314  return TCC_Free;
315 
316  return TCC_Basic;
317  }
318  }
319 
320  unsigned getGEPCost(const Value *Ptr,
321  ArrayRef<const Value *> Operands) const {
322  // In the basic model, we just assume that all-constant GEPs will be folded
323  // into their uses via addressing modes.
324  for (unsigned Idx = 0, Size = Operands.size(); Idx != Size; ++Idx)
325  if (!isa<Constant>(Operands[Idx]))
326  return TCC_Basic;
327 
328  return TCC_Free;
329  }
330 
331  unsigned getCallCost(FunctionType *FTy, int NumArgs = -1) const {
332  assert(FTy && "FunctionType must be provided to this routine.");
333 
334  // The target-independent implementation just measures the size of the
335  // function by approximating that each argument will take on average one
336  // instruction to prepare.
337 
338  if (NumArgs < 0)
339  // Set the argument number to the number of explicit arguments in the
340  // function.
341  NumArgs = FTy->getNumParams();
342 
343  return TCC_Basic * (NumArgs + 1);
344  }
345 
346  unsigned getCallCost(const Function *F, int NumArgs = -1) const {
347  assert(F && "A concrete function must be provided to this routine.");
348 
349  if (NumArgs < 0)
350  // Set the argument number to the number of explicit arguments in the
351  // function.
352  NumArgs = F->arg_size();
353 
354  if (Intrinsic::ID IID = (Intrinsic::ID)F->getIntrinsicID()) {
355  FunctionType *FTy = F->getFunctionType();
356  SmallVector<Type *, 8> ParamTys(FTy->param_begin(), FTy->param_end());
357  return TopTTI->getIntrinsicCost(IID, FTy->getReturnType(), ParamTys);
358  }
359 
360  if (!TopTTI->isLoweredToCall(F))
361  return TCC_Basic; // Give a basic cost if it will be lowered directly.
362 
363  return TopTTI->getCallCost(F->getFunctionType(), NumArgs);
364  }
365 
366  unsigned getCallCost(const Function *F,
367  ArrayRef<const Value *> Arguments) const {
368  // Simply delegate to generic handling of the call.
369  // FIXME: We should use instsimplify or something else to catch calls which
370  // will constant fold with these arguments.
371  return TopTTI->getCallCost(F, Arguments.size());
372  }
373 
374  unsigned getIntrinsicCost(Intrinsic::ID IID, Type *RetTy,
375  ArrayRef<Type *> ParamTys) const {
376  switch (IID) {
377  default:
378  // Intrinsics rarely (if ever) have normal argument setup constraints.
379  // Model them as having a basic instruction cost.
380  // FIXME: This is wrong for libc intrinsics.
381  return TCC_Basic;
382 
392  // These intrinsics don't actually represent code after lowering.
393  return TCC_Free;
394  }
395  }
396 
397  unsigned getIntrinsicCost(Intrinsic::ID IID, Type *RetTy,
398  ArrayRef<const Value *> Arguments) const {
399  // Delegate to the generic intrinsic handling code. This mostly provides an
400  // opportunity for targets to (for example) special case the cost of
401  // certain intrinsics based on constants used as arguments.
402  SmallVector<Type *, 8> ParamTys;
403  ParamTys.reserve(Arguments.size());
404  for (unsigned Idx = 0, Size = Arguments.size(); Idx != Size; ++Idx)
405  ParamTys.push_back(Arguments[Idx]->getType());
406  return TopTTI->getIntrinsicCost(IID, RetTy, ParamTys);
407  }
408 
409  unsigned getUserCost(const User *U) const {
410  if (isa<PHINode>(U))
411  return TCC_Free; // Model all PHI nodes as free.
412 
413  if (const GEPOperator *GEP = dyn_cast<GEPOperator>(U))
414  // In the basic model we just assume that all-constant GEPs will be
415  // folded into their uses via addressing modes.
416  return GEP->hasAllConstantIndices() ? TCC_Free : TCC_Basic;
417 
418  if (ImmutableCallSite CS = U) {
419  const Function *F = CS.getCalledFunction();
420  if (!F) {
421  // Just use the called value type.
422  Type *FTy = CS.getCalledValue()->getType()->getPointerElementType();
423  return TopTTI->getCallCost(cast<FunctionType>(FTy), CS.arg_size());
424  }
425 
427  for (ImmutableCallSite::arg_iterator AI = CS.arg_begin(),
428  AE = CS.arg_end();
429  AI != AE; ++AI)
430  Arguments.push_back(*AI);
431 
432  return TopTTI->getCallCost(F, Arguments);
433  }
434 
435  if (const CastInst *CI = dyn_cast<CastInst>(U)) {
436  // Result of a cmp instruction is often extended (to be used by other
437  // cmp instructions, logical or return instructions). These are usually
438  // nop on most sane targets.
439  if (isa<CmpInst>(CI->getOperand(0)))
440  return TCC_Free;
441  }
442 
443  // Otherwise delegate to the fully generic implementations.
444  return getOperationCost(Operator::getOpcode(U), U->getType(),
445  U->getNumOperands() == 1 ?
446  U->getOperand(0)->getType() : 0);
447  }
448 
449  bool hasBranchDivergence() const { return false; }
450 
451  bool isLoweredToCall(const Function *F) const {
452  // FIXME: These should almost certainly not be handled here, and instead
453  // handled with the help of TLI or the target itself. This was largely
454  // ported from existing analysis heuristics here so that such refactorings
455  // can take place in the future.
456 
457  if (F->isIntrinsic())
458  return false;
459 
460  if (F->hasLocalLinkage() || !F->hasName())
461  return true;
462 
463  StringRef Name = F->getName();
464 
465  // These will all likely lower to a single selection DAG node.
466  if (Name == "copysign" || Name == "copysignf" || Name == "copysignl" ||
467  Name == "fabs" || Name == "fabsf" || Name == "fabsl" || Name == "sin" ||
468  Name == "sinf" || Name == "sinl" || Name == "cos" || Name == "cosf" ||
469  Name == "cosl" || Name == "sqrt" || Name == "sqrtf" || Name == "sqrtl")
470  return false;
471 
472  // These are all likely to be optimized into something smaller.
473  if (Name == "pow" || Name == "powf" || Name == "powl" || Name == "exp2" ||
474  Name == "exp2l" || Name == "exp2f" || Name == "floor" || Name ==
475  "floorf" || Name == "ceil" || Name == "round" || Name == "ffs" ||
476  Name == "ffsl" || Name == "abs" || Name == "labs" || Name == "llabs")
477  return false;
478 
479  return true;
480  }
481 
482  void getUnrollingPreferences(Loop *, UnrollingPreferences &) const { }
483 
484  bool isLegalAddImmediate(int64_t Imm) const {
485  return false;
486  }
487 
488  bool isLegalICmpImmediate(int64_t Imm) const {
489  return false;
490  }
491 
492  bool isLegalAddressingMode(Type *Ty, GlobalValue *BaseGV, int64_t BaseOffset,
493  bool HasBaseReg, int64_t Scale) const {
494  // Guess that reg+reg addressing is allowed. This heuristic is taken from
495  // the implementation of LSR.
496  return !BaseGV && BaseOffset == 0 && Scale <= 1;
497  }
498 
499  int getScalingFactorCost(Type *Ty, GlobalValue *BaseGV, int64_t BaseOffset,
500  bool HasBaseReg, int64_t Scale) const {
501  // Guess that all legal addressing mode are free.
502  if(isLegalAddressingMode(Ty, BaseGV, BaseOffset, HasBaseReg, Scale))
503  return 0;
504  return -1;
505  }
506 
507 
508  bool isTruncateFree(Type *Ty1, Type *Ty2) const {
509  return false;
510  }
511 
512  bool isTypeLegal(Type *Ty) const {
513  return false;
514  }
515 
516  unsigned getJumpBufAlignment() const {
517  return 0;
518  }
519 
520  unsigned getJumpBufSize() const {
521  return 0;
522  }
523 
524  bool shouldBuildLookupTables() const {
525  return true;
526  }
527 
528  PopcntSupportKind getPopcntSupport(unsigned IntTyWidthInBit) const {
529  return PSK_Software;
530  }
531 
532  bool haveFastSqrt(Type *Ty) const {
533  return false;
534  }
535 
536  unsigned getIntImmCost(const APInt &Imm, Type *Ty) const {
537  return 1;
538  }
539 
540  unsigned getNumberOfRegisters(bool Vector) const {
541  return 8;
542  }
543 
544  unsigned getRegisterBitWidth(bool Vector) const {
545  return 32;
546  }
547 
548  unsigned getMaximumUnrollFactor() const {
549  return 1;
550  }
551 
552  unsigned getArithmeticInstrCost(unsigned Opcode, Type *Ty, OperandValueKind,
553  OperandValueKind) const {
554  return 1;
555  }
556 
557  unsigned getShuffleCost(ShuffleKind Kind, Type *Tp,
558  int Index = 0, Type *SubTp = 0) const {
559  return 1;
560  }
561 
562  unsigned getCastInstrCost(unsigned Opcode, Type *Dst,
563  Type *Src) const {
564  return 1;
565  }
566 
567  unsigned getCFInstrCost(unsigned Opcode) const {
568  return 1;
569  }
570 
571  unsigned getCmpSelInstrCost(unsigned Opcode, Type *ValTy,
572  Type *CondTy = 0) const {
573  return 1;
574  }
575 
576  unsigned getVectorInstrCost(unsigned Opcode, Type *Val,
577  unsigned Index = -1) const {
578  return 1;
579  }
580 
581  unsigned getMemoryOpCost(unsigned Opcode, Type *Src,
582  unsigned Alignment,
583  unsigned AddressSpace) const {
584  return 1;
585  }
586 
587  unsigned getIntrinsicInstrCost(Intrinsic::ID ID,
588  Type *RetTy,
589  ArrayRef<Type*> Tys) const {
590  return 1;
591  }
592 
593  unsigned getNumberOfParts(Type *Tp) const {
594  return 0;
595  }
596 
597  unsigned getAddressComputationCost(Type *Tp, bool) const {
598  return 0;
599  }
600 
601  unsigned getReductionCost(unsigned, Type *, bool) const {
602  return 1;
603  }
604 };
605 
606 } // end anonymous namespace
607 
609  "No target information", true, true, true)
610 char NoTTI::ID = 0;
611 
613  return new NoTTI();
614 }
virtual PopcntSupportKind getPopcntSupport(unsigned IntTyWidthInBit) const
getPopcntSupport - Return hardware support for population count.
virtual unsigned getCallCost(FunctionType *FTy, int NumArgs=-1) const
Estimate the cost of a function call when lowered.
void reserve(unsigned N)
Definition: SmallVector.h:425
static PassRegistry * getPassRegistry()
bool hasName() const
Definition: Value.h:117
unsigned getScalarSizeInBits()
Definition: Type.cpp:135
unsigned getNumParams() const
Definition: DerivedTypes.h:133
virtual unsigned getMaximumUnrollFactor() const
virtual bool hasBranchDivergence() const
hasBranchDivergence - Return true if branch divergence exists. Branch divergence has a significantly ...
unsigned getNumOperands() const
Definition: User.h:108
bool isIntrinsic() const
Definition: Function.h:156
virtual unsigned getJumpBufSize() const
getJumpBufSize - returns the target's jmp_buf size in bytes.
virtual unsigned getNumberOfParts(Type *Tp) const
F(f)
virtual bool isLegalAddImmediate(int64_t Imm) const
Type * getPointerElementType() const
Definition: Type.h:373
size_t arg_size() const
Definition: Function.cpp:248
StringRef getName() const
Definition: Value.cpp:167
AnalysisUsage & addRequired()
Base class of casting instructions.
Definition: InstrTypes.h:387
virtual unsigned getCFInstrCost(unsigned Opcode) const
#define llvm_unreachable(msg)
param_iterator param_end() const
Definition: DerivedTypes.h:125
TargetTransformInfo * TopTTI
The top of the stack of TTI analyses available.
static unsigned getScalingFactorCost(const TargetTransformInfo &TTI, const LSRUse &LU, const Formula &F)
virtual unsigned getAddressComputationCost(Type *Ty, bool IsComplex=false) const
ID
LLVM Calling Convention Representation.
Definition: CallingConv.h:26
virtual bool isTypeLegal(Type *Ty) const
Is this type legal.
PopcntSupportKind
Flags indicating the kind of support for population count.
virtual unsigned getRegisterBitWidth(bool Vector) const
#define INITIALIZE_ANALYSIS_GROUP(agName, name, defaultPass)
Definition: PassSupport.h:256
virtual unsigned getUserCost(const User *U) const
Estimate the cost of a given IR user when lowered.
virtual unsigned getShuffleCost(ShuffleKind Kind, Type *Tp, int Index=0, Type *SubTp=0) const
virtual void getUnrollingPreferences(Loop *L, UnrollingPreferences &UP) const
Get target-customized preferences for the generic loop unrolling transformation. The caller will init...
size_t size() const
size - Get the array size.
Definition: ArrayRef.h:109
TargetTransformInfo * PrevTTI
The TTI instance one level down the stack.
User::const_op_iterator arg_iterator
Definition: CallSite.h:133
#define P(N)
unsigned getIntrinsicID() const LLVM_READONLY
Definition: Function.cpp:371
virtual unsigned getOperationCost(unsigned Opcode, Type *Ty, Type *OpTy=0) const
Estimate the cost of a specific operation when lowered.
virtual unsigned getCmpSelInstrCost(unsigned Opcode, Type *ValTy, Type *CondTy=0) const
param_iterator param_begin() const
Definition: DerivedTypes.h:124
Value * getOperand(unsigned i) const
Definition: User.h:88
static char ID
Analysis group identification.
virtual unsigned getCastInstrCost(unsigned Opcode, Type *Dst, Type *Src) const
virtual unsigned getIntrinsicInstrCost(Intrinsic::ID ID, Type *RetTy, ArrayRef< Type * > Tys) const
bool isPointerTy() const
Definition: Type.h:220
#define INITIALIZE_AG_PASS(passName, agName, arg, name, cfg, analysis, def)
Definition: PassSupport.h:268
virtual unsigned getGEPCost(const Value *Ptr, ArrayRef< const Value * > Operands) const
Estimate the cost of a GEP operation when lowered.
AnalysisType & getAnalysis() const
virtual unsigned getMemoryOpCost(unsigned Opcode, Type *Src, unsigned Alignment, unsigned AddressSpace) const
Type * getType() const
Definition: Value.h:111
AddressSpace
Definition: NVPTXBaseInfo.h:22
virtual bool haveFastSqrt(Type *Ty) const
Class for arbitrary precision integers.
Definition: APInt.h:75
virtual unsigned getJumpBufAlignment() const
getJumpBufAlignment - returns the target's jmp_buf alignment in bytes
unsigned getOpcode() const
Definition: Operator.h:51
virtual bool isLegalICmpImmediate(int64_t Imm) const
void initializeNoTTIPass(PassRegistry &)
virtual bool shouldBuildLookupTables() const
virtual bool isLegalAddressingMode(Type *Ty, GlobalValue *BaseGV, int64_t BaseOffset, bool HasBaseReg, int64_t Scale) const
virtual unsigned getReductionCost(unsigned Opcode, Type *Ty, bool IsPairwiseForm) const
Calculate the cost of performing a vector reduction.
Parameters that control the generic loop unrolling transformation.
virtual void getAnalysisUsage(AnalysisUsage &AU) const
All pass subclasses must call TargetTransformInfo::getAnalysisUsage.
ImmutableCallSite - establish a view to a call site for examination.
Definition: CallSite.h:318
FunctionType * getFunctionType() const
Definition: Function.cpp:171
virtual unsigned getIntImmCost(const APInt &Imm, Type *Ty) const
bool hasLocalLinkage() const
Definition: GlobalValue.h:211
Type * getReturnType() const
Definition: DerivedTypes.h:121
virtual bool isLoweredToCall(const Function *F) const
Test whether calls to a function lower to actual program function calls.
LLVM Value Representation.
Definition: Value.h:66
virtual unsigned getVectorInstrCost(unsigned Opcode, Type *Val, unsigned Index=-1) const
virtual bool isTruncateFree(Type *Ty1, Type *Ty2) const
virtual unsigned getNumberOfRegisters(bool Vector) const
OperandValueKind
Additional information about an operand's possible values.
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...
virtual unsigned getIntrinsicCost(Intrinsic::ID IID, Type *RetTy, ArrayRef< Type * > ParamTys) const
Estimate the cost of an intrinsic when lowered.
virtual unsigned getArithmeticInstrCost(unsigned Opcode, Type *Ty, OperandValueKind Opd1Info=OK_AnyValue, OperandValueKind Opd2Info=OK_AnyValue) const
ShuffleKind
The various kinds of shuffle patterns for vector queries.
ImmutablePass * createNoTargetTransformInfoPass()
Create the base case instance of a pass in the TTI analysis group.