1 //===- InlineCost.cpp - Cost analysis for inliner -------------------------===//
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 // This file implements inline cost analysis.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #include "llvm/Analysis/InlineCost.h"
15 #include "llvm/ADT/STLExtras.h"
16 #include "llvm/ADT/SetVector.h"
17 #include "llvm/ADT/SmallPtrSet.h"
18 #include "llvm/ADT/SmallVector.h"
19 #include "llvm/ADT/Statistic.h"
20 #include "llvm/Analysis/AssumptionCache.h"
21 #include "llvm/Analysis/BlockFrequencyInfo.h"
22 #include "llvm/Analysis/CodeMetrics.h"
23 #include "llvm/Analysis/ConstantFolding.h"
24 #include "llvm/Analysis/InstructionSimplify.h"
25 #include "llvm/Analysis/ProfileSummaryInfo.h"
26 #include "llvm/Analysis/TargetTransformInfo.h"
27 #include "llvm/IR/CallSite.h"
28 #include "llvm/IR/CallingConv.h"
29 #include "llvm/IR/DataLayout.h"
30 #include "llvm/IR/GetElementPtrTypeIterator.h"
31 #include "llvm/IR/GlobalAlias.h"
32 #include "llvm/IR/InstVisitor.h"
33 #include "llvm/IR/IntrinsicInst.h"
34 #include "llvm/IR/Operator.h"
35 #include "llvm/Support/Debug.h"
36 #include "llvm/Support/raw_ostream.h"
37 
38 using namespace llvm;
39 
40 #define DEBUG_TYPE "inline-cost"
41 
42 STATISTIC(NumCallsAnalyzed, "Number of call sites analyzed");
43 
44 static cl::opt<int> InlineThreshold(
45     "inline-threshold", cl::Hidden, cl::init(225), cl::ZeroOrMore,
46     cl::desc("Control the amount of inlining to perform (default = 225)"));
47 
48 static cl::opt<int> HintThreshold(
49     "inlinehint-threshold", cl::Hidden, cl::init(325),
50     cl::desc("Threshold for inlining functions with inline hint"));
51 
52 static cl::opt<int>
53     ColdCallSiteThreshold("inline-cold-callsite-threshold", cl::Hidden,
54                           cl::init(45),
55                           cl::desc("Threshold for inlining cold callsites"));
56 
57 // We introduce this threshold to help performance of instrumentation based
58 // PGO before we actually hook up inliner with analysis passes such as BPI and
59 // BFI.
60 static cl::opt<int> ColdThreshold(
61     "inlinecold-threshold", cl::Hidden, cl::init(45),
62     cl::desc("Threshold for inlining functions with cold attribute"));
63 
64 static cl::opt<int>
65     HotCallSiteThreshold("hot-callsite-threshold", cl::Hidden, cl::init(3000),
66                          cl::ZeroOrMore,
67                          cl::desc("Threshold for hot callsites "));
68 
69 static cl::opt<int> LocallyHotCallSiteThreshold(
70     "locally-hot-callsite-threshold", cl::Hidden, cl::init(525), cl::ZeroOrMore,
71     cl::desc("Threshold for locally hot callsites "));
72 
73 static cl::opt<int> ColdCallSiteRelFreq(
74     "cold-callsite-rel-freq", cl::Hidden, cl::init(2), cl::ZeroOrMore,
75     cl::desc("Maxmimum block frequency, expressed as a percentage of caller's "
76              "entry frequency, for a callsite to be cold in the absence of "
77              "profile information."));
78 
79 static cl::opt<int> HotCallSiteRelFreq(
80     "hot-callsite-rel-freq", cl::Hidden, cl::init(60), cl::ZeroOrMore,
81     cl::desc("Minimum block frequency, expressed as a multiple of caller's "
82              "entry frequency, for a callsite to be hot in the absence of "
83              "profile information."));
84 
85 static cl::opt<bool> ComputeFullInlineCost(
86     "inline-cost-full", cl::Hidden, cl::init(false),
87     cl::desc("Compute the full inline cost of a call site even when the cost "
88              "exceeds the threshold."));
89 
90 namespace {
91 
92 class CallAnalyzer : public InstVisitor<CallAnalyzer, bool> {
93   typedef InstVisitor<CallAnalyzer, bool> Base;
94   friend class InstVisitor<CallAnalyzer, bool>;
95 
96   /// The TargetTransformInfo available for this compilation.
97   const TargetTransformInfo &TTI;
98 
99   /// Getter for the cache of @llvm.assume intrinsics.
100   std::function<AssumptionCache &(Function &)> &GetAssumptionCache;
101 
102   /// Getter for BlockFrequencyInfo
103   Optional<function_ref<BlockFrequencyInfo &(Function &)>> &GetBFI;
104 
105   /// Profile summary information.
106   ProfileSummaryInfo *PSI;
107 
108   /// The called function.
109   Function &F;
110 
111   // Cache the DataLayout since we use it a lot.
112   const DataLayout &DL;
113 
114   /// The OptimizationRemarkEmitter available for this compilation.
115   OptimizationRemarkEmitter *ORE;
116 
117   /// The candidate callsite being analyzed. Please do not use this to do
118   /// analysis in the caller function; we want the inline cost query to be
119   /// easily cacheable. Instead, use the cover function paramHasAttr.
120   CallSite CandidateCS;
121 
122   /// Tunable parameters that control the analysis.
123   const InlineParams &Params;
124 
125   int Threshold;
126   int Cost;
127 
128   bool IsCallerRecursive;
129   bool IsRecursiveCall;
130   bool ExposesReturnsTwice;
131   bool HasDynamicAlloca;
132   bool ContainsNoDuplicateCall;
133   bool HasReturn;
134   bool HasIndirectBr;
135   bool HasFrameEscape;
136 
137   /// Number of bytes allocated statically by the callee.
138   uint64_t AllocatedSize;
139   unsigned NumInstructions, NumVectorInstructions;
140   int VectorBonus, TenPercentVectorBonus;
141   // Bonus to be applied when the callee has only one reachable basic block.
142   int SingleBBBonus;
143 
144   /// While we walk the potentially-inlined instructions, we build up and
145   /// maintain a mapping of simplified values specific to this callsite. The
146   /// idea is to propagate any special information we have about arguments to
147   /// this call through the inlinable section of the function, and account for
148   /// likely simplifications post-inlining. The most important aspect we track
149   /// is CFG altering simplifications -- when we prove a basic block dead, that
150   /// can cause dramatic shifts in the cost of inlining a function.
151   DenseMap<Value *, Constant *> SimplifiedValues;
152 
153   /// Keep track of the values which map back (through function arguments) to
154   /// allocas on the caller stack which could be simplified through SROA.
155   DenseMap<Value *, Value *> SROAArgValues;
156 
157   /// The mapping of caller Alloca values to their accumulated cost savings. If
158   /// we have to disable SROA for one of the allocas, this tells us how much
159   /// cost must be added.
160   DenseMap<Value *, int> SROAArgCosts;
161 
162   /// Keep track of values which map to a pointer base and constant offset.
163   DenseMap<Value *, std::pair<Value *, APInt>> ConstantOffsetPtrs;
164 
165   // Custom simplification helper routines.
166   bool isAllocaDerivedArg(Value *V);
167   bool lookupSROAArgAndCost(Value *V, Value *&Arg,
168                             DenseMap<Value *, int>::iterator &CostIt);
169   void disableSROA(DenseMap<Value *, int>::iterator CostIt);
170   void disableSROA(Value *V);
171   void accumulateSROACost(DenseMap<Value *, int>::iterator CostIt,
172                           int InstructionCost);
173   bool isGEPFree(GetElementPtrInst &GEP);
174   bool accumulateGEPOffset(GEPOperator &GEP, APInt &Offset);
175   bool simplifyCallSite(Function *F, CallSite CS);
176   template <typename Callable>
177   bool simplifyInstruction(Instruction &I, Callable Evaluate);
178   ConstantInt *stripAndComputeInBoundsConstantOffsets(Value *&V);
179 
180   /// Return true if the given argument to the function being considered for
181   /// inlining has the given attribute set either at the call site or the
182   /// function declaration.  Primarily used to inspect call site specific
183   /// attributes since these can be more precise than the ones on the callee
184   /// itself.
185   bool paramHasAttr(Argument *A, Attribute::AttrKind Attr);
186 
187   /// Return true if the given value is known non null within the callee if
188   /// inlined through this particular callsite.
189   bool isKnownNonNullInCallee(Value *V);
190 
191   /// Update Threshold based on callsite properties such as callee
192   /// attributes and callee hotness for PGO builds. The Callee is explicitly
193   /// passed to support analyzing indirect calls whose target is inferred by
194   /// analysis.
195   void updateThreshold(CallSite CS, Function &Callee);
196 
197   /// Return true if size growth is allowed when inlining the callee at CS.
198   bool allowSizeGrowth(CallSite CS);
199 
200   /// Return true if \p CS is a cold callsite.
201   bool isColdCallSite(CallSite CS, BlockFrequencyInfo *CallerBFI);
202 
203   /// Return a higher threshold if \p CS is a hot callsite.
204   Optional<int> getHotCallSiteThreshold(CallSite CS,
205                                         BlockFrequencyInfo *CallerBFI);
206 
207   // Custom analysis routines.
208   bool analyzeBlock(BasicBlock *BB, SmallPtrSetImpl<const Value *> &EphValues);
209 
210   // Disable several entry points to the visitor so we don't accidentally use
211   // them by declaring but not defining them here.
212   void visit(Module *);
213   void visit(Module &);
214   void visit(Function *);
215   void visit(Function &);
216   void visit(BasicBlock *);
217   void visit(BasicBlock &);
218 
219   // Provide base case for our instruction visit.
220   bool visitInstruction(Instruction &I);
221 
222   // Our visit overrides.
223   bool visitAlloca(AllocaInst &I);
224   bool visitPHI(PHINode &I);
225   bool visitGetElementPtr(GetElementPtrInst &I);
226   bool visitBitCast(BitCastInst &I);
227   bool visitPtrToInt(PtrToIntInst &I);
228   bool visitIntToPtr(IntToPtrInst &I);
229   bool visitCastInst(CastInst &I);
230   bool visitUnaryInstruction(UnaryInstruction &I);
231   bool visitCmpInst(CmpInst &I);
232   bool visitAnd(BinaryOperator &I);
233   bool visitOr(BinaryOperator &I);
234   bool visitSub(BinaryOperator &I);
235   bool visitBinaryOperator(BinaryOperator &I);
236   bool visitLoad(LoadInst &I);
237   bool visitStore(StoreInst &I);
238   bool visitExtractValue(ExtractValueInst &I);
239   bool visitInsertValue(InsertValueInst &I);
240   bool visitCallSite(CallSite CS);
241   bool visitReturnInst(ReturnInst &RI);
242   bool visitBranchInst(BranchInst &BI);
243   bool visitSwitchInst(SwitchInst &SI);
244   bool visitIndirectBrInst(IndirectBrInst &IBI);
245   bool visitResumeInst(ResumeInst &RI);
246   bool visitCleanupReturnInst(CleanupReturnInst &RI);
247   bool visitCatchReturnInst(CatchReturnInst &RI);
248   bool visitUnreachableInst(UnreachableInst &I);
249 
250 public:
251   CallAnalyzer(const TargetTransformInfo &TTI,
252                std::function<AssumptionCache &(Function &)> &GetAssumptionCache,
253                Optional<function_ref<BlockFrequencyInfo &(Function &)>> &GetBFI,
254                ProfileSummaryInfo *PSI, OptimizationRemarkEmitter *ORE,
255                Function &Callee, CallSite CSArg, const InlineParams &Params)
256       : TTI(TTI), GetAssumptionCache(GetAssumptionCache), GetBFI(GetBFI),
257         PSI(PSI), F(Callee), DL(F.getParent()->getDataLayout()), ORE(ORE),
258         CandidateCS(CSArg), Params(Params), Threshold(Params.DefaultThreshold),
259         Cost(0), IsCallerRecursive(false), IsRecursiveCall(false),
260         ExposesReturnsTwice(false), HasDynamicAlloca(false),
261         ContainsNoDuplicateCall(false), HasReturn(false), HasIndirectBr(false),
262         HasFrameEscape(false), AllocatedSize(0), NumInstructions(0),
263         NumVectorInstructions(0), VectorBonus(0), SingleBBBonus(0),
264         NumConstantArgs(0), NumConstantOffsetPtrArgs(0), NumAllocaArgs(0),
265         NumConstantPtrCmps(0), NumConstantPtrDiffs(0),
266         NumInstructionsSimplified(0), SROACostSavings(0),
267         SROACostSavingsLost(0) {}
268 
269   bool analyzeCall(CallSite CS);
270 
271   int getThreshold() { return Threshold; }
272   int getCost() { return Cost; }
273 
274   // Keep a bunch of stats about the cost savings found so we can print them
275   // out when debugging.
276   unsigned NumConstantArgs;
277   unsigned NumConstantOffsetPtrArgs;
278   unsigned NumAllocaArgs;
279   unsigned NumConstantPtrCmps;
280   unsigned NumConstantPtrDiffs;
281   unsigned NumInstructionsSimplified;
282   unsigned SROACostSavings;
283   unsigned SROACostSavingsLost;
284 
285   void dump();
286 };
287 
288 } // namespace
289 
290 /// \brief Test whether the given value is an Alloca-derived function argument.
291 bool CallAnalyzer::isAllocaDerivedArg(Value *V) {
292   return SROAArgValues.count(V);
293 }
294 
295 /// \brief Lookup the SROA-candidate argument and cost iterator which V maps to.
296 /// Returns false if V does not map to a SROA-candidate.
297 bool CallAnalyzer::lookupSROAArgAndCost(
298     Value *V, Value *&Arg, DenseMap<Value *, int>::iterator &CostIt) {
299   if (SROAArgValues.empty() || SROAArgCosts.empty())
300     return false;
301 
302   DenseMap<Value *, Value *>::iterator ArgIt = SROAArgValues.find(V);
303   if (ArgIt == SROAArgValues.end())
304     return false;
305 
306   Arg = ArgIt->second;
307   CostIt = SROAArgCosts.find(Arg);
308   return CostIt != SROAArgCosts.end();
309 }
310 
311 /// \brief Disable SROA for the candidate marked by this cost iterator.
312 ///
313 /// This marks the candidate as no longer viable for SROA, and adds the cost
314 /// savings associated with it back into the inline cost measurement.
315 void CallAnalyzer::disableSROA(DenseMap<Value *, int>::iterator CostIt) {
316   // If we're no longer able to perform SROA we need to undo its cost savings
317   // and prevent subsequent analysis.
318   Cost += CostIt->second;
319   SROACostSavings -= CostIt->second;
320   SROACostSavingsLost += CostIt->second;
321   SROAArgCosts.erase(CostIt);
322 }
323 
324 /// \brief If 'V' maps to a SROA candidate, disable SROA for it.
325 void CallAnalyzer::disableSROA(Value *V) {
326   Value *SROAArg;
327   DenseMap<Value *, int>::iterator CostIt;
328   if (lookupSROAArgAndCost(V, SROAArg, CostIt))
329     disableSROA(CostIt);
330 }
331 
332 /// \brief Accumulate the given cost for a particular SROA candidate.
333 void CallAnalyzer::accumulateSROACost(DenseMap<Value *, int>::iterator CostIt,
334                                       int InstructionCost) {
335   CostIt->second += InstructionCost;
336   SROACostSavings += InstructionCost;
337 }
338 
339 /// \brief Accumulate a constant GEP offset into an APInt if possible.
340 ///
341 /// Returns false if unable to compute the offset for any reason. Respects any
342 /// simplified values known during the analysis of this callsite.
343 bool CallAnalyzer::accumulateGEPOffset(GEPOperator &GEP, APInt &Offset) {
344   unsigned IntPtrWidth = DL.getPointerSizeInBits();
345   assert(IntPtrWidth == Offset.getBitWidth());
346 
347   for (gep_type_iterator GTI = gep_type_begin(GEP), GTE = gep_type_end(GEP);
348        GTI != GTE; ++GTI) {
349     ConstantInt *OpC = dyn_cast<ConstantInt>(GTI.getOperand());
350     if (!OpC)
351       if (Constant *SimpleOp = SimplifiedValues.lookup(GTI.getOperand()))
352         OpC = dyn_cast<ConstantInt>(SimpleOp);
353     if (!OpC)
354       return false;
355     if (OpC->isZero())
356       continue;
357 
358     // Handle a struct index, which adds its field offset to the pointer.
359     if (StructType *STy = GTI.getStructTypeOrNull()) {
360       unsigned ElementIdx = OpC->getZExtValue();
361       const StructLayout *SL = DL.getStructLayout(STy);
362       Offset += APInt(IntPtrWidth, SL->getElementOffset(ElementIdx));
363       continue;
364     }
365 
366     APInt TypeSize(IntPtrWidth, DL.getTypeAllocSize(GTI.getIndexedType()));
367     Offset += OpC->getValue().sextOrTrunc(IntPtrWidth) * TypeSize;
368   }
369   return true;
370 }
371 
372 /// \brief Use TTI to check whether a GEP is free.
373 ///
374 /// Respects any simplified values known during the analysis of this callsite.
375 bool CallAnalyzer::isGEPFree(GetElementPtrInst &GEP) {
376   SmallVector<Value *, 4> Operands;
377   Operands.push_back(GEP.getOperand(0));
378   for (User::op_iterator I = GEP.idx_begin(), E = GEP.idx_end(); I != E; ++I)
379     if (Constant *SimpleOp = SimplifiedValues.lookup(*I))
380        Operands.push_back(SimpleOp);
381      else
382        Operands.push_back(*I);
383   return TargetTransformInfo::TCC_Free == TTI.getUserCost(&GEP, Operands);
384 }
385 
386 bool CallAnalyzer::visitAlloca(AllocaInst &I) {
387   // Check whether inlining will turn a dynamic alloca into a static
388   // alloca and handle that case.
389   if (I.isArrayAllocation()) {
390     Constant *Size = SimplifiedValues.lookup(I.getArraySize());
391     if (auto *AllocSize = dyn_cast_or_null<ConstantInt>(Size)) {
392       Type *Ty = I.getAllocatedType();
393       AllocatedSize = SaturatingMultiplyAdd(
394           AllocSize->getLimitedValue(), DL.getTypeAllocSize(Ty), AllocatedSize);
395       return Base::visitAlloca(I);
396     }
397   }
398 
399   // Accumulate the allocated size.
400   if (I.isStaticAlloca()) {
401     Type *Ty = I.getAllocatedType();
402     AllocatedSize = SaturatingAdd(DL.getTypeAllocSize(Ty), AllocatedSize);
403   }
404 
405   // We will happily inline static alloca instructions.
406   if (I.isStaticAlloca())
407     return Base::visitAlloca(I);
408 
409   // FIXME: This is overly conservative. Dynamic allocas are inefficient for
410   // a variety of reasons, and so we would like to not inline them into
411   // functions which don't currently have a dynamic alloca. This simply
412   // disables inlining altogether in the presence of a dynamic alloca.
413   HasDynamicAlloca = true;
414   return false;
415 }
416 
417 bool CallAnalyzer::visitPHI(PHINode &I) {
418   // FIXME: We should potentially be tracking values through phi nodes,
419   // especially when they collapse to a single value due to deleted CFG edges
420   // during inlining.
421 
422   // FIXME: We need to propagate SROA *disabling* through phi nodes, even
423   // though we don't want to propagate it's bonuses. The idea is to disable
424   // SROA if it *might* be used in an inappropriate manner.
425 
426   // Phi nodes are always zero-cost.
427   return true;
428 }
429 
430 bool CallAnalyzer::visitGetElementPtr(GetElementPtrInst &I) {
431   Value *SROAArg;
432   DenseMap<Value *, int>::iterator CostIt;
433   bool SROACandidate =
434       lookupSROAArgAndCost(I.getPointerOperand(), SROAArg, CostIt);
435 
436   // Try to fold GEPs of constant-offset call site argument pointers. This
437   // requires target data and inbounds GEPs.
438   if (I.isInBounds()) {
439     // Check if we have a base + offset for the pointer.
440     Value *Ptr = I.getPointerOperand();
441     std::pair<Value *, APInt> BaseAndOffset = ConstantOffsetPtrs.lookup(Ptr);
442     if (BaseAndOffset.first) {
443       // Check if the offset of this GEP is constant, and if so accumulate it
444       // into Offset.
445       if (!accumulateGEPOffset(cast<GEPOperator>(I), BaseAndOffset.second)) {
446         // Non-constant GEPs aren't folded, and disable SROA.
447         if (SROACandidate)
448           disableSROA(CostIt);
449         return isGEPFree(I);
450       }
451 
452       // Add the result as a new mapping to Base + Offset.
453       ConstantOffsetPtrs[&I] = BaseAndOffset;
454 
455       // Also handle SROA candidates here, we already know that the GEP is
456       // all-constant indexed.
457       if (SROACandidate)
458         SROAArgValues[&I] = SROAArg;
459 
460       return true;
461     }
462   }
463 
464   // Lambda to check whether a GEP's indices are all constant.
465   auto IsGEPOffsetConstant = [&](GetElementPtrInst &GEP) {
466     for (User::op_iterator I = GEP.idx_begin(), E = GEP.idx_end(); I != E; ++I)
467       if (!isa<Constant>(*I) && !SimplifiedValues.lookup(*I))
468         return false;
469     return true;
470   };
471 
472   if (IsGEPOffsetConstant(I)) {
473     if (SROACandidate)
474       SROAArgValues[&I] = SROAArg;
475 
476     // Constant GEPs are modeled as free.
477     return true;
478   }
479 
480   // Variable GEPs will require math and will disable SROA.
481   if (SROACandidate)
482     disableSROA(CostIt);
483   return isGEPFree(I);
484 }
485 
486 /// Simplify \p I if its operands are constants and update SimplifiedValues.
487 /// \p Evaluate is a callable specific to instruction type that evaluates the
488 /// instruction when all the operands are constants.
489 template <typename Callable>
490 bool CallAnalyzer::simplifyInstruction(Instruction &I, Callable Evaluate) {
491   SmallVector<Constant *, 2> COps;
492   for (Value *Op : I.operands()) {
493     Constant *COp = dyn_cast<Constant>(Op);
494     if (!COp)
495       COp = SimplifiedValues.lookup(Op);
496     if (!COp)
497       return false;
498     COps.push_back(COp);
499   }
500   auto *C = Evaluate(COps);
501   if (!C)
502     return false;
503   SimplifiedValues[&I] = C;
504   return true;
505 }
506 
507 bool CallAnalyzer::visitBitCast(BitCastInst &I) {
508   // Propagate constants through bitcasts.
509   if (simplifyInstruction(I, [&](SmallVectorImpl<Constant *> &COps) {
510         return ConstantExpr::getBitCast(COps[0], I.getType());
511       }))
512     return true;
513 
514   // Track base/offsets through casts
515   std::pair<Value *, APInt> BaseAndOffset =
516       ConstantOffsetPtrs.lookup(I.getOperand(0));
517   // Casts don't change the offset, just wrap it up.
518   if (BaseAndOffset.first)
519     ConstantOffsetPtrs[&I] = BaseAndOffset;
520 
521   // Also look for SROA candidates here.
522   Value *SROAArg;
523   DenseMap<Value *, int>::iterator CostIt;
524   if (lookupSROAArgAndCost(I.getOperand(0), SROAArg, CostIt))
525     SROAArgValues[&I] = SROAArg;
526 
527   // Bitcasts are always zero cost.
528   return true;
529 }
530 
531 bool CallAnalyzer::visitPtrToInt(PtrToIntInst &I) {
532   // Propagate constants through ptrtoint.
533   if (simplifyInstruction(I, [&](SmallVectorImpl<Constant *> &COps) {
534         return ConstantExpr::getPtrToInt(COps[0], I.getType());
535       }))
536     return true;
537 
538   // Track base/offset pairs when converted to a plain integer provided the
539   // integer is large enough to represent the pointer.
540   unsigned IntegerSize = I.getType()->getScalarSizeInBits();
541   if (IntegerSize >= DL.getPointerSizeInBits()) {
542     std::pair<Value *, APInt> BaseAndOffset =
543         ConstantOffsetPtrs.lookup(I.getOperand(0));
544     if (BaseAndOffset.first)
545       ConstantOffsetPtrs[&I] = BaseAndOffset;
546   }
547 
548   // This is really weird. Technically, ptrtoint will disable SROA. However,
549   // unless that ptrtoint is *used* somewhere in the live basic blocks after
550   // inlining, it will be nuked, and SROA should proceed. All of the uses which
551   // would block SROA would also block SROA if applied directly to a pointer,
552   // and so we can just add the integer in here. The only places where SROA is
553   // preserved either cannot fire on an integer, or won't in-and-of themselves
554   // disable SROA (ext) w/o some later use that we would see and disable.
555   Value *SROAArg;
556   DenseMap<Value *, int>::iterator CostIt;
557   if (lookupSROAArgAndCost(I.getOperand(0), SROAArg, CostIt))
558     SROAArgValues[&I] = SROAArg;
559 
560   return TargetTransformInfo::TCC_Free == TTI.getUserCost(&I);
561 }
562 
563 bool CallAnalyzer::visitIntToPtr(IntToPtrInst &I) {
564   // Propagate constants through ptrtoint.
565   if (simplifyInstruction(I, [&](SmallVectorImpl<Constant *> &COps) {
566         return ConstantExpr::getIntToPtr(COps[0], I.getType());
567       }))
568     return true;
569 
570   // Track base/offset pairs when round-tripped through a pointer without
571   // modifications provided the integer is not too large.
572   Value *Op = I.getOperand(0);
573   unsigned IntegerSize = Op->getType()->getScalarSizeInBits();
574   if (IntegerSize <= DL.getPointerSizeInBits()) {
575     std::pair<Value *, APInt> BaseAndOffset = ConstantOffsetPtrs.lookup(Op);
576     if (BaseAndOffset.first)
577       ConstantOffsetPtrs[&I] = BaseAndOffset;
578   }
579 
580   // "Propagate" SROA here in the same manner as we do for ptrtoint above.
581   Value *SROAArg;
582   DenseMap<Value *, int>::iterator CostIt;
583   if (lookupSROAArgAndCost(Op, SROAArg, CostIt))
584     SROAArgValues[&I] = SROAArg;
585 
586   return TargetTransformInfo::TCC_Free == TTI.getUserCost(&I);
587 }
588 
589 bool CallAnalyzer::visitCastInst(CastInst &I) {
590   // Propagate constants through ptrtoint.
591   if (simplifyInstruction(I, [&](SmallVectorImpl<Constant *> &COps) {
592         return ConstantExpr::getCast(I.getOpcode(), COps[0], I.getType());
593       }))
594     return true;
595 
596   // Disable SROA in the face of arbitrary casts we don't whitelist elsewhere.
597   disableSROA(I.getOperand(0));
598 
599   return TargetTransformInfo::TCC_Free == TTI.getUserCost(&I);
600 }
601 
602 bool CallAnalyzer::visitUnaryInstruction(UnaryInstruction &I) {
603   Value *Operand = I.getOperand(0);
604   if (simplifyInstruction(I, [&](SmallVectorImpl<Constant *> &COps) {
605         return ConstantFoldInstOperands(&I, COps[0], DL);
606       }))
607     return true;
608 
609   // Disable any SROA on the argument to arbitrary unary operators.
610   disableSROA(Operand);
611 
612   return false;
613 }
614 
615 bool CallAnalyzer::paramHasAttr(Argument *A, Attribute::AttrKind Attr) {
616   return CandidateCS.paramHasAttr(A->getArgNo(), Attr);
617 }
618 
619 bool CallAnalyzer::isKnownNonNullInCallee(Value *V) {
620   // Does the *call site* have the NonNull attribute set on an argument?  We
621   // use the attribute on the call site to memoize any analysis done in the
622   // caller. This will also trip if the callee function has a non-null
623   // parameter attribute, but that's a less interesting case because hopefully
624   // the callee would already have been simplified based on that.
625   if (Argument *A = dyn_cast<Argument>(V))
626     if (paramHasAttr(A, Attribute::NonNull))
627       return true;
628 
629   // Is this an alloca in the caller?  This is distinct from the attribute case
630   // above because attributes aren't updated within the inliner itself and we
631   // always want to catch the alloca derived case.
632   if (isAllocaDerivedArg(V))
633     // We can actually predict the result of comparisons between an
634     // alloca-derived value and null. Note that this fires regardless of
635     // SROA firing.
636     return true;
637 
638   return false;
639 }
640 
641 bool CallAnalyzer::allowSizeGrowth(CallSite CS) {
642   // If the normal destination of the invoke or the parent block of the call
643   // site is unreachable-terminated, there is little point in inlining this
644   // unless there is literally zero cost.
645   // FIXME: Note that it is possible that an unreachable-terminated block has a
646   // hot entry. For example, in below scenario inlining hot_call_X() may be
647   // beneficial :
648   // main() {
649   //   hot_call_1();
650   //   ...
651   //   hot_call_N()
652   //   exit(0);
653   // }
654   // For now, we are not handling this corner case here as it is rare in real
655   // code. In future, we should elaborate this based on BPI and BFI in more
656   // general threshold adjusting heuristics in updateThreshold().
657   Instruction *Instr = CS.getInstruction();
658   if (InvokeInst *II = dyn_cast<InvokeInst>(Instr)) {
659     if (isa<UnreachableInst>(II->getNormalDest()->getTerminator()))
660       return false;
661   } else if (isa<UnreachableInst>(Instr->getParent()->getTerminator()))
662     return false;
663 
664   return true;
665 }
666 
667 bool CallAnalyzer::isColdCallSite(CallSite CS, BlockFrequencyInfo *CallerBFI) {
668   // If global profile summary is available, then callsite's coldness is
669   // determined based on that.
670   if (PSI && PSI->hasProfileSummary())
671     return PSI->isColdCallSite(CS, CallerBFI);
672 
673   // Otherwise we need BFI to be available.
674   if (!CallerBFI)
675     return false;
676 
677   // Determine if the callsite is cold relative to caller's entry. We could
678   // potentially cache the computation of scaled entry frequency, but the added
679   // complexity is not worth it unless this scaling shows up high in the
680   // profiles.
681   const BranchProbability ColdProb(ColdCallSiteRelFreq, 100);
682   auto CallSiteBB = CS.getInstruction()->getParent();
683   auto CallSiteFreq = CallerBFI->getBlockFreq(CallSiteBB);
684   auto CallerEntryFreq =
685       CallerBFI->getBlockFreq(&(CS.getCaller()->getEntryBlock()));
686   return CallSiteFreq < CallerEntryFreq * ColdProb;
687 }
688 
689 Optional<int>
690 CallAnalyzer::getHotCallSiteThreshold(CallSite CS,
691                                       BlockFrequencyInfo *CallerBFI) {
692 
693   // If global profile summary is available, then callsite's hotness is
694   // determined based on that.
695   if (PSI && PSI->hasProfileSummary() && PSI->isHotCallSite(CS, CallerBFI))
696     return Params.HotCallSiteThreshold;
697 
698   // Otherwise we need BFI to be available and to have a locally hot callsite
699   // threshold.
700   if (!CallerBFI || !Params.LocallyHotCallSiteThreshold)
701     return None;
702 
703   // Determine if the callsite is hot relative to caller's entry. We could
704   // potentially cache the computation of scaled entry frequency, but the added
705   // complexity is not worth it unless this scaling shows up high in the
706   // profiles.
707   auto CallSiteBB = CS.getInstruction()->getParent();
708   auto CallSiteFreq = CallerBFI->getBlockFreq(CallSiteBB).getFrequency();
709   auto CallerEntryFreq = CallerBFI->getEntryFreq();
710   if (CallSiteFreq >= CallerEntryFreq * HotCallSiteRelFreq)
711     return Params.LocallyHotCallSiteThreshold;
712 
713   // Otherwise treat it normally.
714   return None;
715 }
716 
717 void CallAnalyzer::updateThreshold(CallSite CS, Function &Callee) {
718   // If no size growth is allowed for this inlining, set Threshold to 0.
719   if (!allowSizeGrowth(CS)) {
720     Threshold = 0;
721     return;
722   }
723 
724   Function *Caller = CS.getCaller();
725 
726   // return min(A, B) if B is valid.
727   auto MinIfValid = [](int A, Optional<int> B) {
728     return B ? std::min(A, B.getValue()) : A;
729   };
730 
731   // return max(A, B) if B is valid.
732   auto MaxIfValid = [](int A, Optional<int> B) {
733     return B ? std::max(A, B.getValue()) : A;
734   };
735 
736   // Various bonus percentages. These are multiplied by Threshold to get the
737   // bonus values.
738   // SingleBBBonus: This bonus is applied if the callee has a single reachable
739   // basic block at the given callsite context. This is speculatively applied
740   // and withdrawn if more than one basic block is seen.
741   //
742   // Vector bonuses: We want to more aggressively inline vector-dense kernels
743   // and apply this bonus based on the percentage of vector instructions. A
744   // bonus is applied if the vector instructions exceed 50% and half that amount
745   // is applied if it exceeds 10%. Note that these bonuses are some what
746   // arbitrary and evolved over time by accident as much as because they are
747   // principled bonuses.
748   // FIXME: It would be nice to base the bonus values on something more
749   // scientific.
750   //
751   // LstCallToStaticBonus: This large bonus is applied to ensure the inlining
752   // of the last call to a static function as inlining such functions is
753   // guaranteed to reduce code size.
754   //
755   // These bonus percentages may be set to 0 based on properties of the caller
756   // and the callsite.
757   int SingleBBBonusPercent = 50;
758   int VectorBonusPercent = 150;
759   int LastCallToStaticBonus = InlineConstants::LastCallToStaticBonus;
760 
761   // Lambda to set all the above bonus and bonus percentages to 0.
762   auto DisallowAllBonuses = [&]() {
763     SingleBBBonusPercent = 0;
764     VectorBonusPercent = 0;
765     LastCallToStaticBonus = 0;
766   };
767 
768   // Use the OptMinSizeThreshold or OptSizeThreshold knob if they are available
769   // and reduce the threshold if the caller has the necessary attribute.
770   if (Caller->optForMinSize()) {
771     Threshold = MinIfValid(Threshold, Params.OptMinSizeThreshold);
772     // For minsize, we want to disable the single BB bonus and the vector
773     // bonuses, but not the last-call-to-static bonus. Inlining the last call to
774     // a static function will, at the minimum, eliminate the parameter setup and
775     // call/return instructions.
776     SingleBBBonusPercent = 0;
777     VectorBonusPercent = 0;
778   } else if (Caller->optForSize())
779     Threshold = MinIfValid(Threshold, Params.OptSizeThreshold);
780 
781   // Adjust the threshold based on inlinehint attribute and profile based
782   // hotness information if the caller does not have MinSize attribute.
783   if (!Caller->optForMinSize()) {
784     if (Callee.hasFnAttribute(Attribute::InlineHint))
785       Threshold = MaxIfValid(Threshold, Params.HintThreshold);
786 
787     // FIXME: After switching to the new passmanager, simplify the logic below
788     // by checking only the callsite hotness/coldness as we will reliably
789     // have local profile information.
790     //
791     // Callsite hotness and coldness can be determined if sample profile is
792     // used (which adds hotness metadata to calls) or if caller's
793     // BlockFrequencyInfo is available.
794     BlockFrequencyInfo *CallerBFI = GetBFI ? &((*GetBFI)(*Caller)) : nullptr;
795     auto HotCallSiteThreshold = getHotCallSiteThreshold(CS, CallerBFI);
796     if (!Caller->optForSize() && HotCallSiteThreshold) {
797       DEBUG(dbgs() << "Hot callsite.\n");
798       // FIXME: This should update the threshold only if it exceeds the
799       // current threshold, but AutoFDO + ThinLTO currently relies on this
800       // behavior to prevent inlining of hot callsites during ThinLTO
801       // compile phase.
802       Threshold = HotCallSiteThreshold.getValue();
803     } else if (isColdCallSite(CS, CallerBFI)) {
804       DEBUG(dbgs() << "Cold callsite.\n");
805       // Do not apply bonuses for a cold callsite including the
806       // LastCallToStatic bonus. While this bonus might result in code size
807       // reduction, it can cause the size of a non-cold caller to increase
808       // preventing it from being inlined.
809       DisallowAllBonuses();
810       Threshold = MinIfValid(Threshold, Params.ColdCallSiteThreshold);
811     } else if (PSI) {
812       // Use callee's global profile information only if we have no way of
813       // determining this via callsite information.
814       if (PSI->isFunctionEntryHot(&Callee)) {
815         DEBUG(dbgs() << "Hot callee.\n");
816         // If callsite hotness can not be determined, we may still know
817         // that the callee is hot and treat it as a weaker hint for threshold
818         // increase.
819         Threshold = MaxIfValid(Threshold, Params.HintThreshold);
820       } else if (PSI->isFunctionEntryCold(&Callee)) {
821         DEBUG(dbgs() << "Cold callee.\n");
822         // Do not apply bonuses for a cold callee including the
823         // LastCallToStatic bonus. While this bonus might result in code size
824         // reduction, it can cause the size of a non-cold caller to increase
825         // preventing it from being inlined.
826         DisallowAllBonuses();
827         Threshold = MinIfValid(Threshold, Params.ColdThreshold);
828       }
829     }
830   }
831 
832   // Finally, take the target-specific inlining threshold multiplier into
833   // account.
834   Threshold *= TTI.getInliningThresholdMultiplier();
835 
836   SingleBBBonus = Threshold * SingleBBBonusPercent / 100;
837   VectorBonus = Threshold * VectorBonusPercent / 100;
838 
839   bool OnlyOneCallAndLocalLinkage =
840       F.hasLocalLinkage() && F.hasOneUse() && &F == CS.getCalledFunction();
841   // If there is only one call of the function, and it has internal linkage,
842   // the cost of inlining it drops dramatically. It may seem odd to update
843   // Cost in updateThreshold, but the bonus depends on the logic in this method.
844   if (OnlyOneCallAndLocalLinkage)
845     Cost -= LastCallToStaticBonus;
846 }
847 
848 bool CallAnalyzer::visitCmpInst(CmpInst &I) {
849   Value *LHS = I.getOperand(0), *RHS = I.getOperand(1);
850   // First try to handle simplified comparisons.
851   if (simplifyInstruction(I, [&](SmallVectorImpl<Constant *> &COps) {
852         return ConstantExpr::getCompare(I.getPredicate(), COps[0], COps[1]);
853       }))
854     return true;
855 
856   if (I.getOpcode() == Instruction::FCmp)
857     return false;
858 
859   // Otherwise look for a comparison between constant offset pointers with
860   // a common base.
861   Value *LHSBase, *RHSBase;
862   APInt LHSOffset, RHSOffset;
863   std::tie(LHSBase, LHSOffset) = ConstantOffsetPtrs.lookup(LHS);
864   if (LHSBase) {
865     std::tie(RHSBase, RHSOffset) = ConstantOffsetPtrs.lookup(RHS);
866     if (RHSBase && LHSBase == RHSBase) {
867       // We have common bases, fold the icmp to a constant based on the
868       // offsets.
869       Constant *CLHS = ConstantInt::get(LHS->getContext(), LHSOffset);
870       Constant *CRHS = ConstantInt::get(RHS->getContext(), RHSOffset);
871       if (Constant *C = ConstantExpr::getICmp(I.getPredicate(), CLHS, CRHS)) {
872         SimplifiedValues[&I] = C;
873         ++NumConstantPtrCmps;
874         return true;
875       }
876     }
877   }
878 
879   // If the comparison is an equality comparison with null, we can simplify it
880   // if we know the value (argument) can't be null
881   if (I.isEquality() && isa<ConstantPointerNull>(I.getOperand(1)) &&
882       isKnownNonNullInCallee(I.getOperand(0))) {
883     bool IsNotEqual = I.getPredicate() == CmpInst::ICMP_NE;
884     SimplifiedValues[&I] = IsNotEqual ? ConstantInt::getTrue(I.getType())
885                                       : ConstantInt::getFalse(I.getType());
886     return true;
887   }
888   // Finally check for SROA candidates in comparisons.
889   Value *SROAArg;
890   DenseMap<Value *, int>::iterator CostIt;
891   if (lookupSROAArgAndCost(I.getOperand(0), SROAArg, CostIt)) {
892     if (isa<ConstantPointerNull>(I.getOperand(1))) {
893       accumulateSROACost(CostIt, InlineConstants::InstrCost);
894       return true;
895     }
896 
897     disableSROA(CostIt);
898   }
899 
900   return false;
901 }
902 
903 bool CallAnalyzer::visitOr(BinaryOperator &I) {
904   // This is necessary because the generic simplify instruction only works if
905   // both operands are constants.
906   for (unsigned i = 0; i < 2; ++i) {
907     if (ConstantInt *C = dyn_cast_or_null<ConstantInt>(
908             SimplifiedValues.lookup(I.getOperand(i))))
909       if (C->isAllOnesValue()) {
910         SimplifiedValues[&I] = C;
911         return true;
912       }
913   }
914   return Base::visitOr(I);
915 }
916 
917 bool CallAnalyzer::visitAnd(BinaryOperator &I) {
918   // This is necessary because the generic simplify instruction only works if
919   // both operands are constants.
920   for (unsigned i = 0; i < 2; ++i) {
921     if (ConstantInt *C = dyn_cast_or_null<ConstantInt>(
922             SimplifiedValues.lookup(I.getOperand(i))))
923       if (C->isZero()) {
924         SimplifiedValues[&I] = C;
925         return true;
926       }
927   }
928   return Base::visitAnd(I);
929 }
930 
931 bool CallAnalyzer::visitSub(BinaryOperator &I) {
932   // Try to handle a special case: we can fold computing the difference of two
933   // constant-related pointers.
934   Value *LHS = I.getOperand(0), *RHS = I.getOperand(1);
935   Value *LHSBase, *RHSBase;
936   APInt LHSOffset, RHSOffset;
937   std::tie(LHSBase, LHSOffset) = ConstantOffsetPtrs.lookup(LHS);
938   if (LHSBase) {
939     std::tie(RHSBase, RHSOffset) = ConstantOffsetPtrs.lookup(RHS);
940     if (RHSBase && LHSBase == RHSBase) {
941       // We have common bases, fold the subtract to a constant based on the
942       // offsets.
943       Constant *CLHS = ConstantInt::get(LHS->getContext(), LHSOffset);
944       Constant *CRHS = ConstantInt::get(RHS->getContext(), RHSOffset);
945       if (Constant *C = ConstantExpr::getSub(CLHS, CRHS)) {
946         SimplifiedValues[&I] = C;
947         ++NumConstantPtrDiffs;
948         return true;
949       }
950     }
951   }
952 
953   // Otherwise, fall back to the generic logic for simplifying and handling
954   // instructions.
955   return Base::visitSub(I);
956 }
957 
958 bool CallAnalyzer::visitBinaryOperator(BinaryOperator &I) {
959   Value *LHS = I.getOperand(0), *RHS = I.getOperand(1);
960   auto Evaluate = [&](SmallVectorImpl<Constant *> &COps) {
961     Value *SimpleV = nullptr;
962     if (auto FI = dyn_cast<FPMathOperator>(&I))
963       SimpleV = SimplifyFPBinOp(I.getOpcode(), COps[0], COps[1],
964                                 FI->getFastMathFlags(), DL);
965     else
966       SimpleV = SimplifyBinOp(I.getOpcode(), COps[0], COps[1], DL);
967     return dyn_cast_or_null<Constant>(SimpleV);
968   };
969 
970   if (simplifyInstruction(I, Evaluate))
971     return true;
972 
973   // Disable any SROA on arguments to arbitrary, unsimplified binary operators.
974   disableSROA(LHS);
975   disableSROA(RHS);
976 
977   return false;
978 }
979 
980 bool CallAnalyzer::visitLoad(LoadInst &I) {
981   Value *SROAArg;
982   DenseMap<Value *, int>::iterator CostIt;
983   if (lookupSROAArgAndCost(I.getPointerOperand(), SROAArg, CostIt)) {
984     if (I.isSimple()) {
985       accumulateSROACost(CostIt, InlineConstants::InstrCost);
986       return true;
987     }
988 
989     disableSROA(CostIt);
990   }
991 
992   return false;
993 }
994 
995 bool CallAnalyzer::visitStore(StoreInst &I) {
996   Value *SROAArg;
997   DenseMap<Value *, int>::iterator CostIt;
998   if (lookupSROAArgAndCost(I.getPointerOperand(), SROAArg, CostIt)) {
999     if (I.isSimple()) {
1000       accumulateSROACost(CostIt, InlineConstants::InstrCost);
1001       return true;
1002     }
1003 
1004     disableSROA(CostIt);
1005   }
1006 
1007   return false;
1008 }
1009 
1010 bool CallAnalyzer::visitExtractValue(ExtractValueInst &I) {
1011   // Constant folding for extract value is trivial.
1012   if (simplifyInstruction(I, [&](SmallVectorImpl<Constant *> &COps) {
1013         return ConstantExpr::getExtractValue(COps[0], I.getIndices());
1014       }))
1015     return true;
1016 
1017   // SROA can look through these but give them a cost.
1018   return false;
1019 }
1020 
1021 bool CallAnalyzer::visitInsertValue(InsertValueInst &I) {
1022   // Constant folding for insert value is trivial.
1023   if (simplifyInstruction(I, [&](SmallVectorImpl<Constant *> &COps) {
1024         return ConstantExpr::getInsertValue(/*AggregateOperand*/ COps[0],
1025                                             /*InsertedValueOperand*/ COps[1],
1026                                             I.getIndices());
1027       }))
1028     return true;
1029 
1030   // SROA can look through these but give them a cost.
1031   return false;
1032 }
1033 
1034 /// \brief Try to simplify a call site.
1035 ///
1036 /// Takes a concrete function and callsite and tries to actually simplify it by
1037 /// analyzing the arguments and call itself with instsimplify. Returns true if
1038 /// it has simplified the callsite to some other entity (a constant), making it
1039 /// free.
1040 bool CallAnalyzer::simplifyCallSite(Function *F, CallSite CS) {
1041   // FIXME: Using the instsimplify logic directly for this is inefficient
1042   // because we have to continually rebuild the argument list even when no
1043   // simplifications can be performed. Until that is fixed with remapping
1044   // inside of instsimplify, directly constant fold calls here.
1045   if (!canConstantFoldCallTo(CS, F))
1046     return false;
1047 
1048   // Try to re-map the arguments to constants.
1049   SmallVector<Constant *, 4> ConstantArgs;
1050   ConstantArgs.reserve(CS.arg_size());
1051   for (CallSite::arg_iterator I = CS.arg_begin(), E = CS.arg_end(); I != E;
1052        ++I) {
1053     Constant *C = dyn_cast<Constant>(*I);
1054     if (!C)
1055       C = dyn_cast_or_null<Constant>(SimplifiedValues.lookup(*I));
1056     if (!C)
1057       return false; // This argument doesn't map to a constant.
1058 
1059     ConstantArgs.push_back(C);
1060   }
1061   if (Constant *C = ConstantFoldCall(CS, F, ConstantArgs)) {
1062     SimplifiedValues[CS.getInstruction()] = C;
1063     return true;
1064   }
1065 
1066   return false;
1067 }
1068 
1069 bool CallAnalyzer::visitCallSite(CallSite CS) {
1070   if (CS.hasFnAttr(Attribute::ReturnsTwice) &&
1071       !F.hasFnAttribute(Attribute::ReturnsTwice)) {
1072     // This aborts the entire analysis.
1073     ExposesReturnsTwice = true;
1074     return false;
1075   }
1076   if (CS.isCall() && cast<CallInst>(CS.getInstruction())->cannotDuplicate())
1077     ContainsNoDuplicateCall = true;
1078 
1079   if (Function *F = CS.getCalledFunction()) {
1080     // When we have a concrete function, first try to simplify it directly.
1081     if (simplifyCallSite(F, CS))
1082       return true;
1083 
1084     // Next check if it is an intrinsic we know about.
1085     // FIXME: Lift this into part of the InstVisitor.
1086     if (IntrinsicInst *II = dyn_cast<IntrinsicInst>(CS.getInstruction())) {
1087       switch (II->getIntrinsicID()) {
1088       default:
1089         return Base::visitCallSite(CS);
1090 
1091       case Intrinsic::load_relative:
1092         // This is normally lowered to 4 LLVM instructions.
1093         Cost += 3 * InlineConstants::InstrCost;
1094         return false;
1095 
1096       case Intrinsic::memset:
1097       case Intrinsic::memcpy:
1098       case Intrinsic::memmove:
1099         // SROA can usually chew through these intrinsics, but they aren't free.
1100         return false;
1101       case Intrinsic::localescape:
1102         HasFrameEscape = true;
1103         return false;
1104       }
1105     }
1106 
1107     if (F == CS.getInstruction()->getParent()->getParent()) {
1108       // This flag will fully abort the analysis, so don't bother with anything
1109       // else.
1110       IsRecursiveCall = true;
1111       return false;
1112     }
1113 
1114     if (TTI.isLoweredToCall(F)) {
1115       // We account for the average 1 instruction per call argument setup
1116       // here.
1117       Cost += CS.arg_size() * InlineConstants::InstrCost;
1118 
1119       // Everything other than inline ASM will also have a significant cost
1120       // merely from making the call.
1121       if (!isa<InlineAsm>(CS.getCalledValue()))
1122         Cost += InlineConstants::CallPenalty;
1123     }
1124 
1125     return Base::visitCallSite(CS);
1126   }
1127 
1128   // Otherwise we're in a very special case -- an indirect function call. See
1129   // if we can be particularly clever about this.
1130   Value *Callee = CS.getCalledValue();
1131 
1132   // First, pay the price of the argument setup. We account for the average
1133   // 1 instruction per call argument setup here.
1134   Cost += CS.arg_size() * InlineConstants::InstrCost;
1135 
1136   // Next, check if this happens to be an indirect function call to a known
1137   // function in this inline context. If not, we've done all we can.
1138   Function *F = dyn_cast_or_null<Function>(SimplifiedValues.lookup(Callee));
1139   if (!F)
1140     return Base::visitCallSite(CS);
1141 
1142   // If we have a constant that we are calling as a function, we can peer
1143   // through it and see the function target. This happens not infrequently
1144   // during devirtualization and so we want to give it a hefty bonus for
1145   // inlining, but cap that bonus in the event that inlining wouldn't pan
1146   // out. Pretend to inline the function, with a custom threshold.
1147   auto IndirectCallParams = Params;
1148   IndirectCallParams.DefaultThreshold = InlineConstants::IndirectCallThreshold;
1149   CallAnalyzer CA(TTI, GetAssumptionCache, GetBFI, PSI, ORE, *F, CS,
1150                   IndirectCallParams);
1151   if (CA.analyzeCall(CS)) {
1152     // We were able to inline the indirect call! Subtract the cost from the
1153     // threshold to get the bonus we want to apply, but don't go below zero.
1154     Cost -= std::max(0, CA.getThreshold() - CA.getCost());
1155   }
1156 
1157   return Base::visitCallSite(CS);
1158 }
1159 
1160 bool CallAnalyzer::visitReturnInst(ReturnInst &RI) {
1161   // At least one return instruction will be free after inlining.
1162   bool Free = !HasReturn;
1163   HasReturn = true;
1164   return Free;
1165 }
1166 
1167 bool CallAnalyzer::visitBranchInst(BranchInst &BI) {
1168   // We model unconditional branches as essentially free -- they really
1169   // shouldn't exist at all, but handling them makes the behavior of the
1170   // inliner more regular and predictable. Interestingly, conditional branches
1171   // which will fold away are also free.
1172   return BI.isUnconditional() || isa<ConstantInt>(BI.getCondition()) ||
1173          dyn_cast_or_null<ConstantInt>(
1174              SimplifiedValues.lookup(BI.getCondition()));
1175 }
1176 
1177 bool CallAnalyzer::visitSwitchInst(SwitchInst &SI) {
1178   // We model unconditional switches as free, see the comments on handling
1179   // branches.
1180   if (isa<ConstantInt>(SI.getCondition()))
1181     return true;
1182   if (Value *V = SimplifiedValues.lookup(SI.getCondition()))
1183     if (isa<ConstantInt>(V))
1184       return true;
1185 
1186   // Assume the most general case where the switch is lowered into
1187   // either a jump table, bit test, or a balanced binary tree consisting of
1188   // case clusters without merging adjacent clusters with the same
1189   // destination. We do not consider the switches that are lowered with a mix
1190   // of jump table/bit test/binary search tree. The cost of the switch is
1191   // proportional to the size of the tree or the size of jump table range.
1192   //
1193   // NB: We convert large switches which are just used to initialize large phi
1194   // nodes to lookup tables instead in simplify-cfg, so this shouldn't prevent
1195   // inlining those. It will prevent inlining in cases where the optimization
1196   // does not (yet) fire.
1197 
1198   // Maximum valid cost increased in this function.
1199   int CostUpperBound = INT_MAX - InlineConstants::InstrCost - 1;
1200 
1201   // Exit early for a large switch, assuming one case needs at least one
1202   // instruction.
1203   // FIXME: This is not true for a bit test, but ignore such case for now to
1204   // save compile-time.
1205   int64_t CostLowerBound =
1206       std::min((int64_t)CostUpperBound,
1207                (int64_t)SI.getNumCases() * InlineConstants::InstrCost + Cost);
1208 
1209   if (CostLowerBound > Threshold && !ComputeFullInlineCost) {
1210     Cost = CostLowerBound;
1211     return false;
1212   }
1213 
1214   unsigned JumpTableSize = 0;
1215   unsigned NumCaseCluster =
1216       TTI.getEstimatedNumberOfCaseClusters(SI, JumpTableSize);
1217 
1218   // If suitable for a jump table, consider the cost for the table size and
1219   // branch to destination.
1220   if (JumpTableSize) {
1221     int64_t JTCost = (int64_t)JumpTableSize * InlineConstants::InstrCost +
1222                      4 * InlineConstants::InstrCost;
1223 
1224     Cost = std::min((int64_t)CostUpperBound, JTCost + Cost);
1225     return false;
1226   }
1227 
1228   // Considering forming a binary search, we should find the number of nodes
1229   // which is same as the number of comparisons when lowered. For a given
1230   // number of clusters, n, we can define a recursive function, f(n), to find
1231   // the number of nodes in the tree. The recursion is :
1232   // f(n) = 1 + f(n/2) + f (n - n/2), when n > 3,
1233   // and f(n) = n, when n <= 3.
1234   // This will lead a binary tree where the leaf should be either f(2) or f(3)
1235   // when n > 3.  So, the number of comparisons from leaves should be n, while
1236   // the number of non-leaf should be :
1237   //   2^(log2(n) - 1) - 1
1238   //   = 2^log2(n) * 2^-1 - 1
1239   //   = n / 2 - 1.
1240   // Considering comparisons from leaf and non-leaf nodes, we can estimate the
1241   // number of comparisons in a simple closed form :
1242   //   n + n / 2 - 1 = n * 3 / 2 - 1
1243   if (NumCaseCluster <= 3) {
1244     // Suppose a comparison includes one compare and one conditional branch.
1245     Cost += NumCaseCluster * 2 * InlineConstants::InstrCost;
1246     return false;
1247   }
1248 
1249   int64_t ExpectedNumberOfCompare = 3 * (int64_t)NumCaseCluster / 2 - 1;
1250   int64_t SwitchCost =
1251       ExpectedNumberOfCompare * 2 * InlineConstants::InstrCost;
1252 
1253   Cost = std::min((int64_t)CostUpperBound, SwitchCost + Cost);
1254   return false;
1255 }
1256 
1257 bool CallAnalyzer::visitIndirectBrInst(IndirectBrInst &IBI) {
1258   // We never want to inline functions that contain an indirectbr.  This is
1259   // incorrect because all the blockaddress's (in static global initializers
1260   // for example) would be referring to the original function, and this
1261   // indirect jump would jump from the inlined copy of the function into the
1262   // original function which is extremely undefined behavior.
1263   // FIXME: This logic isn't really right; we can safely inline functions with
1264   // indirectbr's as long as no other function or global references the
1265   // blockaddress of a block within the current function.
1266   HasIndirectBr = true;
1267   return false;
1268 }
1269 
1270 bool CallAnalyzer::visitResumeInst(ResumeInst &RI) {
1271   // FIXME: It's not clear that a single instruction is an accurate model for
1272   // the inline cost of a resume instruction.
1273   return false;
1274 }
1275 
1276 bool CallAnalyzer::visitCleanupReturnInst(CleanupReturnInst &CRI) {
1277   // FIXME: It's not clear that a single instruction is an accurate model for
1278   // the inline cost of a cleanupret instruction.
1279   return false;
1280 }
1281 
1282 bool CallAnalyzer::visitCatchReturnInst(CatchReturnInst &CRI) {
1283   // FIXME: It's not clear that a single instruction is an accurate model for
1284   // the inline cost of a catchret instruction.
1285   return false;
1286 }
1287 
1288 bool CallAnalyzer::visitUnreachableInst(UnreachableInst &I) {
1289   // FIXME: It might be reasonably to discount the cost of instructions leading
1290   // to unreachable as they have the lowest possible impact on both runtime and
1291   // code size.
1292   return true; // No actual code is needed for unreachable.
1293 }
1294 
1295 bool CallAnalyzer::visitInstruction(Instruction &I) {
1296   // Some instructions are free. All of the free intrinsics can also be
1297   // handled by SROA, etc.
1298   if (TargetTransformInfo::TCC_Free == TTI.getUserCost(&I))
1299     return true;
1300 
1301   // We found something we don't understand or can't handle. Mark any SROA-able
1302   // values in the operand list as no longer viable.
1303   for (User::op_iterator OI = I.op_begin(), OE = I.op_end(); OI != OE; ++OI)
1304     disableSROA(*OI);
1305 
1306   return false;
1307 }
1308 
1309 /// \brief Analyze a basic block for its contribution to the inline cost.
1310 ///
1311 /// This method walks the analyzer over every instruction in the given basic
1312 /// block and accounts for their cost during inlining at this callsite. It
1313 /// aborts early if the threshold has been exceeded or an impossible to inline
1314 /// construct has been detected. It returns false if inlining is no longer
1315 /// viable, and true if inlining remains viable.
1316 bool CallAnalyzer::analyzeBlock(BasicBlock *BB,
1317                                 SmallPtrSetImpl<const Value *> &EphValues) {
1318   for (BasicBlock::iterator I = BB->begin(), E = BB->end(); I != E; ++I) {
1319     // FIXME: Currently, the number of instructions in a function regardless of
1320     // our ability to simplify them during inline to constants or dead code,
1321     // are actually used by the vector bonus heuristic. As long as that's true,
1322     // we have to special case debug intrinsics here to prevent differences in
1323     // inlining due to debug symbols. Eventually, the number of unsimplified
1324     // instructions shouldn't factor into the cost computation, but until then,
1325     // hack around it here.
1326     if (isa<DbgInfoIntrinsic>(I))
1327       continue;
1328 
1329     // Skip ephemeral values.
1330     if (EphValues.count(&*I))
1331       continue;
1332 
1333     ++NumInstructions;
1334     if (isa<ExtractElementInst>(I) || I->getType()->isVectorTy())
1335       ++NumVectorInstructions;
1336 
1337     // If the instruction is floating point, and the target says this operation
1338     // is expensive or the function has the "use-soft-float" attribute, this may
1339     // eventually become a library call. Treat the cost as such.
1340     if (I->getType()->isFloatingPointTy()) {
1341       // If the function has the "use-soft-float" attribute, mark it as
1342       // expensive.
1343       if (TTI.getFPOpCost(I->getType()) == TargetTransformInfo::TCC_Expensive ||
1344           (F.getFnAttribute("use-soft-float").getValueAsString() == "true"))
1345         Cost += InlineConstants::CallPenalty;
1346     }
1347 
1348     // If the instruction simplified to a constant, there is no cost to this
1349     // instruction. Visit the instructions using our InstVisitor to account for
1350     // all of the per-instruction logic. The visit tree returns true if we
1351     // consumed the instruction in any way, and false if the instruction's base
1352     // cost should count against inlining.
1353     if (Base::visit(&*I))
1354       ++NumInstructionsSimplified;
1355     else
1356       Cost += InlineConstants::InstrCost;
1357 
1358     using namespace ore;
1359     // If the visit this instruction detected an uninlinable pattern, abort.
1360     if (IsRecursiveCall || ExposesReturnsTwice || HasDynamicAlloca ||
1361         HasIndirectBr || HasFrameEscape) {
1362       if (ORE)
1363         ORE->emit(OptimizationRemarkMissed(DEBUG_TYPE, "NeverInline",
1364                                            CandidateCS.getInstruction())
1365                   << NV("Callee", &F)
1366                   << " has uninlinable pattern and cost is not fully computed");
1367       return false;
1368     }
1369 
1370     // If the caller is a recursive function then we don't want to inline
1371     // functions which allocate a lot of stack space because it would increase
1372     // the caller stack usage dramatically.
1373     if (IsCallerRecursive &&
1374         AllocatedSize > InlineConstants::TotalAllocaSizeRecursiveCaller) {
1375       if (ORE)
1376         ORE->emit(
1377             OptimizationRemarkMissed(DEBUG_TYPE, "NeverInline",
1378                                      CandidateCS.getInstruction())
1379             << NV("Callee", &F)
1380             << " is recursive and allocates too much stack space. Cost is "
1381                "not fully computed");
1382       return false;
1383     }
1384 
1385     // Check if we've past the maximum possible threshold so we don't spin in
1386     // huge basic blocks that will never inline.
1387     if (Cost >= Threshold && !ComputeFullInlineCost)
1388       return false;
1389   }
1390 
1391   return true;
1392 }
1393 
1394 /// \brief Compute the base pointer and cumulative constant offsets for V.
1395 ///
1396 /// This strips all constant offsets off of V, leaving it the base pointer, and
1397 /// accumulates the total constant offset applied in the returned constant. It
1398 /// returns 0 if V is not a pointer, and returns the constant '0' if there are
1399 /// no constant offsets applied.
1400 ConstantInt *CallAnalyzer::stripAndComputeInBoundsConstantOffsets(Value *&V) {
1401   if (!V->getType()->isPointerTy())
1402     return nullptr;
1403 
1404   unsigned IntPtrWidth = DL.getPointerSizeInBits();
1405   APInt Offset = APInt::getNullValue(IntPtrWidth);
1406 
1407   // Even though we don't look through PHI nodes, we could be called on an
1408   // instruction in an unreachable block, which may be on a cycle.
1409   SmallPtrSet<Value *, 4> Visited;
1410   Visited.insert(V);
1411   do {
1412     if (GEPOperator *GEP = dyn_cast<GEPOperator>(V)) {
1413       if (!GEP->isInBounds() || !accumulateGEPOffset(*GEP, Offset))
1414         return nullptr;
1415       V = GEP->getPointerOperand();
1416     } else if (Operator::getOpcode(V) == Instruction::BitCast) {
1417       V = cast<Operator>(V)->getOperand(0);
1418     } else if (GlobalAlias *GA = dyn_cast<GlobalAlias>(V)) {
1419       if (GA->isInterposable())
1420         break;
1421       V = GA->getAliasee();
1422     } else {
1423       break;
1424     }
1425     assert(V->getType()->isPointerTy() && "Unexpected operand type!");
1426   } while (Visited.insert(V).second);
1427 
1428   Type *IntPtrTy = DL.getIntPtrType(V->getContext());
1429   return cast<ConstantInt>(ConstantInt::get(IntPtrTy, Offset));
1430 }
1431 
1432 /// \brief Analyze a call site for potential inlining.
1433 ///
1434 /// Returns true if inlining this call is viable, and false if it is not
1435 /// viable. It computes the cost and adjusts the threshold based on numerous
1436 /// factors and heuristics. If this method returns false but the computed cost
1437 /// is below the computed threshold, then inlining was forcibly disabled by
1438 /// some artifact of the routine.
1439 bool CallAnalyzer::analyzeCall(CallSite CS) {
1440   ++NumCallsAnalyzed;
1441 
1442   // Perform some tweaks to the cost and threshold based on the direct
1443   // callsite information.
1444 
1445   // We want to more aggressively inline vector-dense kernels, so up the
1446   // threshold, and we'll lower it if the % of vector instructions gets too
1447   // low. Note that these bonuses are some what arbitrary and evolved over time
1448   // by accident as much as because they are principled bonuses.
1449   //
1450   // FIXME: It would be nice to remove all such bonuses. At least it would be
1451   // nice to base the bonus values on something more scientific.
1452   assert(NumInstructions == 0);
1453   assert(NumVectorInstructions == 0);
1454 
1455   // Update the threshold based on callsite properties
1456   updateThreshold(CS, F);
1457 
1458   // Speculatively apply all possible bonuses to Threshold. If cost exceeds
1459   // this Threshold any time, and cost cannot decrease, we can stop processing
1460   // the rest of the function body.
1461   Threshold += (SingleBBBonus + VectorBonus);
1462 
1463   // Give out bonuses for the callsite, as the instructions setting them up
1464   // will be gone after inlining.
1465   Cost -= getCallsiteCost(CS, DL);
1466 
1467   // If this function uses the coldcc calling convention, prefer not to inline
1468   // it.
1469   if (F.getCallingConv() == CallingConv::Cold)
1470     Cost += InlineConstants::ColdccPenalty;
1471 
1472   // Check if we're done. This can happen due to bonuses and penalties.
1473   if (Cost >= Threshold && !ComputeFullInlineCost)
1474     return false;
1475 
1476   if (F.empty())
1477     return true;
1478 
1479   Function *Caller = CS.getInstruction()->getParent()->getParent();
1480   // Check if the caller function is recursive itself.
1481   for (User *U : Caller->users()) {
1482     CallSite Site(U);
1483     if (!Site)
1484       continue;
1485     Instruction *I = Site.getInstruction();
1486     if (I->getParent()->getParent() == Caller) {
1487       IsCallerRecursive = true;
1488       break;
1489     }
1490   }
1491 
1492   // Populate our simplified values by mapping from function arguments to call
1493   // arguments with known important simplifications.
1494   CallSite::arg_iterator CAI = CS.arg_begin();
1495   for (Function::arg_iterator FAI = F.arg_begin(), FAE = F.arg_end();
1496        FAI != FAE; ++FAI, ++CAI) {
1497     assert(CAI != CS.arg_end());
1498     if (Constant *C = dyn_cast<Constant>(CAI))
1499       SimplifiedValues[&*FAI] = C;
1500 
1501     Value *PtrArg = *CAI;
1502     if (ConstantInt *C = stripAndComputeInBoundsConstantOffsets(PtrArg)) {
1503       ConstantOffsetPtrs[&*FAI] = std::make_pair(PtrArg, C->getValue());
1504 
1505       // We can SROA any pointer arguments derived from alloca instructions.
1506       if (isa<AllocaInst>(PtrArg)) {
1507         SROAArgValues[&*FAI] = PtrArg;
1508         SROAArgCosts[PtrArg] = 0;
1509       }
1510     }
1511   }
1512   NumConstantArgs = SimplifiedValues.size();
1513   NumConstantOffsetPtrArgs = ConstantOffsetPtrs.size();
1514   NumAllocaArgs = SROAArgValues.size();
1515 
1516   // FIXME: If a caller has multiple calls to a callee, we end up recomputing
1517   // the ephemeral values multiple times (and they're completely determined by
1518   // the callee, so this is purely duplicate work).
1519   SmallPtrSet<const Value *, 32> EphValues;
1520   CodeMetrics::collectEphemeralValues(&F, &GetAssumptionCache(F), EphValues);
1521 
1522   // The worklist of live basic blocks in the callee *after* inlining. We avoid
1523   // adding basic blocks of the callee which can be proven to be dead for this
1524   // particular call site in order to get more accurate cost estimates. This
1525   // requires a somewhat heavyweight iteration pattern: we need to walk the
1526   // basic blocks in a breadth-first order as we insert live successors. To
1527   // accomplish this, prioritizing for small iterations because we exit after
1528   // crossing our threshold, we use a small-size optimized SetVector.
1529   typedef SetVector<BasicBlock *, SmallVector<BasicBlock *, 16>,
1530                     SmallPtrSet<BasicBlock *, 16>>
1531       BBSetVector;
1532   BBSetVector BBWorklist;
1533   BBWorklist.insert(&F.getEntryBlock());
1534   bool SingleBB = true;
1535   // Note that we *must not* cache the size, this loop grows the worklist.
1536   for (unsigned Idx = 0; Idx != BBWorklist.size(); ++Idx) {
1537     // Bail out the moment we cross the threshold. This means we'll under-count
1538     // the cost, but only when undercounting doesn't matter.
1539     if (Cost >= Threshold && !ComputeFullInlineCost)
1540       break;
1541 
1542     BasicBlock *BB = BBWorklist[Idx];
1543     if (BB->empty())
1544       continue;
1545 
1546     // Disallow inlining a blockaddress. A blockaddress only has defined
1547     // behavior for an indirect branch in the same function, and we do not
1548     // currently support inlining indirect branches. But, the inliner may not
1549     // see an indirect branch that ends up being dead code at a particular call
1550     // site. If the blockaddress escapes the function, e.g., via a global
1551     // variable, inlining may lead to an invalid cross-function reference.
1552     if (BB->hasAddressTaken())
1553       return false;
1554 
1555     // Analyze the cost of this block. If we blow through the threshold, this
1556     // returns false, and we can bail on out.
1557     if (!analyzeBlock(BB, EphValues))
1558       return false;
1559 
1560     TerminatorInst *TI = BB->getTerminator();
1561 
1562     // Add in the live successors by first checking whether we have terminator
1563     // that may be simplified based on the values simplified by this call.
1564     if (BranchInst *BI = dyn_cast<BranchInst>(TI)) {
1565       if (BI->isConditional()) {
1566         Value *Cond = BI->getCondition();
1567         if (ConstantInt *SimpleCond =
1568                 dyn_cast_or_null<ConstantInt>(SimplifiedValues.lookup(Cond))) {
1569           BBWorklist.insert(BI->getSuccessor(SimpleCond->isZero() ? 1 : 0));
1570           continue;
1571         }
1572       }
1573     } else if (SwitchInst *SI = dyn_cast<SwitchInst>(TI)) {
1574       Value *Cond = SI->getCondition();
1575       if (ConstantInt *SimpleCond =
1576               dyn_cast_or_null<ConstantInt>(SimplifiedValues.lookup(Cond))) {
1577         BBWorklist.insert(SI->findCaseValue(SimpleCond)->getCaseSuccessor());
1578         continue;
1579       }
1580     }
1581 
1582     // If we're unable to select a particular successor, just count all of
1583     // them.
1584     for (unsigned TIdx = 0, TSize = TI->getNumSuccessors(); TIdx != TSize;
1585          ++TIdx)
1586       BBWorklist.insert(TI->getSuccessor(TIdx));
1587 
1588     // If we had any successors at this point, than post-inlining is likely to
1589     // have them as well. Note that we assume any basic blocks which existed
1590     // due to branches or switches which folded above will also fold after
1591     // inlining.
1592     if (SingleBB && TI->getNumSuccessors() > 1) {
1593       // Take off the bonus we applied to the threshold.
1594       Threshold -= SingleBBBonus;
1595       SingleBB = false;
1596     }
1597   }
1598 
1599   bool OnlyOneCallAndLocalLinkage =
1600       F.hasLocalLinkage() && F.hasOneUse() && &F == CS.getCalledFunction();
1601   // If this is a noduplicate call, we can still inline as long as
1602   // inlining this would cause the removal of the caller (so the instruction
1603   // is not actually duplicated, just moved).
1604   if (!OnlyOneCallAndLocalLinkage && ContainsNoDuplicateCall)
1605     return false;
1606 
1607   // We applied the maximum possible vector bonus at the beginning. Now,
1608   // subtract the excess bonus, if any, from the Threshold before
1609   // comparing against Cost.
1610   if (NumVectorInstructions <= NumInstructions / 10)
1611     Threshold -= VectorBonus;
1612   else if (NumVectorInstructions <= NumInstructions / 2)
1613     Threshold -= VectorBonus/2;
1614 
1615   return Cost < std::max(1, Threshold);
1616 }
1617 
1618 #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
1619 /// \brief Dump stats about this call's analysis.
1620 LLVM_DUMP_METHOD void CallAnalyzer::dump() {
1621 #define DEBUG_PRINT_STAT(x) dbgs() << "      " #x ": " << x << "\n"
1622   DEBUG_PRINT_STAT(NumConstantArgs);
1623   DEBUG_PRINT_STAT(NumConstantOffsetPtrArgs);
1624   DEBUG_PRINT_STAT(NumAllocaArgs);
1625   DEBUG_PRINT_STAT(NumConstantPtrCmps);
1626   DEBUG_PRINT_STAT(NumConstantPtrDiffs);
1627   DEBUG_PRINT_STAT(NumInstructionsSimplified);
1628   DEBUG_PRINT_STAT(NumInstructions);
1629   DEBUG_PRINT_STAT(SROACostSavings);
1630   DEBUG_PRINT_STAT(SROACostSavingsLost);
1631   DEBUG_PRINT_STAT(ContainsNoDuplicateCall);
1632   DEBUG_PRINT_STAT(Cost);
1633   DEBUG_PRINT_STAT(Threshold);
1634 #undef DEBUG_PRINT_STAT
1635 }
1636 #endif
1637 
1638 /// \brief Test that there are no attribute conflicts between Caller and Callee
1639 ///        that prevent inlining.
1640 static bool functionsHaveCompatibleAttributes(Function *Caller,
1641                                               Function *Callee,
1642                                               TargetTransformInfo &TTI) {
1643   return TTI.areInlineCompatible(Caller, Callee) &&
1644          AttributeFuncs::areInlineCompatible(*Caller, *Callee);
1645 }
1646 
1647 int llvm::getCallsiteCost(CallSite CS, const DataLayout &DL) {
1648   int Cost = 0;
1649   for (unsigned I = 0, E = CS.arg_size(); I != E; ++I) {
1650     if (CS.isByValArgument(I)) {
1651       // We approximate the number of loads and stores needed by dividing the
1652       // size of the byval type by the target's pointer size.
1653       PointerType *PTy = cast<PointerType>(CS.getArgument(I)->getType());
1654       unsigned TypeSize = DL.getTypeSizeInBits(PTy->getElementType());
1655       unsigned PointerSize = DL.getPointerSizeInBits();
1656       // Ceiling division.
1657       unsigned NumStores = (TypeSize + PointerSize - 1) / PointerSize;
1658 
1659       // If it generates more than 8 stores it is likely to be expanded as an
1660       // inline memcpy so we take that as an upper bound. Otherwise we assume
1661       // one load and one store per word copied.
1662       // FIXME: The maxStoresPerMemcpy setting from the target should be used
1663       // here instead of a magic number of 8, but it's not available via
1664       // DataLayout.
1665       NumStores = std::min(NumStores, 8U);
1666 
1667       Cost += 2 * NumStores * InlineConstants::InstrCost;
1668     } else {
1669       // For non-byval arguments subtract off one instruction per call
1670       // argument.
1671       Cost += InlineConstants::InstrCost;
1672     }
1673   }
1674   // The call instruction also disappears after inlining.
1675   Cost += InlineConstants::InstrCost + InlineConstants::CallPenalty;
1676   return Cost;
1677 }
1678 
1679 InlineCost llvm::getInlineCost(
1680     CallSite CS, const InlineParams &Params, TargetTransformInfo &CalleeTTI,
1681     std::function<AssumptionCache &(Function &)> &GetAssumptionCache,
1682     Optional<function_ref<BlockFrequencyInfo &(Function &)>> GetBFI,
1683     ProfileSummaryInfo *PSI, OptimizationRemarkEmitter *ORE) {
1684   return getInlineCost(CS, CS.getCalledFunction(), Params, CalleeTTI,
1685                        GetAssumptionCache, GetBFI, PSI, ORE);
1686 }
1687 
1688 InlineCost llvm::getInlineCost(
1689     CallSite CS, Function *Callee, const InlineParams &Params,
1690     TargetTransformInfo &CalleeTTI,
1691     std::function<AssumptionCache &(Function &)> &GetAssumptionCache,
1692     Optional<function_ref<BlockFrequencyInfo &(Function &)>> GetBFI,
1693     ProfileSummaryInfo *PSI, OptimizationRemarkEmitter *ORE) {
1694 
1695   // Cannot inline indirect calls.
1696   if (!Callee)
1697     return llvm::InlineCost::getNever();
1698 
1699   // Calls to functions with always-inline attributes should be inlined
1700   // whenever possible.
1701   if (CS.hasFnAttr(Attribute::AlwaysInline)) {
1702     if (isInlineViable(*Callee))
1703       return llvm::InlineCost::getAlways();
1704     return llvm::InlineCost::getNever();
1705   }
1706 
1707   // Never inline functions with conflicting attributes (unless callee has
1708   // always-inline attribute).
1709   Function *Caller = CS.getCaller();
1710   if (!functionsHaveCompatibleAttributes(Caller, Callee, CalleeTTI))
1711     return llvm::InlineCost::getNever();
1712 
1713   // Don't inline this call if the caller has the optnone attribute.
1714   if (Caller->hasFnAttribute(Attribute::OptimizeNone))
1715     return llvm::InlineCost::getNever();
1716 
1717   // Don't inline functions which can be interposed at link-time.  Don't inline
1718   // functions marked noinline or call sites marked noinline.
1719   // Note: inlining non-exact non-interposable functions is fine, since we know
1720   // we have *a* correct implementation of the source level function.
1721   if (Callee->isInterposable() || Callee->hasFnAttribute(Attribute::NoInline) ||
1722       CS.isNoInline())
1723     return llvm::InlineCost::getNever();
1724 
1725   if (ORE)
1726     ComputeFullInlineCost = true;
1727 
1728   DEBUG(llvm::dbgs() << "      Analyzing call of " << Callee->getName()
1729                      << "... (caller:" << Caller->getName() << ")\n");
1730 
1731   CallAnalyzer CA(CalleeTTI, GetAssumptionCache, GetBFI, PSI, ORE, *Callee, CS,
1732                   Params);
1733   bool ShouldInline = CA.analyzeCall(CS);
1734 
1735   DEBUG(CA.dump());
1736 
1737   // Check if there was a reason to force inlining or no inlining.
1738   if (!ShouldInline && CA.getCost() < CA.getThreshold())
1739     return InlineCost::getNever();
1740   if (ShouldInline && CA.getCost() >= CA.getThreshold())
1741     return InlineCost::getAlways();
1742 
1743   return llvm::InlineCost::get(CA.getCost(), CA.getThreshold());
1744 }
1745 
1746 bool llvm::isInlineViable(Function &F) {
1747   bool ReturnsTwice = F.hasFnAttribute(Attribute::ReturnsTwice);
1748   for (Function::iterator BI = F.begin(), BE = F.end(); BI != BE; ++BI) {
1749     // Disallow inlining of functions which contain indirect branches or
1750     // blockaddresses.
1751     if (isa<IndirectBrInst>(BI->getTerminator()) || BI->hasAddressTaken())
1752       return false;
1753 
1754     for (auto &II : *BI) {
1755       CallSite CS(&II);
1756       if (!CS)
1757         continue;
1758 
1759       // Disallow recursive calls.
1760       if (&F == CS.getCalledFunction())
1761         return false;
1762 
1763       // Disallow calls which expose returns-twice to a function not previously
1764       // attributed as such.
1765       if (!ReturnsTwice && CS.isCall() &&
1766           cast<CallInst>(CS.getInstruction())->canReturnTwice())
1767         return false;
1768 
1769       // Disallow inlining functions that call @llvm.localescape. Doing this
1770       // correctly would require major changes to the inliner.
1771       if (CS.getCalledFunction() &&
1772           CS.getCalledFunction()->getIntrinsicID() ==
1773               llvm::Intrinsic::localescape)
1774         return false;
1775     }
1776   }
1777 
1778   return true;
1779 }
1780 
1781 // APIs to create InlineParams based on command line flags and/or other
1782 // parameters.
1783 
1784 InlineParams llvm::getInlineParams(int Threshold) {
1785   InlineParams Params;
1786 
1787   // This field is the threshold to use for a callee by default. This is
1788   // derived from one or more of:
1789   //  * optimization or size-optimization levels,
1790   //  * a value passed to createFunctionInliningPass function, or
1791   //  * the -inline-threshold flag.
1792   //  If the -inline-threshold flag is explicitly specified, that is used
1793   //  irrespective of anything else.
1794   if (InlineThreshold.getNumOccurrences() > 0)
1795     Params.DefaultThreshold = InlineThreshold;
1796   else
1797     Params.DefaultThreshold = Threshold;
1798 
1799   // Set the HintThreshold knob from the -inlinehint-threshold.
1800   Params.HintThreshold = HintThreshold;
1801 
1802   // Set the HotCallSiteThreshold knob from the -hot-callsite-threshold.
1803   Params.HotCallSiteThreshold = HotCallSiteThreshold;
1804 
1805   // If the -locally-hot-callsite-threshold is explicitly specified, use it to
1806   // populate LocallyHotCallSiteThreshold. Later, we populate
1807   // Params.LocallyHotCallSiteThreshold from -locally-hot-callsite-threshold if
1808   // we know that optimization level is O3 (in the getInlineParams variant that
1809   // takes the opt and size levels).
1810   // FIXME: Remove this check (and make the assignment unconditional) after
1811   // addressing size regression issues at O2.
1812   if (LocallyHotCallSiteThreshold.getNumOccurrences() > 0)
1813     Params.LocallyHotCallSiteThreshold = LocallyHotCallSiteThreshold;
1814 
1815   // Set the ColdCallSiteThreshold knob from the -inline-cold-callsite-threshold.
1816   Params.ColdCallSiteThreshold = ColdCallSiteThreshold;
1817 
1818   // Set the OptMinSizeThreshold and OptSizeThreshold params only if the
1819   // -inlinehint-threshold commandline option is not explicitly given. If that
1820   // option is present, then its value applies even for callees with size and
1821   // minsize attributes.
1822   // If the -inline-threshold is not specified, set the ColdThreshold from the
1823   // -inlinecold-threshold even if it is not explicitly passed. If
1824   // -inline-threshold is specified, then -inlinecold-threshold needs to be
1825   // explicitly specified to set the ColdThreshold knob
1826   if (InlineThreshold.getNumOccurrences() == 0) {
1827     Params.OptMinSizeThreshold = InlineConstants::OptMinSizeThreshold;
1828     Params.OptSizeThreshold = InlineConstants::OptSizeThreshold;
1829     Params.ColdThreshold = ColdThreshold;
1830   } else if (ColdThreshold.getNumOccurrences() > 0) {
1831     Params.ColdThreshold = ColdThreshold;
1832   }
1833   return Params;
1834 }
1835 
1836 InlineParams llvm::getInlineParams() {
1837   return getInlineParams(InlineThreshold);
1838 }
1839 
1840 // Compute the default threshold for inlining based on the opt level and the
1841 // size opt level.
1842 static int computeThresholdFromOptLevels(unsigned OptLevel,
1843                                          unsigned SizeOptLevel) {
1844   if (OptLevel > 2)
1845     return InlineConstants::OptAggressiveThreshold;
1846   if (SizeOptLevel == 1) // -Os
1847     return InlineConstants::OptSizeThreshold;
1848   if (SizeOptLevel == 2) // -Oz
1849     return InlineConstants::OptMinSizeThreshold;
1850   return InlineThreshold;
1851 }
1852 
1853 InlineParams llvm::getInlineParams(unsigned OptLevel, unsigned SizeOptLevel) {
1854   auto Params =
1855       getInlineParams(computeThresholdFromOptLevels(OptLevel, SizeOptLevel));
1856   // At O3, use the value of -locally-hot-callsite-threshold option to populate
1857   // Params.LocallyHotCallSiteThreshold. Below O3, this flag has effect only
1858   // when it is specified explicitly.
1859   if (OptLevel > 2)
1860     Params.LocallyHotCallSiteThreshold = LocallyHotCallSiteThreshold;
1861   return Params;
1862 }
1863