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