]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/lib/Transforms/IPO/Inliner.cpp
Upgrade NetBSD tests to 01.11.2017_23.20 snapshot
[FreeBSD/FreeBSD.git] / contrib / llvm / lib / Transforms / IPO / Inliner.cpp
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/ProfileSummaryInfo.h"
24 #include "llvm/Analysis/TargetLibraryInfo.h"
25 #include "llvm/IR/CallSite.h"
26 #include "llvm/IR/DataLayout.h"
27 #include "llvm/IR/DiagnosticInfo.h"
28 #include "llvm/IR/Instructions.h"
29 #include "llvm/IR/IntrinsicInst.h"
30 #include "llvm/IR/Module.h"
31 #include "llvm/Support/Debug.h"
32 #include "llvm/Support/raw_ostream.h"
33 #include "llvm/Transforms/IPO/InlinerPass.h"
34 #include "llvm/Transforms/Utils/Cloning.h"
35 #include "llvm/Transforms/Utils/Local.h"
36 using namespace llvm;
37
38 #define DEBUG_TYPE "inline"
39
40 STATISTIC(NumInlined, "Number of functions inlined");
41 STATISTIC(NumCallsDeleted, "Number of call sites deleted, not inlined");
42 STATISTIC(NumDeleted, "Number of functions deleted because all callers found");
43 STATISTIC(NumMergedAllocas, "Number of allocas merged together");
44
45 // This weirdly named statistic tracks the number of times that, when attempting
46 // to inline a function A into B, we analyze the callers of B in order to see
47 // if those would be more profitable and blocked inline steps.
48 STATISTIC(NumCallerCallersAnalyzed, "Number of caller-callers analyzed");
49
50 Inliner::Inliner(char &ID) : CallGraphSCCPass(ID), InsertLifetime(true) {}
51
52 Inliner::Inliner(char &ID, bool InsertLifetime)
53     : CallGraphSCCPass(ID), InsertLifetime(InsertLifetime) {}
54
55 /// For this class, we declare that we require and preserve the call graph.
56 /// If the derived class implements this method, it should
57 /// always explicitly call the implementation here.
58 void Inliner::getAnalysisUsage(AnalysisUsage &AU) const {
59   AU.addRequired<AssumptionCacheTracker>();
60   AU.addRequired<ProfileSummaryInfoWrapperPass>();
61   AU.addRequired<TargetLibraryInfoWrapperPass>();
62   getAAResultsAnalysisUsage(AU);
63   CallGraphSCCPass::getAnalysisUsage(AU);
64 }
65
66
67 typedef DenseMap<ArrayType*, std::vector<AllocaInst*> >
68 InlinedArrayAllocasTy;
69
70 /// If it is possible to inline the specified call site,
71 /// do so and update the CallGraph for this operation.
72 ///
73 /// This function also does some basic book-keeping to update the IR.  The
74 /// InlinedArrayAllocas map keeps track of any allocas that are already
75 /// available from other functions inlined into the caller.  If we are able to
76 /// inline this call site we attempt to reuse already available allocas or add
77 /// any new allocas to the set if not possible.
78 static bool InlineCallIfPossible(Pass &P, CallSite CS, InlineFunctionInfo &IFI,
79                                  InlinedArrayAllocasTy &InlinedArrayAllocas,
80                                  int InlineHistory, bool InsertLifetime) {
81   Function *Callee = CS.getCalledFunction();
82   Function *Caller = CS.getCaller();
83
84   // We need to manually construct BasicAA directly in order to disable
85   // its use of other function analyses.
86   BasicAAResult BAR(createLegacyPMBasicAAResult(P, *Callee));
87
88   // Construct our own AA results for this function. We do this manually to
89   // work around the limitations of the legacy pass manager.
90   AAResults AAR(createLegacyPMAAResults(P, *Callee, BAR));
91
92   // Try to inline the function.  Get the list of static allocas that were
93   // inlined.
94   if (!InlineFunction(CS, IFI, &AAR, InsertLifetime))
95     return false;
96
97   AttributeFuncs::mergeAttributesForInlining(*Caller, *Callee);
98
99   // Look at all of the allocas that we inlined through this call site.  If we
100   // have already inlined other allocas through other calls into this function,
101   // then we know that they have disjoint lifetimes and that we can merge them.
102   //
103   // There are many heuristics possible for merging these allocas, and the
104   // different options have different tradeoffs.  One thing that we *really*
105   // don't want to hurt is SRoA: once inlining happens, often allocas are no
106   // longer address taken and so they can be promoted.
107   //
108   // Our "solution" for that is to only merge allocas whose outermost type is an
109   // array type.  These are usually not promoted because someone is using a
110   // variable index into them.  These are also often the most important ones to
111   // merge.
112   //
113   // A better solution would be to have real memory lifetime markers in the IR
114   // and not have the inliner do any merging of allocas at all.  This would
115   // allow the backend to do proper stack slot coloring of all allocas that
116   // *actually make it to the backend*, which is really what we want.
117   //
118   // Because we don't have this information, we do this simple and useful hack.
119   //
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 true;
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();
140        AllocaNo != e; ++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 << "\n\t\tINTO: "
177                    << *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   return true;
223 }
224
225 static void emitAnalysis(CallSite CS, const Twine &Msg) {
226   Function *Caller = CS.getCaller();
227   LLVMContext &Ctx = Caller->getContext();
228   DebugLoc DLoc = CS.getInstruction()->getDebugLoc();
229   emitOptimizationRemarkAnalysis(Ctx, DEBUG_TYPE, *Caller, DLoc, Msg);
230 }
231
232 bool Inliner::shouldBeDeferred(Function *Caller, CallSite CS, InlineCost IC,
233                                int &TotalSecondaryCost) {
234
235   // For now we only handle local or inline functions.
236   if (!Caller->hasLocalLinkage() && !Caller->hasLinkOnceODRLinkage())
237     return false;
238   // Try to detect the case where the current inlining candidate caller (call
239   // it B) is a static or linkonce-ODR function and is an inlining candidate
240   // elsewhere, and the current candidate callee (call it C) is large enough
241   // that inlining it into B would make B too big to inline later. In these
242   // circumstances it may be best not to inline C into B, but to inline B into
243   // its callers.
244   //
245   // This only applies to static and linkonce-ODR functions because those are
246   // expected to be available for inlining in the translation units where they
247   // are used. Thus we will always have the opportunity to make local inlining
248   // decisions. Importantly the linkonce-ODR linkage covers inline functions
249   // and templates in C++.
250   //
251   // FIXME: All of this logic should be sunk into getInlineCost. It relies on
252   // the internal implementation of the inline cost metrics rather than
253   // treating them as truly abstract units etc.
254   TotalSecondaryCost = 0;
255   // The candidate cost to be imposed upon the current function.
256   int CandidateCost = IC.getCost() - (InlineConstants::CallPenalty + 1);
257   // This bool tracks what happens if we do NOT inline C into B.
258   bool callerWillBeRemoved = Caller->hasLocalLinkage();
259   // This bool tracks what happens if we DO inline C into B.
260   bool inliningPreventsSomeOuterInline = false;
261   for (User *U : Caller->users()) {
262     CallSite CS2(U);
263
264     // If this isn't a call to Caller (it could be some other sort
265     // of reference) skip it.  Such references will prevent the caller
266     // from being removed.
267     if (!CS2 || CS2.getCalledFunction() != Caller) {
268       callerWillBeRemoved = false;
269       continue;
270     }
271
272     InlineCost IC2 = getInlineCost(CS2);
273     ++NumCallerCallersAnalyzed;
274     if (!IC2) {
275       callerWillBeRemoved = false;
276       continue;
277     }
278     if (IC2.isAlways())
279       continue;
280
281     // See if inlining or original callsite would erase the cost delta of
282     // this callsite. We subtract off the penalty for the call instruction,
283     // which we would be deleting.
284     if (IC2.getCostDelta() <= CandidateCost) {
285       inliningPreventsSomeOuterInline = true;
286       TotalSecondaryCost += IC2.getCost();
287     }
288   }
289   // If all outer calls to Caller would get inlined, the cost for the last
290   // one is set very low by getInlineCost, in anticipation that Caller will
291   // be removed entirely.  We did not account for this above unless there
292   // is only one caller of Caller.
293   if (callerWillBeRemoved && !Caller->use_empty())
294     TotalSecondaryCost += InlineConstants::LastCallToStaticBonus;
295
296   if (inliningPreventsSomeOuterInline && TotalSecondaryCost < IC.getCost())
297     return true;
298
299   return false;
300 }
301
302 /// Return true if the inliner should attempt to inline at the given CallSite.
303 bool Inliner::shouldInline(CallSite CS) {
304   InlineCost IC = getInlineCost(CS);
305   
306   if (IC.isAlways()) {
307     DEBUG(dbgs() << "    Inlining: cost=always"
308           << ", Call: " << *CS.getInstruction() << "\n");
309     emitAnalysis(CS, Twine(CS.getCalledFunction()->getName()) +
310                          " should always be inlined (cost=always)");
311     return true;
312   }
313   
314   if (IC.isNever()) {
315     DEBUG(dbgs() << "    NOT Inlining: cost=never"
316           << ", Call: " << *CS.getInstruction() << "\n");
317     emitAnalysis(CS, Twine(CS.getCalledFunction()->getName() +
318                            " should never be inlined (cost=never)"));
319     return false;
320   }
321   
322   Function *Caller = CS.getCaller();
323   if (!IC) {
324     DEBUG(dbgs() << "    NOT Inlining: cost=" << IC.getCost()
325           << ", thres=" << (IC.getCostDelta() + IC.getCost())
326           << ", Call: " << *CS.getInstruction() << "\n");
327     emitAnalysis(CS, Twine(CS.getCalledFunction()->getName() +
328                            " too costly to inline (cost=") +
329                          Twine(IC.getCost()) + ", threshold=" +
330                          Twine(IC.getCostDelta() + IC.getCost()) + ")");
331     return false;
332   }
333
334   int TotalSecondaryCost = 0;
335   if (shouldBeDeferred(Caller, CS, IC, TotalSecondaryCost)) {
336     DEBUG(dbgs() << "    NOT Inlining: " << *CS.getInstruction()
337           << " Cost = " << IC.getCost()
338           << ", outer Cost = " << TotalSecondaryCost << '\n');
339     emitAnalysis(CS, Twine("Not inlining. Cost of inlining " +
340                            CS.getCalledFunction()->getName() +
341                            " increases the cost of inlining " +
342                            CS.getCaller()->getName() + " in other contexts"));
343     return false;
344   }
345
346   DEBUG(dbgs() << "    Inlining: cost=" << IC.getCost()
347         << ", thres=" << (IC.getCostDelta() + IC.getCost())
348         << ", Call: " << *CS.getInstruction() << '\n');
349   emitAnalysis(
350       CS, CS.getCalledFunction()->getName() + Twine(" can be inlined into ") +
351               CS.getCaller()->getName() + " with cost=" + Twine(IC.getCost()) +
352               " (threshold=" + Twine(IC.getCostDelta() + IC.getCost()) + ")");
353   return true;
354 }
355
356 /// Return true if the specified inline history ID
357 /// indicates an inline history that includes the specified function.
358 static bool InlineHistoryIncludes(Function *F, int InlineHistoryID,
359             const SmallVectorImpl<std::pair<Function*, int> > &InlineHistory) {
360   while (InlineHistoryID != -1) {
361     assert(unsigned(InlineHistoryID) < InlineHistory.size() &&
362            "Invalid inline history ID");
363     if (InlineHistory[InlineHistoryID].first == F)
364       return true;
365     InlineHistoryID = InlineHistory[InlineHistoryID].second;
366   }
367   return false;
368 }
369
370 bool Inliner::runOnSCC(CallGraphSCC &SCC) {
371   if (skipSCC(SCC))
372     return false;
373   return inlineCalls(SCC);
374 }
375
376 bool Inliner::inlineCalls(CallGraphSCC &SCC) {
377   CallGraph &CG = getAnalysis<CallGraphWrapperPass>().getCallGraph();
378   ACT = &getAnalysis<AssumptionCacheTracker>();
379   PSI = getAnalysis<ProfileSummaryInfoWrapperPass>().getPSI(CG.getModule());
380   auto &TLI = getAnalysis<TargetLibraryInfoWrapperPass>().getTLI();
381
382   SmallPtrSet<Function*, 8> SCCFunctions;
383   DEBUG(dbgs() << "Inliner visiting SCC:");
384   for (CallGraphNode *Node : SCC) {
385     Function *F = Node->getFunction();
386     if (F) SCCFunctions.insert(F);
387     DEBUG(dbgs() << " " << (F ? F->getName() : "INDIRECTNODE"));
388   }
389
390   // Scan through and identify all call sites ahead of time so that we only
391   // inline call sites in the original functions, not call sites that result
392   // from inlining other functions.
393   SmallVector<std::pair<CallSite, int>, 16> CallSites;
394   
395   // When inlining a callee produces new call sites, we want to keep track of
396   // the fact that they were inlined from the callee.  This allows us to avoid
397   // infinite inlining in some obscure cases.  To represent this, we use an
398   // index into the InlineHistory vector.
399   SmallVector<std::pair<Function*, int>, 8> InlineHistory;
400
401   for (CallGraphNode *Node : SCC) {
402     Function *F = Node->getFunction();
403     if (!F) continue;
404     
405     for (BasicBlock &BB : *F)
406       for (Instruction &I : BB) {
407         CallSite CS(cast<Value>(&I));
408         // If this isn't a call, or it is a call to an intrinsic, it can
409         // never be inlined.
410         if (!CS || isa<IntrinsicInst>(I))
411           continue;
412         
413         // If this is a direct call to an external function, we can never inline
414         // it.  If it is an indirect call, inlining may resolve it to be a
415         // direct call, so we keep it.
416         if (Function *Callee = CS.getCalledFunction())
417           if (Callee->isDeclaration())
418             continue;
419         
420         CallSites.push_back(std::make_pair(CS, -1));
421       }
422   }
423
424   DEBUG(dbgs() << ": " << CallSites.size() << " call sites.\n");
425
426   // If there are no calls in this function, exit early.
427   if (CallSites.empty())
428     return false;
429
430   // Now that we have all of the call sites, move the ones to functions in the
431   // current SCC to the end of the list.
432   unsigned FirstCallInSCC = CallSites.size();
433   for (unsigned i = 0; i < FirstCallInSCC; ++i)
434     if (Function *F = CallSites[i].first.getCalledFunction())
435       if (SCCFunctions.count(F))
436         std::swap(CallSites[i--], CallSites[--FirstCallInSCC]);
437
438   
439   InlinedArrayAllocasTy InlinedArrayAllocas;
440   InlineFunctionInfo InlineInfo(&CG, ACT);
441
442   // Now that we have all of the call sites, loop over them and inline them if
443   // it looks profitable to do so.
444   bool Changed = false;
445   bool LocalChange;
446   do {
447     LocalChange = false;
448     // Iterate over the outer loop because inlining functions can cause indirect
449     // calls to become direct calls.
450     // CallSites may be modified inside so ranged for loop can not be used.
451     for (unsigned CSi = 0; CSi != CallSites.size(); ++CSi) {
452       CallSite CS = CallSites[CSi].first;
453       
454       Function *Caller = CS.getCaller();
455       Function *Callee = CS.getCalledFunction();
456
457       // If this call site is dead and it is to a readonly function, we should
458       // just delete the call instead of trying to inline it, regardless of
459       // size.  This happens because IPSCCP propagates the result out of the
460       // call and then we're left with the dead call.
461       if (isInstructionTriviallyDead(CS.getInstruction(), &TLI)) {
462         DEBUG(dbgs() << "    -> Deleting dead call: "
463                      << *CS.getInstruction() << "\n");
464         // Update the call graph by deleting the edge from Callee to Caller.
465         CG[Caller]->removeCallEdgeFor(CS);
466         CS.getInstruction()->eraseFromParent();
467         ++NumCallsDeleted;
468       } else {
469         // We can only inline direct calls to non-declarations.
470         if (!Callee || Callee->isDeclaration()) continue;
471       
472         // If this call site was obtained by inlining another function, verify
473         // that the include path for the function did not include the callee
474         // itself.  If so, we'd be recursively inlining the same function,
475         // which would provide the same callsites, which would cause us to
476         // infinitely inline.
477         int InlineHistoryID = CallSites[CSi].second;
478         if (InlineHistoryID != -1 &&
479             InlineHistoryIncludes(Callee, InlineHistoryID, InlineHistory))
480           continue;
481         
482         LLVMContext &CallerCtx = Caller->getContext();
483
484         // Get DebugLoc to report. CS will be invalid after Inliner.
485         DebugLoc DLoc = CS.getInstruction()->getDebugLoc();
486
487         // If the policy determines that we should inline this function,
488         // try to do so.
489         if (!shouldInline(CS)) {
490           emitOptimizationRemarkMissed(CallerCtx, DEBUG_TYPE, *Caller, DLoc,
491                                        Twine(Callee->getName() +
492                                              " will not be inlined into " +
493                                              Caller->getName()));
494           continue;
495         }
496
497         // Attempt to inline the function.
498         if (!InlineCallIfPossible(*this, CS, InlineInfo, InlinedArrayAllocas,
499                                   InlineHistoryID, InsertLifetime)) {
500           emitOptimizationRemarkMissed(CallerCtx, DEBUG_TYPE, *Caller, DLoc,
501                                        Twine(Callee->getName() +
502                                              " will not be inlined into " +
503                                              Caller->getName()));
504           continue;
505         }
506         ++NumInlined;
507
508         // Report the inline decision.
509         emitOptimizationRemark(
510             CallerCtx, DEBUG_TYPE, *Caller, DLoc,
511             Twine(Callee->getName() + " inlined into " + Caller->getName()));
512
513         // If inlining this function gave us any new call sites, throw them
514         // onto our worklist to process.  They are useful inline candidates.
515         if (!InlineInfo.InlinedCalls.empty()) {
516           // Create a new inline history entry for this, so that we remember
517           // that these new callsites came about due to inlining Callee.
518           int NewHistoryID = InlineHistory.size();
519           InlineHistory.push_back(std::make_pair(Callee, InlineHistoryID));
520
521           for (Value *Ptr : InlineInfo.InlinedCalls)
522             CallSites.push_back(std::make_pair(CallSite(Ptr), NewHistoryID));
523         }
524       }
525       
526       // If we inlined or deleted the last possible call site to the function,
527       // delete the function body now.
528       if (Callee && Callee->use_empty() && Callee->hasLocalLinkage() &&
529           // TODO: Can remove if in SCC now.
530           !SCCFunctions.count(Callee) &&
531           
532           // The function may be apparently dead, but if there are indirect
533           // callgraph references to the node, we cannot delete it yet, this
534           // could invalidate the CGSCC iterator.
535           CG[Callee]->getNumReferences() == 0) {
536         DEBUG(dbgs() << "    -> Deleting dead function: "
537               << Callee->getName() << "\n");
538         CallGraphNode *CalleeNode = CG[Callee];
539
540         // Remove any call graph edges from the callee to its callees.
541         CalleeNode->removeAllCalledFunctions();
542         
543         // Removing the node for callee from the call graph and delete it.
544         delete CG.removeFunctionFromModule(CalleeNode);
545         ++NumDeleted;
546       }
547
548       // Remove this call site from the list.  If possible, use 
549       // swap/pop_back for efficiency, but do not use it if doing so would
550       // move a call site to a function in this SCC before the
551       // 'FirstCallInSCC' barrier.
552       if (SCC.isSingular()) {
553         CallSites[CSi] = CallSites.back();
554         CallSites.pop_back();
555       } else {
556         CallSites.erase(CallSites.begin()+CSi);
557       }
558       --CSi;
559
560       Changed = true;
561       LocalChange = true;
562     }
563   } while (LocalChange);
564
565   return Changed;
566 }
567
568 /// Remove now-dead linkonce functions at the end of
569 /// processing to avoid breaking the SCC traversal.
570 bool Inliner::doFinalization(CallGraph &CG) {
571   return removeDeadFunctions(CG);
572 }
573
574 /// Remove dead functions that are not included in DNR (Do Not Remove) list.
575 bool Inliner::removeDeadFunctions(CallGraph &CG, bool AlwaysInlineOnly) {
576   SmallVector<CallGraphNode*, 16> FunctionsToRemove;
577   SmallVector<CallGraphNode *, 16> DeadFunctionsInComdats;
578   SmallDenseMap<const Comdat *, int, 16> ComdatEntriesAlive;
579
580   auto RemoveCGN = [&](CallGraphNode *CGN) {
581     // Remove any call graph edges from the function to its callees.
582     CGN->removeAllCalledFunctions();
583
584     // Remove any edges from the external node to the function's call graph
585     // node.  These edges might have been made irrelegant due to
586     // optimization of the program.
587     CG.getExternalCallingNode()->removeAnyCallEdgeTo(CGN);
588
589     // Removing the node for callee from the call graph and delete it.
590     FunctionsToRemove.push_back(CGN);
591   };
592
593   // Scan for all of the functions, looking for ones that should now be removed
594   // from the program.  Insert the dead ones in the FunctionsToRemove set.
595   for (const auto &I : CG) {
596     CallGraphNode *CGN = I.second.get();
597     Function *F = CGN->getFunction();
598     if (!F || F->isDeclaration())
599       continue;
600
601     // Handle the case when this function is called and we only want to care
602     // about always-inline functions. This is a bit of a hack to share code
603     // between here and the InlineAlways pass.
604     if (AlwaysInlineOnly && !F->hasFnAttribute(Attribute::AlwaysInline))
605       continue;
606
607     // If the only remaining users of the function are dead constants, remove
608     // them.
609     F->removeDeadConstantUsers();
610
611     if (!F->isDefTriviallyDead())
612       continue;
613
614     // It is unsafe to drop a function with discardable linkage from a COMDAT
615     // without also dropping the other members of the COMDAT.
616     // The inliner doesn't visit non-function entities which are in COMDAT
617     // groups so it is unsafe to do so *unless* the linkage is local.
618     if (!F->hasLocalLinkage()) {
619       if (const Comdat *C = F->getComdat()) {
620         --ComdatEntriesAlive[C];
621         DeadFunctionsInComdats.push_back(CGN);
622         continue;
623       }
624     }
625
626     RemoveCGN(CGN);
627   }
628   if (!DeadFunctionsInComdats.empty()) {
629     // Count up all the entities in COMDAT groups
630     auto ComdatGroupReferenced = [&](const Comdat *C) {
631       auto I = ComdatEntriesAlive.find(C);
632       if (I != ComdatEntriesAlive.end())
633         ++(I->getSecond());
634     };
635     for (const Function &F : CG.getModule())
636       if (const Comdat *C = F.getComdat())
637         ComdatGroupReferenced(C);
638     for (const GlobalVariable &GV : CG.getModule().globals())
639       if (const Comdat *C = GV.getComdat())
640         ComdatGroupReferenced(C);
641     for (const GlobalAlias &GA : CG.getModule().aliases())
642       if (const Comdat *C = GA.getComdat())
643         ComdatGroupReferenced(C);
644     for (CallGraphNode *CGN : DeadFunctionsInComdats) {
645       Function *F = CGN->getFunction();
646       const Comdat *C = F->getComdat();
647       int NumAlive = ComdatEntriesAlive[C];
648       // We can remove functions in a COMDAT group if the entire group is dead.
649       assert(NumAlive >= 0);
650       if (NumAlive > 0)
651         continue;
652
653       RemoveCGN(CGN);
654     }
655   }
656
657   if (FunctionsToRemove.empty())
658     return false;
659
660   // Now that we know which functions to delete, do so.  We didn't want to do
661   // this inline, because that would invalidate our CallGraph::iterator
662   // objects. :(
663   //
664   // Note that it doesn't matter that we are iterating over a non-stable order
665   // here to do this, it doesn't matter which order the functions are deleted
666   // in.
667   array_pod_sort(FunctionsToRemove.begin(), FunctionsToRemove.end());
668   FunctionsToRemove.erase(std::unique(FunctionsToRemove.begin(),
669                                       FunctionsToRemove.end()),
670                           FunctionsToRemove.end());
671   for (CallGraphNode *CGN : FunctionsToRemove) {
672     delete CG.removeFunctionFromModule(CGN);
673     ++NumDeleted;
674   }
675   return true;
676 }