1 //===- Inliner.cpp - Code common to all inliners --------------------------===//
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 the mechanics required to implement inlining without
11 // missing any calls and updating the call graph.  The decisions of which calls
12 // are profitable to inline are implemented elsewhere.
13 //
14 //===----------------------------------------------------------------------===//
15 
16 #include "llvm/ADT/SmallPtrSet.h"
17 #include "llvm/ADT/Statistic.h"
18 #include "llvm/Analysis/AliasAnalysis.h"
19 #include "llvm/Analysis/AssumptionCache.h"
20 #include "llvm/Analysis/BasicAliasAnalysis.h"
21 #include "llvm/Analysis/CallGraph.h"
22 #include "llvm/Analysis/InlineCost.h"
23 #include "llvm/Analysis/OptimizationDiagnosticInfo.h"
24 #include "llvm/Analysis/ProfileSummaryInfo.h"
25 #include "llvm/Analysis/TargetLibraryInfo.h"
26 #include "llvm/IR/CallSite.h"
27 #include "llvm/IR/DataLayout.h"
28 #include "llvm/IR/DiagnosticInfo.h"
29 #include "llvm/IR/Instructions.h"
30 #include "llvm/IR/IntrinsicInst.h"
31 #include "llvm/IR/Module.h"
32 #include "llvm/Support/Debug.h"
33 #include "llvm/Support/raw_ostream.h"
34 #include "llvm/Transforms/IPO/InlinerPass.h"
35 #include "llvm/Transforms/Utils/Cloning.h"
36 #include "llvm/Transforms/Utils/Local.h"
37 using namespace llvm;
38 
39 #define DEBUG_TYPE "inline"
40 
41 STATISTIC(NumInlined, "Number of functions inlined");
42 STATISTIC(NumCallsDeleted, "Number of call sites deleted, not inlined");
43 STATISTIC(NumDeleted, "Number of functions deleted because all callers found");
44 STATISTIC(NumMergedAllocas, "Number of allocas merged together");
45 
46 // This weirdly named statistic tracks the number of times that, when attempting
47 // to inline a function A into B, we analyze the callers of B in order to see
48 // if those would be more profitable and blocked inline steps.
49 STATISTIC(NumCallerCallersAnalyzed, "Number of caller-callers analyzed");
50 
51 /// Flag to disable manual alloca merging.
52 ///
53 /// Merging of allocas was originally done as a stack-size saving technique
54 /// prior to LLVM's code generator having support for stack coloring based on
55 /// lifetime markers. It is now in the process of being removed. To experiment
56 /// with disabling it and relying fully on lifetime marker based stack
57 /// coloring, you can pass this flag to LLVM.
58 static cl::opt<bool>
59     DisableInlinedAllocaMerging("disable-inlined-alloca-merging",
60                                 cl::init(false), cl::Hidden);
61 
62 namespace {
63 enum class InlinerFunctionImportStatsOpts {
64   No = 0,
65   Basic = 1,
66   Verbose = 2,
67 };
68 
69 cl::opt<InlinerFunctionImportStatsOpts> InlinerFunctionImportStats(
70     "inliner-function-import-stats",
71     cl::init(InlinerFunctionImportStatsOpts::No),
72     cl::values(clEnumValN(InlinerFunctionImportStatsOpts::Basic, "basic",
73                           "basic statistics"),
74                clEnumValN(InlinerFunctionImportStatsOpts::Verbose, "verbose",
75                           "printing of statistics for each inlined function")),
76     cl::Hidden, cl::desc("Enable inliner stats for imported functions"));
77 } // namespace
78 
79 Inliner::Inliner(char &ID) : CallGraphSCCPass(ID), InsertLifetime(true) {}
80 
81 Inliner::Inliner(char &ID, bool InsertLifetime)
82     : CallGraphSCCPass(ID), InsertLifetime(InsertLifetime) {}
83 
84 /// For this class, we declare that we require and preserve the call graph.
85 /// If the derived class implements this method, it should
86 /// always explicitly call the implementation here.
87 void Inliner::getAnalysisUsage(AnalysisUsage &AU) const {
88   AU.addRequired<AssumptionCacheTracker>();
89   AU.addRequired<ProfileSummaryInfoWrapperPass>();
90   AU.addRequired<TargetLibraryInfoWrapperPass>();
91   getAAResultsAnalysisUsage(AU);
92   CallGraphSCCPass::getAnalysisUsage(AU);
93 }
94 
95 typedef DenseMap<ArrayType *, std::vector<AllocaInst *>> InlinedArrayAllocasTy;
96 
97 /// Look at all of the allocas that we inlined through this call site.  If we
98 /// have already inlined other allocas through other calls into this function,
99 /// then we know that they have disjoint lifetimes and that we can merge them.
100 ///
101 /// There are many heuristics possible for merging these allocas, and the
102 /// different options have different tradeoffs.  One thing that we *really*
103 /// don't want to hurt is SRoA: once inlining happens, often allocas are no
104 /// longer address taken and so they can be promoted.
105 ///
106 /// Our "solution" for that is to only merge allocas whose outermost type is an
107 /// array type.  These are usually not promoted because someone is using a
108 /// variable index into them.  These are also often the most important ones to
109 /// merge.
110 ///
111 /// A better solution would be to have real memory lifetime markers in the IR
112 /// and not have the inliner do any merging of allocas at all.  This would
113 /// allow the backend to do proper stack slot coloring of all allocas that
114 /// *actually make it to the backend*, which is really what we want.
115 ///
116 /// Because we don't have this information, we do this simple and useful hack.
117 static void mergeInlinedArrayAllocas(
118     Function *Caller, InlineFunctionInfo &IFI,
119     InlinedArrayAllocasTy &InlinedArrayAllocas, int InlineHistory) {
120   SmallPtrSet<AllocaInst *, 16> UsedAllocas;
121 
122   // When processing our SCC, check to see if CS was inlined from some other
123   // call site.  For example, if we're processing "A" in this code:
124   //   A() { B() }
125   //   B() { x = alloca ... C() }
126   //   C() { y = alloca ... }
127   // Assume that C was not inlined into B initially, and so we're processing A
128   // and decide to inline B into A.  Doing this makes an alloca available for
129   // reuse and makes a callsite (C) available for inlining.  When we process
130   // the C call site we don't want to do any alloca merging between X and Y
131   // because their scopes are not disjoint.  We could make this smarter by
132   // keeping track of the inline history for each alloca in the
133   // InlinedArrayAllocas but this isn't likely to be a significant win.
134   if (InlineHistory != -1) // Only do merging for top-level call sites in SCC.
135     return;
136 
137   // Loop over all the allocas we have so far and see if they can be merged with
138   // a previously inlined alloca.  If not, remember that we had it.
139   for (unsigned AllocaNo = 0, e = IFI.StaticAllocas.size(); AllocaNo != e;
140        ++AllocaNo) {
141     AllocaInst *AI = IFI.StaticAllocas[AllocaNo];
142 
143     // Don't bother trying to merge array allocations (they will usually be
144     // canonicalized to be an allocation *of* an array), or allocations whose
145     // type is not itself an array (because we're afraid of pessimizing SRoA).
146     ArrayType *ATy = dyn_cast<ArrayType>(AI->getAllocatedType());
147     if (!ATy || AI->isArrayAllocation())
148       continue;
149 
150     // Get the list of all available allocas for this array type.
151     std::vector<AllocaInst *> &AllocasForType = InlinedArrayAllocas[ATy];
152 
153     // Loop over the allocas in AllocasForType to see if we can reuse one.  Note
154     // that we have to be careful not to reuse the same "available" alloca for
155     // multiple different allocas that we just inlined, we use the 'UsedAllocas'
156     // set to keep track of which "available" allocas are being used by this
157     // function.  Also, AllocasForType can be empty of course!
158     bool MergedAwayAlloca = false;
159     for (AllocaInst *AvailableAlloca : AllocasForType) {
160 
161       unsigned Align1 = AI->getAlignment(),
162                Align2 = AvailableAlloca->getAlignment();
163 
164       // The available alloca has to be in the right function, not in some other
165       // function in this SCC.
166       if (AvailableAlloca->getParent() != AI->getParent())
167         continue;
168 
169       // If the inlined function already uses this alloca then we can't reuse
170       // it.
171       if (!UsedAllocas.insert(AvailableAlloca).second)
172         continue;
173 
174       // Otherwise, we *can* reuse it, RAUW AI into AvailableAlloca and declare
175       // success!
176       DEBUG(dbgs() << "    ***MERGED ALLOCA: " << *AI
177                    << "\n\t\tINTO: " << *AvailableAlloca << '\n');
178 
179       // Move affected dbg.declare calls immediately after the new alloca to
180       // avoid the situation when a dbg.declare preceeds its alloca.
181       if (auto *L = LocalAsMetadata::getIfExists(AI))
182         if (auto *MDV = MetadataAsValue::getIfExists(AI->getContext(), L))
183           for (User *U : MDV->users())
184             if (DbgDeclareInst *DDI = dyn_cast<DbgDeclareInst>(U))
185               DDI->moveBefore(AvailableAlloca->getNextNode());
186 
187       AI->replaceAllUsesWith(AvailableAlloca);
188 
189       if (Align1 != Align2) {
190         if (!Align1 || !Align2) {
191           const DataLayout &DL = Caller->getParent()->getDataLayout();
192           unsigned TypeAlign = DL.getABITypeAlignment(AI->getAllocatedType());
193 
194           Align1 = Align1 ? Align1 : TypeAlign;
195           Align2 = Align2 ? Align2 : TypeAlign;
196         }
197 
198         if (Align1 > Align2)
199           AvailableAlloca->setAlignment(AI->getAlignment());
200       }
201 
202       AI->eraseFromParent();
203       MergedAwayAlloca = true;
204       ++NumMergedAllocas;
205       IFI.StaticAllocas[AllocaNo] = nullptr;
206       break;
207     }
208 
209     // If we already nuked the alloca, we're done with it.
210     if (MergedAwayAlloca)
211       continue;
212 
213     // If we were unable to merge away the alloca either because there are no
214     // allocas of the right type available or because we reused them all
215     // already, remember that this alloca came from an inlined function and mark
216     // it used so we don't reuse it for other allocas from this inline
217     // operation.
218     AllocasForType.push_back(AI);
219     UsedAllocas.insert(AI);
220   }
221 }
222 
223 /// If it is possible to inline the specified call site,
224 /// do so and update the CallGraph for this operation.
225 ///
226 /// This function also does some basic book-keeping to update the IR.  The
227 /// InlinedArrayAllocas map keeps track of any allocas that are already
228 /// available from other functions inlined into the caller.  If we are able to
229 /// inline this call site we attempt to reuse already available allocas or add
230 /// any new allocas to the set if not possible.
231 static bool InlineCallIfPossible(
232     CallSite CS, InlineFunctionInfo &IFI,
233     InlinedArrayAllocasTy &InlinedArrayAllocas, int InlineHistory,
234     bool InsertLifetime, function_ref<AAResults &(Function &)> &AARGetter,
235     ImportedFunctionsInliningStatistics &ImportedFunctionsStats) {
236   Function *Callee = CS.getCalledFunction();
237   Function *Caller = CS.getCaller();
238 
239   AAResults &AAR = AARGetter(*Callee);
240 
241   // Try to inline the function.  Get the list of static allocas that were
242   // inlined.
243   if (!InlineFunction(CS, IFI, &AAR, InsertLifetime))
244     return false;
245 
246   if (InlinerFunctionImportStats != InlinerFunctionImportStatsOpts::No)
247     ImportedFunctionsStats.recordInline(*Caller, *Callee);
248 
249   AttributeFuncs::mergeAttributesForInlining(*Caller, *Callee);
250 
251   if (!DisableInlinedAllocaMerging)
252     mergeInlinedArrayAllocas(Caller, IFI, InlinedArrayAllocas, InlineHistory);
253 
254   return true;
255 }
256 
257 /// Return true if inlining of CS can block the caller from being
258 /// inlined which is proved to be more beneficial. \p IC is the
259 /// estimated inline cost associated with callsite \p CS.
260 /// \p TotalAltCost will be set to the estimated cost of inlining the caller
261 /// if \p CS is suppressed for inlining.
262 static bool
263 shouldBeDeferred(Function *Caller, CallSite CS, InlineCost IC,
264                  int &TotalSecondaryCost,
265                  function_ref<InlineCost(CallSite CS)> GetInlineCost) {
266 
267   // For now we only handle local or inline functions.
268   if (!Caller->hasLocalLinkage() && !Caller->hasLinkOnceODRLinkage())
269     return false;
270   // Try to detect the case where the current inlining candidate caller (call
271   // it B) is a static or linkonce-ODR function and is an inlining candidate
272   // elsewhere, and the current candidate callee (call it C) is large enough
273   // that inlining it into B would make B too big to inline later. In these
274   // circumstances it may be best not to inline C into B, but to inline B into
275   // its callers.
276   //
277   // This only applies to static and linkonce-ODR functions because those are
278   // expected to be available for inlining in the translation units where they
279   // are used. Thus we will always have the opportunity to make local inlining
280   // decisions. Importantly the linkonce-ODR linkage covers inline functions
281   // and templates in C++.
282   //
283   // FIXME: All of this logic should be sunk into getInlineCost. It relies on
284   // the internal implementation of the inline cost metrics rather than
285   // treating them as truly abstract units etc.
286   TotalSecondaryCost = 0;
287   // The candidate cost to be imposed upon the current function.
288   int CandidateCost = IC.getCost() - (InlineConstants::CallPenalty + 1);
289   // This bool tracks what happens if we do NOT inline C into B.
290   bool callerWillBeRemoved = Caller->hasLocalLinkage();
291   // This bool tracks what happens if we DO inline C into B.
292   bool inliningPreventsSomeOuterInline = false;
293   for (User *U : Caller->users()) {
294     CallSite CS2(U);
295 
296     // If this isn't a call to Caller (it could be some other sort
297     // of reference) skip it.  Such references will prevent the caller
298     // from being removed.
299     if (!CS2 || CS2.getCalledFunction() != Caller) {
300       callerWillBeRemoved = false;
301       continue;
302     }
303 
304     InlineCost IC2 = GetInlineCost(CS2);
305     ++NumCallerCallersAnalyzed;
306     if (!IC2) {
307       callerWillBeRemoved = false;
308       continue;
309     }
310     if (IC2.isAlways())
311       continue;
312 
313     // See if inlining or original callsite would erase the cost delta of
314     // this callsite. We subtract off the penalty for the call instruction,
315     // which we would be deleting.
316     if (IC2.getCostDelta() <= CandidateCost) {
317       inliningPreventsSomeOuterInline = true;
318       TotalSecondaryCost += IC2.getCost();
319     }
320   }
321   // If all outer calls to Caller would get inlined, the cost for the last
322   // one is set very low by getInlineCost, in anticipation that Caller will
323   // be removed entirely.  We did not account for this above unless there
324   // is only one caller of Caller.
325   if (callerWillBeRemoved && !Caller->use_empty())
326     TotalSecondaryCost -= InlineConstants::LastCallToStaticBonus;
327 
328   if (inliningPreventsSomeOuterInline && TotalSecondaryCost < IC.getCost())
329     return true;
330 
331   return false;
332 }
333 
334 /// Return true if the inliner should attempt to inline at the given CallSite.
335 static bool shouldInline(CallSite CS,
336                          function_ref<InlineCost(CallSite CS)> GetInlineCost,
337                          OptimizationRemarkEmitter &ORE) {
338   using namespace ore;
339   InlineCost IC = GetInlineCost(CS);
340   Instruction *Call = CS.getInstruction();
341   Function *Callee = CS.getCalledFunction();
342 
343   if (IC.isAlways()) {
344     DEBUG(dbgs() << "    Inlining: cost=always"
345                  << ", Call: " << *CS.getInstruction() << "\n");
346     ORE.emit(OptimizationRemarkAnalysis(DEBUG_TYPE, "AlwaysInline", Call)
347              << NV("Callee", Callee)
348              << " should always be inlined (cost=always)");
349     return true;
350   }
351 
352   if (IC.isNever()) {
353     DEBUG(dbgs() << "    NOT Inlining: cost=never"
354                  << ", Call: " << *CS.getInstruction() << "\n");
355     ORE.emit(OptimizationRemarkAnalysis(DEBUG_TYPE, "NeverInline", Call)
356              << NV("Callee", Callee)
357              << " should never be inlined (cost=never)");
358     return false;
359   }
360 
361   Function *Caller = CS.getCaller();
362   if (!IC) {
363     DEBUG(dbgs() << "    NOT Inlining: cost=" << IC.getCost()
364                  << ", thres=" << (IC.getCostDelta() + IC.getCost())
365                  << ", Call: " << *CS.getInstruction() << "\n");
366     ORE.emit(OptimizationRemarkAnalysis(DEBUG_TYPE, "TooCostly", Call)
367              << NV("Callee", Callee) << " too costly to inline (cost="
368              << NV("Cost", IC.getCost()) << ", threshold="
369              << NV("Threshold", IC.getCostDelta() + IC.getCost()) << ")");
370     return false;
371   }
372 
373   int TotalSecondaryCost = 0;
374   if (shouldBeDeferred(Caller, CS, IC, TotalSecondaryCost, GetInlineCost)) {
375     DEBUG(dbgs() << "    NOT Inlining: " << *CS.getInstruction()
376                  << " Cost = " << IC.getCost()
377                  << ", outer Cost = " << TotalSecondaryCost << '\n');
378     ORE.emit(OptimizationRemarkAnalysis(DEBUG_TYPE,
379                                         "IncreaseCostInOtherContexts", Call)
380              << "Not inlining. Cost of inlining " << NV("Callee", Callee)
381              << " increases the cost of inlining " << NV("Caller", Caller)
382              << " in other contexts");
383     return false;
384   }
385 
386   DEBUG(dbgs() << "    Inlining: cost=" << IC.getCost()
387                << ", thres=" << (IC.getCostDelta() + IC.getCost())
388                << ", Call: " << *CS.getInstruction() << '\n');
389   ORE.emit(OptimizationRemarkAnalysis(DEBUG_TYPE, "CanBeInlined", Call)
390            << NV("Callee", Callee) << " can be inlined into "
391            << NV("Caller", Caller) << " with cost=" << NV("Cost", IC.getCost())
392            << " (threshold="
393            << NV("Threshold", IC.getCostDelta() + IC.getCost()) << ")");
394   return true;
395 }
396 
397 /// Return true if the specified inline history ID
398 /// indicates an inline history that includes the specified function.
399 static bool InlineHistoryIncludes(
400     Function *F, int InlineHistoryID,
401     const SmallVectorImpl<std::pair<Function *, int>> &InlineHistory) {
402   while (InlineHistoryID != -1) {
403     assert(unsigned(InlineHistoryID) < InlineHistory.size() &&
404            "Invalid inline history ID");
405     if (InlineHistory[InlineHistoryID].first == F)
406       return true;
407     InlineHistoryID = InlineHistory[InlineHistoryID].second;
408   }
409   return false;
410 }
411 
412 bool Inliner::doInitialization(CallGraph &CG) {
413   if (InlinerFunctionImportStats != InlinerFunctionImportStatsOpts::No)
414     ImportedFunctionsStats.setModuleInfo(CG.getModule());
415   return false; // No changes to CallGraph.
416 }
417 
418 bool Inliner::runOnSCC(CallGraphSCC &SCC) {
419   if (skipSCC(SCC))
420     return false;
421   return inlineCalls(SCC);
422 }
423 
424 static bool
425 inlineCallsImpl(CallGraphSCC &SCC, CallGraph &CG,
426                 std::function<AssumptionCache &(Function &)> GetAssumptionCache,
427                 ProfileSummaryInfo *PSI, TargetLibraryInfo &TLI,
428                 bool InsertLifetime,
429                 function_ref<InlineCost(CallSite CS)> GetInlineCost,
430                 function_ref<AAResults &(Function &)> AARGetter,
431                 ImportedFunctionsInliningStatistics &ImportedFunctionsStats) {
432   SmallPtrSet<Function *, 8> SCCFunctions;
433   DEBUG(dbgs() << "Inliner visiting SCC:");
434   for (CallGraphNode *Node : SCC) {
435     Function *F = Node->getFunction();
436     if (F)
437       SCCFunctions.insert(F);
438     DEBUG(dbgs() << " " << (F ? F->getName() : "INDIRECTNODE"));
439   }
440 
441   // Scan through and identify all call sites ahead of time so that we only
442   // inline call sites in the original functions, not call sites that result
443   // from inlining other functions.
444   SmallVector<std::pair<CallSite, int>, 16> CallSites;
445 
446   // When inlining a callee produces new call sites, we want to keep track of
447   // the fact that they were inlined from the callee.  This allows us to avoid
448   // infinite inlining in some obscure cases.  To represent this, we use an
449   // index into the InlineHistory vector.
450   SmallVector<std::pair<Function *, int>, 8> InlineHistory;
451 
452   for (CallGraphNode *Node : SCC) {
453     Function *F = Node->getFunction();
454     if (!F || F->isDeclaration())
455       continue;
456 
457     OptimizationRemarkEmitter ORE(F);
458     for (BasicBlock &BB : *F)
459       for (Instruction &I : BB) {
460         CallSite CS(cast<Value>(&I));
461         // If this isn't a call, or it is a call to an intrinsic, it can
462         // never be inlined.
463         if (!CS || isa<IntrinsicInst>(I))
464           continue;
465 
466         // If this is a direct call to an external function, we can never inline
467         // it.  If it is an indirect call, inlining may resolve it to be a
468         // direct call, so we keep it.
469         if (Function *Callee = CS.getCalledFunction())
470           if (Callee->isDeclaration()) {
471             using namespace ore;
472             ORE.emit(OptimizationRemarkMissed(DEBUG_TYPE, "NoDefinition", &I)
473                      << NV("Callee", Callee) << " will not be inlined into "
474                      << NV("Caller", CS.getCaller())
475                      << " because its definition is unavailable"
476                      << setIsVerbose());
477             continue;
478           }
479 
480         CallSites.push_back(std::make_pair(CS, -1));
481       }
482   }
483 
484   DEBUG(dbgs() << ": " << CallSites.size() << " call sites.\n");
485 
486   // If there are no calls in this function, exit early.
487   if (CallSites.empty())
488     return false;
489 
490   // Now that we have all of the call sites, move the ones to functions in the
491   // current SCC to the end of the list.
492   unsigned FirstCallInSCC = CallSites.size();
493   for (unsigned i = 0; i < FirstCallInSCC; ++i)
494     if (Function *F = CallSites[i].first.getCalledFunction())
495       if (SCCFunctions.count(F))
496         std::swap(CallSites[i--], CallSites[--FirstCallInSCC]);
497 
498   InlinedArrayAllocasTy InlinedArrayAllocas;
499   InlineFunctionInfo InlineInfo(&CG, &GetAssumptionCache);
500 
501   // Now that we have all of the call sites, loop over them and inline them if
502   // it looks profitable to do so.
503   bool Changed = false;
504   bool LocalChange;
505   do {
506     LocalChange = false;
507     // Iterate over the outer loop because inlining functions can cause indirect
508     // calls to become direct calls.
509     // CallSites may be modified inside so ranged for loop can not be used.
510     for (unsigned CSi = 0; CSi != CallSites.size(); ++CSi) {
511       CallSite CS = CallSites[CSi].first;
512 
513       Function *Caller = CS.getCaller();
514       Function *Callee = CS.getCalledFunction();
515 
516       // If this call site is dead and it is to a readonly function, we should
517       // just delete the call instead of trying to inline it, regardless of
518       // size.  This happens because IPSCCP propagates the result out of the
519       // call and then we're left with the dead call.
520       if (isInstructionTriviallyDead(CS.getInstruction(), &TLI)) {
521         DEBUG(dbgs() << "    -> Deleting dead call: " << *CS.getInstruction()
522                      << "\n");
523         // Update the call graph by deleting the edge from Callee to Caller.
524         CG[Caller]->removeCallEdgeFor(CS);
525         CS.getInstruction()->eraseFromParent();
526         ++NumCallsDeleted;
527       } else {
528         // We can only inline direct calls to non-declarations.
529         if (!Callee || Callee->isDeclaration())
530           continue;
531 
532         // If this call site was obtained by inlining another function, verify
533         // that the include path for the function did not include the callee
534         // itself.  If so, we'd be recursively inlining the same function,
535         // which would provide the same callsites, which would cause us to
536         // infinitely inline.
537         int InlineHistoryID = CallSites[CSi].second;
538         if (InlineHistoryID != -1 &&
539             InlineHistoryIncludes(Callee, InlineHistoryID, InlineHistory))
540           continue;
541 
542         // Get DebugLoc to report. CS will be invalid after Inliner.
543         DebugLoc DLoc = CS.getInstruction()->getDebugLoc();
544         BasicBlock *Block = CS.getParent();
545         // FIXME for new PM: because of the old PM we currently generate ORE and
546         // in turn BFI on demand.  With the new PM, the ORE dependency should
547         // just become a regular analysis dependency.
548         OptimizationRemarkEmitter ORE(Caller);
549 
550         // If the policy determines that we should inline this function,
551         // try to do so.
552         using namespace ore;
553         if (!shouldInline(CS, GetInlineCost, ORE)) {
554           ORE.emit(
555               OptimizationRemarkMissed(DEBUG_TYPE, "NotInlined", DLoc, Block)
556               << NV("Callee", Callee) << " will not be inlined into "
557               << NV("Caller", Caller));
558           continue;
559         }
560 
561         // Attempt to inline the function.
562         if (!InlineCallIfPossible(CS, InlineInfo, InlinedArrayAllocas,
563                                   InlineHistoryID, InsertLifetime, AARGetter,
564                                   ImportedFunctionsStats)) {
565           ORE.emit(
566               OptimizationRemarkMissed(DEBUG_TYPE, "NotInlined", DLoc, Block)
567               << NV("Callee", Callee) << " will not be inlined into "
568               << NV("Caller", Caller));
569           continue;
570         }
571         ++NumInlined;
572 
573         // Report the inline decision.
574         ORE.emit(OptimizationRemark(DEBUG_TYPE, "Inlined", DLoc, Block)
575                  << NV("Callee", Callee) << " inlined into "
576                  << NV("Caller", Caller));
577 
578         // If inlining this function gave us any new call sites, throw them
579         // onto our worklist to process.  They are useful inline candidates.
580         if (!InlineInfo.InlinedCalls.empty()) {
581           // Create a new inline history entry for this, so that we remember
582           // that these new callsites came about due to inlining Callee.
583           int NewHistoryID = InlineHistory.size();
584           InlineHistory.push_back(std::make_pair(Callee, InlineHistoryID));
585 
586           for (Value *Ptr : InlineInfo.InlinedCalls)
587             CallSites.push_back(std::make_pair(CallSite(Ptr), NewHistoryID));
588         }
589       }
590 
591       // If we inlined or deleted the last possible call site to the function,
592       // delete the function body now.
593       if (Callee && Callee->use_empty() && Callee->hasLocalLinkage() &&
594           // TODO: Can remove if in SCC now.
595           !SCCFunctions.count(Callee) &&
596 
597           // The function may be apparently dead, but if there are indirect
598           // callgraph references to the node, we cannot delete it yet, this
599           // could invalidate the CGSCC iterator.
600           CG[Callee]->getNumReferences() == 0) {
601         DEBUG(dbgs() << "    -> Deleting dead function: " << Callee->getName()
602                      << "\n");
603         CallGraphNode *CalleeNode = CG[Callee];
604 
605         // Remove any call graph edges from the callee to its callees.
606         CalleeNode->removeAllCalledFunctions();
607 
608         // Removing the node for callee from the call graph and delete it.
609         delete CG.removeFunctionFromModule(CalleeNode);
610         ++NumDeleted;
611       }
612 
613       // Remove this call site from the list.  If possible, use
614       // swap/pop_back for efficiency, but do not use it if doing so would
615       // move a call site to a function in this SCC before the
616       // 'FirstCallInSCC' barrier.
617       if (SCC.isSingular()) {
618         CallSites[CSi] = CallSites.back();
619         CallSites.pop_back();
620       } else {
621         CallSites.erase(CallSites.begin() + CSi);
622       }
623       --CSi;
624 
625       Changed = true;
626       LocalChange = true;
627     }
628   } while (LocalChange);
629 
630   return Changed;
631 }
632 
633 bool Inliner::inlineCalls(CallGraphSCC &SCC) {
634   CallGraph &CG = getAnalysis<CallGraphWrapperPass>().getCallGraph();
635   ACT = &getAnalysis<AssumptionCacheTracker>();
636   PSI = getAnalysis<ProfileSummaryInfoWrapperPass>().getPSI();
637   auto &TLI = getAnalysis<TargetLibraryInfoWrapperPass>().getTLI();
638   // We compute dedicated AA results for each function in the SCC as needed. We
639   // use a lambda referencing external objects so that they live long enough to
640   // be queried, but we re-use them each time.
641   Optional<BasicAAResult> BAR;
642   Optional<AAResults> AAR;
643   auto AARGetter = [&](Function &F) -> AAResults & {
644     BAR.emplace(createLegacyPMBasicAAResult(*this, F));
645     AAR.emplace(createLegacyPMAAResults(*this, F, *BAR));
646     return *AAR;
647   };
648   auto GetAssumptionCache = [&](Function &F) -> AssumptionCache & {
649     return ACT->getAssumptionCache(F);
650   };
651   return inlineCallsImpl(SCC, CG, GetAssumptionCache, PSI, TLI, InsertLifetime,
652                          [this](CallSite CS) { return getInlineCost(CS); },
653                          AARGetter, ImportedFunctionsStats);
654 }
655 
656 /// Remove now-dead linkonce functions at the end of
657 /// processing to avoid breaking the SCC traversal.
658 bool Inliner::doFinalization(CallGraph &CG) {
659   if (InlinerFunctionImportStats != InlinerFunctionImportStatsOpts::No)
660     ImportedFunctionsStats.dump(InlinerFunctionImportStats ==
661                                 InlinerFunctionImportStatsOpts::Verbose);
662   return removeDeadFunctions(CG);
663 }
664 
665 /// Remove dead functions that are not included in DNR (Do Not Remove) list.
666 bool Inliner::removeDeadFunctions(CallGraph &CG, bool AlwaysInlineOnly) {
667   SmallVector<CallGraphNode *, 16> FunctionsToRemove;
668   SmallVector<CallGraphNode *, 16> DeadFunctionsInComdats;
669   SmallDenseMap<const Comdat *, int, 16> ComdatEntriesAlive;
670 
671   auto RemoveCGN = [&](CallGraphNode *CGN) {
672     // Remove any call graph edges from the function to its callees.
673     CGN->removeAllCalledFunctions();
674 
675     // Remove any edges from the external node to the function's call graph
676     // node.  These edges might have been made irrelegant due to
677     // optimization of the program.
678     CG.getExternalCallingNode()->removeAnyCallEdgeTo(CGN);
679 
680     // Removing the node for callee from the call graph and delete it.
681     FunctionsToRemove.push_back(CGN);
682   };
683 
684   // Scan for all of the functions, looking for ones that should now be removed
685   // from the program.  Insert the dead ones in the FunctionsToRemove set.
686   for (const auto &I : CG) {
687     CallGraphNode *CGN = I.second.get();
688     Function *F = CGN->getFunction();
689     if (!F || F->isDeclaration())
690       continue;
691 
692     // Handle the case when this function is called and we only want to care
693     // about always-inline functions. This is a bit of a hack to share code
694     // between here and the InlineAlways pass.
695     if (AlwaysInlineOnly && !F->hasFnAttribute(Attribute::AlwaysInline))
696       continue;
697 
698     // If the only remaining users of the function are dead constants, remove
699     // them.
700     F->removeDeadConstantUsers();
701 
702     if (!F->isDefTriviallyDead())
703       continue;
704 
705     // It is unsafe to drop a function with discardable linkage from a COMDAT
706     // without also dropping the other members of the COMDAT.
707     // The inliner doesn't visit non-function entities which are in COMDAT
708     // groups so it is unsafe to do so *unless* the linkage is local.
709     if (!F->hasLocalLinkage()) {
710       if (const Comdat *C = F->getComdat()) {
711         --ComdatEntriesAlive[C];
712         DeadFunctionsInComdats.push_back(CGN);
713         continue;
714       }
715     }
716 
717     RemoveCGN(CGN);
718   }
719   if (!DeadFunctionsInComdats.empty()) {
720     // Count up all the entities in COMDAT groups
721     auto ComdatGroupReferenced = [&](const Comdat *C) {
722       auto I = ComdatEntriesAlive.find(C);
723       if (I != ComdatEntriesAlive.end())
724         ++(I->getSecond());
725     };
726     for (const Function &F : CG.getModule())
727       if (const Comdat *C = F.getComdat())
728         ComdatGroupReferenced(C);
729     for (const GlobalVariable &GV : CG.getModule().globals())
730       if (const Comdat *C = GV.getComdat())
731         ComdatGroupReferenced(C);
732     for (const GlobalAlias &GA : CG.getModule().aliases())
733       if (const Comdat *C = GA.getComdat())
734         ComdatGroupReferenced(C);
735     for (CallGraphNode *CGN : DeadFunctionsInComdats) {
736       Function *F = CGN->getFunction();
737       const Comdat *C = F->getComdat();
738       int NumAlive = ComdatEntriesAlive[C];
739       // We can remove functions in a COMDAT group if the entire group is dead.
740       assert(NumAlive >= 0);
741       if (NumAlive > 0)
742         continue;
743 
744       RemoveCGN(CGN);
745     }
746   }
747 
748   if (FunctionsToRemove.empty())
749     return false;
750 
751   // Now that we know which functions to delete, do so.  We didn't want to do
752   // this inline, because that would invalidate our CallGraph::iterator
753   // objects. :(
754   //
755   // Note that it doesn't matter that we are iterating over a non-stable order
756   // here to do this, it doesn't matter which order the functions are deleted
757   // in.
758   array_pod_sort(FunctionsToRemove.begin(), FunctionsToRemove.end());
759   FunctionsToRemove.erase(
760       std::unique(FunctionsToRemove.begin(), FunctionsToRemove.end()),
761       FunctionsToRemove.end());
762   for (CallGraphNode *CGN : FunctionsToRemove) {
763     delete CG.removeFunctionFromModule(CGN);
764     ++NumDeleted;
765   }
766   return true;
767 }
768