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