1//===- ArgumentPromotion.cpp - Promote by-reference arguments -------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This pass promotes "by reference" arguments to be "by value" arguments.  In
10// practice, this means looking for internal functions that have pointer
11// arguments.  If it can prove, through the use of alias analysis, that an
12// argument is *only* loaded, then it can pass the value into the function
13// instead of the address of the value.  This can cause recursive simplification
14// of code and lead to the elimination of allocas (especially in C++ template
15// code like the STL).
16//
17// This pass also handles aggregate arguments that are passed into a function,
18// scalarizing them if the elements of the aggregate are only loaded.  Note that
19// by default it refuses to scalarize aggregates which would require passing in
20// more than three operands to the function, because passing thousands of
21// operands for a large array or structure is unprofitable! This limit can be
22// configured or disabled, however.
23//
24// Note that this transformation could also be done for arguments that are only
25// stored to (returning the value instead), but does not currently.  This case
26// would be best handled when and if LLVM begins supporting multiple return
27// values from functions.
28//
29//===----------------------------------------------------------------------===//
30
31#include "llvm/Transforms/IPO/ArgumentPromotion.h"
32#include "llvm/ADT/DepthFirstIterator.h"
33#include "llvm/ADT/None.h"
34#include "llvm/ADT/Optional.h"
35#include "llvm/ADT/STLExtras.h"
36#include "llvm/ADT/SmallPtrSet.h"
37#include "llvm/ADT/SmallVector.h"
38#include "llvm/ADT/Statistic.h"
39#include "llvm/ADT/StringExtras.h"
40#include "llvm/ADT/Twine.h"
41#include "llvm/Analysis/AliasAnalysis.h"
42#include "llvm/Analysis/AssumptionCache.h"
43#include "llvm/Analysis/BasicAliasAnalysis.h"
44#include "llvm/Analysis/CGSCCPassManager.h"
45#include "llvm/Analysis/CallGraph.h"
46#include "llvm/Analysis/CallGraphSCCPass.h"
47#include "llvm/Analysis/LazyCallGraph.h"
48#include "llvm/Analysis/Loads.h"
49#include "llvm/Analysis/MemoryLocation.h"
50#include "llvm/Analysis/TargetLibraryInfo.h"
51#include "llvm/Analysis/TargetTransformInfo.h"
52#include "llvm/IR/Argument.h"
53#include "llvm/IR/Attributes.h"
54#include "llvm/IR/BasicBlock.h"
55#include "llvm/IR/CFG.h"
56#include "llvm/IR/CallSite.h"
57#include "llvm/IR/Constants.h"
58#include "llvm/IR/DataLayout.h"
59#include "llvm/IR/DerivedTypes.h"
60#include "llvm/IR/Function.h"
61#include "llvm/IR/IRBuilder.h"
62#include "llvm/IR/InstrTypes.h"
63#include "llvm/IR/Instruction.h"
64#include "llvm/IR/Instructions.h"
65#include "llvm/IR/Metadata.h"
66#include "llvm/IR/Module.h"
67#include "llvm/IR/NoFolder.h"
68#include "llvm/IR/PassManager.h"
69#include "llvm/IR/Type.h"
70#include "llvm/IR/Use.h"
71#include "llvm/IR/User.h"
72#include "llvm/IR/Value.h"
73#include "llvm/InitializePasses.h"
74#include "llvm/Pass.h"
75#include "llvm/Support/Casting.h"
76#include "llvm/Support/Debug.h"
77#include "llvm/Support/raw_ostream.h"
78#include "llvm/Transforms/IPO.h"
79#include <algorithm>
80#include <cassert>
81#include <cstdint>
82#include <functional>
83#include <iterator>
84#include <map>
85#include <set>
86#include <string>
87#include <utility>
88#include <vector>
89
90using namespace llvm;
91
92#define DEBUG_TYPE "argpromotion"
93
94STATISTIC(NumArgumentsPromoted, "Number of pointer arguments promoted");
95STATISTIC(NumAggregatesPromoted, "Number of aggregate arguments promoted");
96STATISTIC(NumByValArgsPromoted, "Number of byval arguments promoted");
97STATISTIC(NumArgumentsDead, "Number of dead pointer args eliminated");
98
99/// A vector used to hold the indices of a single GEP instruction
100using IndicesVector = std::vector<uint64_t>;
101
102/// DoPromotion - This method actually performs the promotion of the specified
103/// arguments, and returns the new function.  At this point, we know that it's
104/// safe to do so.
105static Function *
106doPromotion(Function *F, SmallPtrSetImpl<Argument *> &ArgsToPromote,
107            SmallPtrSetImpl<Argument *> &ByValArgsToTransform,
108            Optional<function_ref<void(CallSite OldCS, CallSite NewCS)>>
109                ReplaceCallSite) {
110  // Start by computing a new prototype for the function, which is the same as
111  // the old function, but has modified arguments.
112  FunctionType *FTy = F->getFunctionType();
113  std::vector<Type *> Params;
114
115  using ScalarizeTable = std::set<std::pair<Type *, IndicesVector>>;
116
117  // ScalarizedElements - If we are promoting a pointer that has elements
118  // accessed out of it, keep track of which elements are accessed so that we
119  // can add one argument for each.
120  //
121  // Arguments that are directly loaded will have a zero element value here, to
122  // handle cases where there are both a direct load and GEP accesses.
123  std::map<Argument *, ScalarizeTable> ScalarizedElements;
124
125  // OriginalLoads - Keep track of a representative load instruction from the
126  // original function so that we can tell the alias analysis implementation
127  // what the new GEP/Load instructions we are inserting look like.
128  // We need to keep the original loads for each argument and the elements
129  // of the argument that are accessed.
130  std::map<std::pair<Argument *, IndicesVector>, LoadInst *> OriginalLoads;
131
132  // Attribute - Keep track of the parameter attributes for the arguments
133  // that we are *not* promoting. For the ones that we do promote, the parameter
134  // attributes are lost
135  SmallVector<AttributeSet, 8> ArgAttrVec;
136  AttributeList PAL = F->getAttributes();
137
138  // First, determine the new argument list
139  unsigned ArgNo = 0;
140  for (Function::arg_iterator I = F->arg_begin(), E = F->arg_end(); I != E;
141       ++I, ++ArgNo) {
142    if (ByValArgsToTransform.count(&*I)) {
143      // Simple byval argument? Just add all the struct element types.
144      Type *AgTy = cast<PointerType>(I->getType())->getElementType();
145      StructType *STy = cast<StructType>(AgTy);
146      Params.insert(Params.end(), STy->element_begin(), STy->element_end());
147      ArgAttrVec.insert(ArgAttrVec.end(), STy->getNumElements(),
148                        AttributeSet());
149      ++NumByValArgsPromoted;
150    } else if (!ArgsToPromote.count(&*I)) {
151      // Unchanged argument
152      Params.push_back(I->getType());
153      ArgAttrVec.push_back(PAL.getParamAttributes(ArgNo));
154    } else if (I->use_empty()) {
155      // Dead argument (which are always marked as promotable)
156      ++NumArgumentsDead;
157
158      // There may be remaining metadata uses of the argument for things like
159      // llvm.dbg.value. Replace them with undef.
160      I->replaceAllUsesWith(UndefValue::get(I->getType()));
161    } else {
162      // Okay, this is being promoted. This means that the only uses are loads
163      // or GEPs which are only used by loads
164
165      // In this table, we will track which indices are loaded from the argument
166      // (where direct loads are tracked as no indices).
167      ScalarizeTable &ArgIndices = ScalarizedElements[&*I];
168      for (User *U : I->users()) {
169        Instruction *UI = cast<Instruction>(U);
170        Type *SrcTy;
171        if (LoadInst *L = dyn_cast<LoadInst>(UI))
172          SrcTy = L->getType();
173        else
174          SrcTy = cast<GetElementPtrInst>(UI)->getSourceElementType();
175        IndicesVector Indices;
176        Indices.reserve(UI->getNumOperands() - 1);
177        // Since loads will only have a single operand, and GEPs only a single
178        // non-index operand, this will record direct loads without any indices,
179        // and gep+loads with the GEP indices.
180        for (User::op_iterator II = UI->op_begin() + 1, IE = UI->op_end();
181             II != IE; ++II)
182          Indices.push_back(cast<ConstantInt>(*II)->getSExtValue());
183        // GEPs with a single 0 index can be merged with direct loads
184        if (Indices.size() == 1 && Indices.front() == 0)
185          Indices.clear();
186        ArgIndices.insert(std::make_pair(SrcTy, Indices));
187        LoadInst *OrigLoad;
188        if (LoadInst *L = dyn_cast<LoadInst>(UI))
189          OrigLoad = L;
190        else
191          // Take any load, we will use it only to update Alias Analysis
192          OrigLoad = cast<LoadInst>(UI->user_back());
193        OriginalLoads[std::make_pair(&*I, Indices)] = OrigLoad;
194      }
195
196      // Add a parameter to the function for each element passed in.
197      for (const auto &ArgIndex : ArgIndices) {
198        // not allowed to dereference ->begin() if size() is 0
199        Params.push_back(GetElementPtrInst::getIndexedType(
200            cast<PointerType>(I->getType()->getScalarType())->getElementType(),
201            ArgIndex.second));
202        ArgAttrVec.push_back(AttributeSet());
203        assert(Params.back());
204      }
205
206      if (ArgIndices.size() == 1 && ArgIndices.begin()->second.empty())
207        ++NumArgumentsPromoted;
208      else
209        ++NumAggregatesPromoted;
210    }
211  }
212
213  Type *RetTy = FTy->getReturnType();
214
215  // Construct the new function type using the new arguments.
216  FunctionType *NFTy = FunctionType::get(RetTy, Params, FTy->isVarArg());
217
218  // Create the new function body and insert it into the module.
219  Function *NF = Function::Create(NFTy, F->getLinkage(), F->getAddressSpace(),
220                                  F->getName());
221  NF->copyAttributesFrom(F);
222
223  // Patch the pointer to LLVM function in debug info descriptor.
224  NF->setSubprogram(F->getSubprogram());
225  F->setSubprogram(nullptr);
226
227  LLVM_DEBUG(dbgs() << "ARG PROMOTION:  Promoting to:" << *NF << "\n"
228                    << "From: " << *F);
229
230  // Recompute the parameter attributes list based on the new arguments for
231  // the function.
232  NF->setAttributes(AttributeList::get(F->getContext(), PAL.getFnAttributes(),
233                                       PAL.getRetAttributes(), ArgAttrVec));
234  ArgAttrVec.clear();
235
236  F->getParent()->getFunctionList().insert(F->getIterator(), NF);
237  NF->takeName(F);
238
239  // Loop over all of the callers of the function, transforming the call sites
240  // to pass in the loaded pointers.
241  //
242  SmallVector<Value *, 16> Args;
243  while (!F->use_empty()) {
244    CallSite CS(F->user_back());
245    assert(CS.getCalledFunction() == F);
246    Instruction *Call = CS.getInstruction();
247    const AttributeList &CallPAL = CS.getAttributes();
248    IRBuilder<NoFolder> IRB(Call);
249
250    // Loop over the operands, inserting GEP and loads in the caller as
251    // appropriate.
252    CallSite::arg_iterator AI = CS.arg_begin();
253    ArgNo = 0;
254    for (Function::arg_iterator I = F->arg_begin(), E = F->arg_end(); I != E;
255         ++I, ++AI, ++ArgNo)
256      if (!ArgsToPromote.count(&*I) && !ByValArgsToTransform.count(&*I)) {
257        Args.push_back(*AI); // Unmodified argument
258        ArgAttrVec.push_back(CallPAL.getParamAttributes(ArgNo));
259      } else if (ByValArgsToTransform.count(&*I)) {
260        // Emit a GEP and load for each element of the struct.
261        Type *AgTy = cast<PointerType>(I->getType())->getElementType();
262        StructType *STy = cast<StructType>(AgTy);
263        Value *Idxs[2] = {
264            ConstantInt::get(Type::getInt32Ty(F->getContext()), 0), nullptr};
265        for (unsigned i = 0, e = STy->getNumElements(); i != e; ++i) {
266          Idxs[1] = ConstantInt::get(Type::getInt32Ty(F->getContext()), i);
267          auto *Idx =
268              IRB.CreateGEP(STy, *AI, Idxs, (*AI)->getName() + "." + Twine(i));
269          // TODO: Tell AA about the new values?
270          Args.push_back(IRB.CreateLoad(STy->getElementType(i), Idx,
271                                        Idx->getName() + ".val"));
272          ArgAttrVec.push_back(AttributeSet());
273        }
274      } else if (!I->use_empty()) {
275        // Non-dead argument: insert GEPs and loads as appropriate.
276        ScalarizeTable &ArgIndices = ScalarizedElements[&*I];
277        // Store the Value* version of the indices in here, but declare it now
278        // for reuse.
279        std::vector<Value *> Ops;
280        for (const auto &ArgIndex : ArgIndices) {
281          Value *V = *AI;
282          LoadInst *OrigLoad =
283              OriginalLoads[std::make_pair(&*I, ArgIndex.second)];
284          if (!ArgIndex.second.empty()) {
285            Ops.reserve(ArgIndex.second.size());
286            Type *ElTy = V->getType();
287            for (auto II : ArgIndex.second) {
288              // Use i32 to index structs, and i64 for others (pointers/arrays).
289              // This satisfies GEP constraints.
290              Type *IdxTy =
291                  (ElTy->isStructTy() ? Type::getInt32Ty(F->getContext())
292                                      : Type::getInt64Ty(F->getContext()));
293              Ops.push_back(ConstantInt::get(IdxTy, II));
294              // Keep track of the type we're currently indexing.
295              if (auto *ElPTy = dyn_cast<PointerType>(ElTy))
296                ElTy = ElPTy->getElementType();
297              else
298                ElTy = cast<CompositeType>(ElTy)->getTypeAtIndex(II);
299            }
300            // And create a GEP to extract those indices.
301            V = IRB.CreateGEP(ArgIndex.first, V, Ops, V->getName() + ".idx");
302            Ops.clear();
303          }
304          // Since we're replacing a load make sure we take the alignment
305          // of the previous load.
306          LoadInst *newLoad =
307              IRB.CreateLoad(OrigLoad->getType(), V, V->getName() + ".val");
308          newLoad->setAlignment(MaybeAlign(OrigLoad->getAlignment()));
309          // Transfer the AA info too.
310          AAMDNodes AAInfo;
311          OrigLoad->getAAMetadata(AAInfo);
312          newLoad->setAAMetadata(AAInfo);
313
314          Args.push_back(newLoad);
315          ArgAttrVec.push_back(AttributeSet());
316        }
317      }
318
319    // Push any varargs arguments on the list.
320    for (; AI != CS.arg_end(); ++AI, ++ArgNo) {
321      Args.push_back(*AI);
322      ArgAttrVec.push_back(CallPAL.getParamAttributes(ArgNo));
323    }
324
325    SmallVector<OperandBundleDef, 1> OpBundles;
326    CS.getOperandBundlesAsDefs(OpBundles);
327
328    CallSite NewCS;
329    if (InvokeInst *II = dyn_cast<InvokeInst>(Call)) {
330      NewCS = InvokeInst::Create(NF, II->getNormalDest(), II->getUnwindDest(),
331                                 Args, OpBundles, "", Call);
332    } else {
333      auto *NewCall = CallInst::Create(NF, Args, OpBundles, "", Call);
334      NewCall->setTailCallKind(cast<CallInst>(Call)->getTailCallKind());
335      NewCS = NewCall;
336    }
337    NewCS.setCallingConv(CS.getCallingConv());
338    NewCS.setAttributes(
339        AttributeList::get(F->getContext(), CallPAL.getFnAttributes(),
340                           CallPAL.getRetAttributes(), ArgAttrVec));
341    NewCS->setDebugLoc(Call->getDebugLoc());
342    uint64_t W;
343    if (Call->extractProfTotalWeight(W))
344      NewCS->setProfWeight(W);
345    Args.clear();
346    ArgAttrVec.clear();
347
348    // Update the callgraph to know that the callsite has been transformed.
349    if (ReplaceCallSite)
350      (*ReplaceCallSite)(CS, NewCS);
351
352    if (!Call->use_empty()) {
353      Call->replaceAllUsesWith(NewCS.getInstruction());
354      NewCS->takeName(Call);
355    }
356
357    // Finally, remove the old call from the program, reducing the use-count of
358    // F.
359    Call->eraseFromParent();
360  }
361
362  const DataLayout &DL = F->getParent()->getDataLayout();
363
364  // Since we have now created the new function, splice the body of the old
365  // function right into the new function, leaving the old rotting hulk of the
366  // function empty.
367  NF->getBasicBlockList().splice(NF->begin(), F->getBasicBlockList());
368
369  // Loop over the argument list, transferring uses of the old arguments over to
370  // the new arguments, also transferring over the names as well.
371  for (Function::arg_iterator I = F->arg_begin(), E = F->arg_end(),
372                              I2 = NF->arg_begin();
373       I != E; ++I) {
374    if (!ArgsToPromote.count(&*I) && !ByValArgsToTransform.count(&*I)) {
375      // If this is an unmodified argument, move the name and users over to the
376      // new version.
377      I->replaceAllUsesWith(&*I2);
378      I2->takeName(&*I);
379      ++I2;
380      continue;
381    }
382
383    if (ByValArgsToTransform.count(&*I)) {
384      // In the callee, we create an alloca, and store each of the new incoming
385      // arguments into the alloca.
386      Instruction *InsertPt = &NF->begin()->front();
387
388      // Just add all the struct element types.
389      Type *AgTy = cast<PointerType>(I->getType())->getElementType();
390      Value *TheAlloca =
391          new AllocaInst(AgTy, DL.getAllocaAddrSpace(), nullptr,
392                         MaybeAlign(I->getParamAlignment()), "", InsertPt);
393      StructType *STy = cast<StructType>(AgTy);
394      Value *Idxs[2] = {ConstantInt::get(Type::getInt32Ty(F->getContext()), 0),
395                        nullptr};
396
397      for (unsigned i = 0, e = STy->getNumElements(); i != e; ++i) {
398        Idxs[1] = ConstantInt::get(Type::getInt32Ty(F->getContext()), i);
399        Value *Idx = GetElementPtrInst::Create(
400            AgTy, TheAlloca, Idxs, TheAlloca->getName() + "." + Twine(i),
401            InsertPt);
402        I2->setName(I->getName() + "." + Twine(i));
403        new StoreInst(&*I2++, Idx, InsertPt);
404      }
405
406      // Anything that used the arg should now use the alloca.
407      I->replaceAllUsesWith(TheAlloca);
408      TheAlloca->takeName(&*I);
409
410      // If the alloca is used in a call, we must clear the tail flag since
411      // the callee now uses an alloca from the caller.
412      for (User *U : TheAlloca->users()) {
413        CallInst *Call = dyn_cast<CallInst>(U);
414        if (!Call)
415          continue;
416        Call->setTailCall(false);
417      }
418      continue;
419    }
420
421    if (I->use_empty())
422      continue;
423
424    // Otherwise, if we promoted this argument, then all users are load
425    // instructions (or GEPs with only load users), and all loads should be
426    // using the new argument that we added.
427    ScalarizeTable &ArgIndices = ScalarizedElements[&*I];
428
429    while (!I->use_empty()) {
430      if (LoadInst *LI = dyn_cast<LoadInst>(I->user_back())) {
431        assert(ArgIndices.begin()->second.empty() &&
432               "Load element should sort to front!");
433        I2->setName(I->getName() + ".val");
434        LI->replaceAllUsesWith(&*I2);
435        LI->eraseFromParent();
436        LLVM_DEBUG(dbgs() << "*** Promoted load of argument '" << I->getName()
437                          << "' in function '" << F->getName() << "'\n");
438      } else {
439        GetElementPtrInst *GEP = cast<GetElementPtrInst>(I->user_back());
440        IndicesVector Operands;
441        Operands.reserve(GEP->getNumIndices());
442        for (User::op_iterator II = GEP->idx_begin(), IE = GEP->idx_end();
443             II != IE; ++II)
444          Operands.push_back(cast<ConstantInt>(*II)->getSExtValue());
445
446        // GEPs with a single 0 index can be merged with direct loads
447        if (Operands.size() == 1 && Operands.front() == 0)
448          Operands.clear();
449
450        Function::arg_iterator TheArg = I2;
451        for (ScalarizeTable::iterator It = ArgIndices.begin();
452             It->second != Operands; ++It, ++TheArg) {
453          assert(It != ArgIndices.end() && "GEP not handled??");
454        }
455
456        std::string NewName = I->getName();
457        for (unsigned i = 0, e = Operands.size(); i != e; ++i) {
458          NewName += "." + utostr(Operands[i]);
459        }
460        NewName += ".val";
461        TheArg->setName(NewName);
462
463        LLVM_DEBUG(dbgs() << "*** Promoted agg argument '" << TheArg->getName()
464                          << "' of function '" << NF->getName() << "'\n");
465
466        // All of the uses must be load instructions.  Replace them all with
467        // the argument specified by ArgNo.
468        while (!GEP->use_empty()) {
469          LoadInst *L = cast<LoadInst>(GEP->user_back());
470          L->replaceAllUsesWith(&*TheArg);
471          L->eraseFromParent();
472        }
473        GEP->eraseFromParent();
474      }
475    }
476
477    // Increment I2 past all of the arguments added for this promoted pointer.
478    std::advance(I2, ArgIndices.size());
479  }
480
481  return NF;
482}
483
484/// Return true if we can prove that all callees pass in a valid pointer for the
485/// specified function argument.
486static bool allCallersPassValidPointerForArgument(Argument *Arg, Type *Ty) {
487  Function *Callee = Arg->getParent();
488  const DataLayout &DL = Callee->getParent()->getDataLayout();
489
490  unsigned ArgNo = Arg->getArgNo();
491
492  // Look at all call sites of the function.  At this point we know we only have
493  // direct callees.
494  for (User *U : Callee->users()) {
495    CallSite CS(U);
496    assert(CS && "Should only have direct calls!");
497
498    if (!isDereferenceablePointer(CS.getArgument(ArgNo), Ty, DL))
499      return false;
500  }
501  return true;
502}
503
504/// Returns true if Prefix is a prefix of longer. That means, Longer has a size
505/// that is greater than or equal to the size of prefix, and each of the
506/// elements in Prefix is the same as the corresponding elements in Longer.
507///
508/// This means it also returns true when Prefix and Longer are equal!
509static bool isPrefix(const IndicesVector &Prefix, const IndicesVector &Longer) {
510  if (Prefix.size() > Longer.size())
511    return false;
512  return std::equal(Prefix.begin(), Prefix.end(), Longer.begin());
513}
514
515/// Checks if Indices, or a prefix of Indices, is in Set.
516static bool prefixIn(const IndicesVector &Indices,
517                     std::set<IndicesVector> &Set) {
518  std::set<IndicesVector>::iterator Low;
519  Low = Set.upper_bound(Indices);
520  if (Low != Set.begin())
521    Low--;
522  // Low is now the last element smaller than or equal to Indices. This means
523  // it points to a prefix of Indices (possibly Indices itself), if such
524  // prefix exists.
525  //
526  // This load is safe if any prefix of its operands is safe to load.
527  return Low != Set.end() && isPrefix(*Low, Indices);
528}
529
530/// Mark the given indices (ToMark) as safe in the given set of indices
531/// (Safe). Marking safe usually means adding ToMark to Safe. However, if there
532/// is already a prefix of Indices in Safe, Indices are implicitely marked safe
533/// already. Furthermore, any indices that Indices is itself a prefix of, are
534/// removed from Safe (since they are implicitely safe because of Indices now).
535static void markIndicesSafe(const IndicesVector &ToMark,
536                            std::set<IndicesVector> &Safe) {
537  std::set<IndicesVector>::iterator Low;
538  Low = Safe.upper_bound(ToMark);
539  // Guard against the case where Safe is empty
540  if (Low != Safe.begin())
541    Low--;
542  // Low is now the last element smaller than or equal to Indices. This
543  // means it points to a prefix of Indices (possibly Indices itself), if
544  // such prefix exists.
545  if (Low != Safe.end()) {
546    if (isPrefix(*Low, ToMark))
547      // If there is already a prefix of these indices (or exactly these
548      // indices) marked a safe, don't bother adding these indices
549      return;
550
551    // Increment Low, so we can use it as a "insert before" hint
552    ++Low;
553  }
554  // Insert
555  Low = Safe.insert(Low, ToMark);
556  ++Low;
557  // If there we're a prefix of longer index list(s), remove those
558  std::set<IndicesVector>::iterator End = Safe.end();
559  while (Low != End && isPrefix(ToMark, *Low)) {
560    std::set<IndicesVector>::iterator Remove = Low;
561    ++Low;
562    Safe.erase(Remove);
563  }
564}
565
566/// isSafeToPromoteArgument - As you might guess from the name of this method,
567/// it checks to see if it is both safe and useful to promote the argument.
568/// This method limits promotion of aggregates to only promote up to three
569/// elements of the aggregate in order to avoid exploding the number of
570/// arguments passed in.
571static bool isSafeToPromoteArgument(Argument *Arg, Type *ByValTy, AAResults &AAR,
572                                    unsigned MaxElements) {
573  using GEPIndicesSet = std::set<IndicesVector>;
574
575  // Quick exit for unused arguments
576  if (Arg->use_empty())
577    return true;
578
579  // We can only promote this argument if all of the uses are loads, or are GEP
580  // instructions (with constant indices) that are subsequently loaded.
581  //
582  // Promoting the argument causes it to be loaded in the caller
583  // unconditionally. This is only safe if we can prove that either the load
584  // would have happened in the callee anyway (ie, there is a load in the entry
585  // block) or the pointer passed in at every call site is guaranteed to be
586  // valid.
587  // In the former case, invalid loads can happen, but would have happened
588  // anyway, in the latter case, invalid loads won't happen. This prevents us
589  // from introducing an invalid load that wouldn't have happened in the
590  // original code.
591  //
592  // This set will contain all sets of indices that are loaded in the entry
593  // block, and thus are safe to unconditionally load in the caller.
594  GEPIndicesSet SafeToUnconditionallyLoad;
595
596  // This set contains all the sets of indices that we are planning to promote.
597  // This makes it possible to limit the number of arguments added.
598  GEPIndicesSet ToPromote;
599
600  // If the pointer is always valid, any load with first index 0 is valid.
601
602  if (ByValTy)
603    SafeToUnconditionallyLoad.insert(IndicesVector(1, 0));
604
605  // Whenever a new underlying type for the operand is found, make sure it's
606  // consistent with the GEPs and loads we've already seen and, if necessary,
607  // use it to see if all incoming pointers are valid (which implies the 0-index
608  // is safe).
609  Type *BaseTy = ByValTy;
610  auto UpdateBaseTy = [&](Type *NewBaseTy) {
611    if (BaseTy)
612      return BaseTy == NewBaseTy;
613
614    BaseTy = NewBaseTy;
615    if (allCallersPassValidPointerForArgument(Arg, BaseTy)) {
616      assert(SafeToUnconditionallyLoad.empty());
617      SafeToUnconditionallyLoad.insert(IndicesVector(1, 0));
618    }
619
620    return true;
621  };
622
623  // First, iterate the entry block and mark loads of (geps of) arguments as
624  // safe.
625  BasicBlock &EntryBlock = Arg->getParent()->front();
626  // Declare this here so we can reuse it
627  IndicesVector Indices;
628  for (Instruction &I : EntryBlock)
629    if (LoadInst *LI = dyn_cast<LoadInst>(&I)) {
630      Value *V = LI->getPointerOperand();
631      if (GetElementPtrInst *GEP = dyn_cast<GetElementPtrInst>(V)) {
632        V = GEP->getPointerOperand();
633        if (V == Arg) {
634          // This load actually loads (part of) Arg? Check the indices then.
635          Indices.reserve(GEP->getNumIndices());
636          for (User::op_iterator II = GEP->idx_begin(), IE = GEP->idx_end();
637               II != IE; ++II)
638            if (ConstantInt *CI = dyn_cast<ConstantInt>(*II))
639              Indices.push_back(CI->getSExtValue());
640            else
641              // We found a non-constant GEP index for this argument? Bail out
642              // right away, can't promote this argument at all.
643              return false;
644
645          if (!UpdateBaseTy(GEP->getSourceElementType()))
646            return false;
647
648          // Indices checked out, mark them as safe
649          markIndicesSafe(Indices, SafeToUnconditionallyLoad);
650          Indices.clear();
651        }
652      } else if (V == Arg) {
653        // Direct loads are equivalent to a GEP with a single 0 index.
654        markIndicesSafe(IndicesVector(1, 0), SafeToUnconditionallyLoad);
655
656        if (BaseTy && LI->getType() != BaseTy)
657          return false;
658
659        BaseTy = LI->getType();
660      }
661    }
662
663  // Now, iterate all uses of the argument to see if there are any uses that are
664  // not (GEP+)loads, or any (GEP+)loads that are not safe to promote.
665  SmallVector<LoadInst *, 16> Loads;
666  IndicesVector Operands;
667  for (Use &U : Arg->uses()) {
668    User *UR = U.getUser();
669    Operands.clear();
670    if (LoadInst *LI = dyn_cast<LoadInst>(UR)) {
671      // Don't hack volatile/atomic loads
672      if (!LI->isSimple())
673        return false;
674      Loads.push_back(LI);
675      // Direct loads are equivalent to a GEP with a zero index and then a load.
676      Operands.push_back(0);
677
678      if (!UpdateBaseTy(LI->getType()))
679        return false;
680    } else if (GetElementPtrInst *GEP = dyn_cast<GetElementPtrInst>(UR)) {
681      if (GEP->use_empty()) {
682        // Dead GEP's cause trouble later.  Just remove them if we run into
683        // them.
684        GEP->eraseFromParent();
685        // TODO: This runs the above loop over and over again for dead GEPs
686        // Couldn't we just do increment the UI iterator earlier and erase the
687        // use?
688        return isSafeToPromoteArgument(Arg, ByValTy, AAR, MaxElements);
689      }
690
691      if (!UpdateBaseTy(GEP->getSourceElementType()))
692        return false;
693
694      // Ensure that all of the indices are constants.
695      for (User::op_iterator i = GEP->idx_begin(), e = GEP->idx_end(); i != e;
696           ++i)
697        if (ConstantInt *C = dyn_cast<ConstantInt>(*i))
698          Operands.push_back(C->getSExtValue());
699        else
700          return false; // Not a constant operand GEP!
701
702      // Ensure that the only users of the GEP are load instructions.
703      for (User *GEPU : GEP->users())
704        if (LoadInst *LI = dyn_cast<LoadInst>(GEPU)) {
705          // Don't hack volatile/atomic loads
706          if (!LI->isSimple())
707            return false;
708          Loads.push_back(LI);
709        } else {
710          // Other uses than load?
711          return false;
712        }
713    } else {
714      return false; // Not a load or a GEP.
715    }
716
717    // Now, see if it is safe to promote this load / loads of this GEP. Loading
718    // is safe if Operands, or a prefix of Operands, is marked as safe.
719    if (!prefixIn(Operands, SafeToUnconditionallyLoad))
720      return false;
721
722    // See if we are already promoting a load with these indices. If not, check
723    // to make sure that we aren't promoting too many elements.  If so, nothing
724    // to do.
725    if (ToPromote.find(Operands) == ToPromote.end()) {
726      if (MaxElements > 0 && ToPromote.size() == MaxElements) {
727        LLVM_DEBUG(dbgs() << "argpromotion not promoting argument '"
728                          << Arg->getName()
729                          << "' because it would require adding more "
730                          << "than " << MaxElements
731                          << " arguments to the function.\n");
732        // We limit aggregate promotion to only promoting up to a fixed number
733        // of elements of the aggregate.
734        return false;
735      }
736      ToPromote.insert(std::move(Operands));
737    }
738  }
739
740  if (Loads.empty())
741    return true; // No users, this is a dead argument.
742
743  // Okay, now we know that the argument is only used by load instructions and
744  // it is safe to unconditionally perform all of them. Use alias analysis to
745  // check to see if the pointer is guaranteed to not be modified from entry of
746  // the function to each of the load instructions.
747
748  // Because there could be several/many load instructions, remember which
749  // blocks we know to be transparent to the load.
750  df_iterator_default_set<BasicBlock *, 16> TranspBlocks;
751
752  for (LoadInst *Load : Loads) {
753    // Check to see if the load is invalidated from the start of the block to
754    // the load itself.
755    BasicBlock *BB = Load->getParent();
756
757    MemoryLocation Loc = MemoryLocation::get(Load);
758    if (AAR.canInstructionRangeModRef(BB->front(), *Load, Loc, ModRefInfo::Mod))
759      return false; // Pointer is invalidated!
760
761    // Now check every path from the entry block to the load for transparency.
762    // To do this, we perform a depth first search on the inverse CFG from the
763    // loading block.
764    for (BasicBlock *P : predecessors(BB)) {
765      for (BasicBlock *TranspBB : inverse_depth_first_ext(P, TranspBlocks))
766        if (AAR.canBasicBlockModify(*TranspBB, Loc))
767          return false;
768    }
769  }
770
771  // If the path from the entry of the function to each load is free of
772  // instructions that potentially invalidate the load, we can make the
773  // transformation!
774  return true;
775}
776
777/// Checks if a type could have padding bytes.
778static bool isDenselyPacked(Type *type, const DataLayout &DL) {
779  // There is no size information, so be conservative.
780  if (!type->isSized())
781    return false;
782
783  // If the alloc size is not equal to the storage size, then there are padding
784  // bytes. For x86_fp80 on x86-64, size: 80 alloc size: 128.
785  if (DL.getTypeSizeInBits(type) != DL.getTypeAllocSizeInBits(type))
786    return false;
787
788  if (!isa<CompositeType>(type))
789    return true;
790
791  // For homogenous sequential types, check for padding within members.
792  if (SequentialType *seqTy = dyn_cast<SequentialType>(type))
793    return isDenselyPacked(seqTy->getElementType(), DL);
794
795  // Check for padding within and between elements of a struct.
796  StructType *StructTy = cast<StructType>(type);
797  const StructLayout *Layout = DL.getStructLayout(StructTy);
798  uint64_t StartPos = 0;
799  for (unsigned i = 0, E = StructTy->getNumElements(); i < E; ++i) {
800    Type *ElTy = StructTy->getElementType(i);
801    if (!isDenselyPacked(ElTy, DL))
802      return false;
803    if (StartPos != Layout->getElementOffsetInBits(i))
804      return false;
805    StartPos += DL.getTypeAllocSizeInBits(ElTy);
806  }
807
808  return true;
809}
810
811/// Checks if the padding bytes of an argument could be accessed.
812static bool canPaddingBeAccessed(Argument *arg) {
813  assert(arg->hasByValAttr());
814
815  // Track all the pointers to the argument to make sure they are not captured.
816  SmallPtrSet<Value *, 16> PtrValues;
817  PtrValues.insert(arg);
818
819  // Track all of the stores.
820  SmallVector<StoreInst *, 16> Stores;
821
822  // Scan through the uses recursively to make sure the pointer is always used
823  // sanely.
824  SmallVector<Value *, 16> WorkList;
825  WorkList.insert(WorkList.end(), arg->user_begin(), arg->user_end());
826  while (!WorkList.empty()) {
827    Value *V = WorkList.back();
828    WorkList.pop_back();
829    if (isa<GetElementPtrInst>(V) || isa<PHINode>(V)) {
830      if (PtrValues.insert(V).second)
831        WorkList.insert(WorkList.end(), V->user_begin(), V->user_end());
832    } else if (StoreInst *Store = dyn_cast<StoreInst>(V)) {
833      Stores.push_back(Store);
834    } else if (!isa<LoadInst>(V)) {
835      return true;
836    }
837  }
838
839  // Check to make sure the pointers aren't captured
840  for (StoreInst *Store : Stores)
841    if (PtrValues.count(Store->getValueOperand()))
842      return true;
843
844  return false;
845}
846
847static bool areFunctionArgsABICompatible(
848    const Function &F, const TargetTransformInfo &TTI,
849    SmallPtrSetImpl<Argument *> &ArgsToPromote,
850    SmallPtrSetImpl<Argument *> &ByValArgsToTransform) {
851  for (const Use &U : F.uses()) {
852    CallSite CS(U.getUser());
853    const Function *Caller = CS.getCaller();
854    const Function *Callee = CS.getCalledFunction();
855    if (!TTI.areFunctionArgsABICompatible(Caller, Callee, ArgsToPromote) ||
856        !TTI.areFunctionArgsABICompatible(Caller, Callee, ByValArgsToTransform))
857      return false;
858  }
859  return true;
860}
861
862/// PromoteArguments - This method checks the specified function to see if there
863/// are any promotable arguments and if it is safe to promote the function (for
864/// example, all callers are direct).  If safe to promote some arguments, it
865/// calls the DoPromotion method.
866static Function *
867promoteArguments(Function *F, function_ref<AAResults &(Function &F)> AARGetter,
868                 unsigned MaxElements,
869                 Optional<function_ref<void(CallSite OldCS, CallSite NewCS)>>
870                     ReplaceCallSite,
871                 const TargetTransformInfo &TTI) {
872  // Don't perform argument promotion for naked functions; otherwise we can end
873  // up removing parameters that are seemingly 'not used' as they are referred
874  // to in the assembly.
875  if(F->hasFnAttribute(Attribute::Naked))
876    return nullptr;
877
878  // Make sure that it is local to this module.
879  if (!F->hasLocalLinkage())
880    return nullptr;
881
882  // Don't promote arguments for variadic functions. Adding, removing, or
883  // changing non-pack parameters can change the classification of pack
884  // parameters. Frontends encode that classification at the call site in the
885  // IR, while in the callee the classification is determined dynamically based
886  // on the number of registers consumed so far.
887  if (F->isVarArg())
888    return nullptr;
889
890  // Don't transform functions that receive inallocas, as the transformation may
891  // not be safe depending on calling convention.
892  if (F->getAttributes().hasAttrSomewhere(Attribute::InAlloca))
893    return nullptr;
894
895  // First check: see if there are any pointer arguments!  If not, quick exit.
896  SmallVector<Argument *, 16> PointerArgs;
897  for (Argument &I : F->args())
898    if (I.getType()->isPointerTy())
899      PointerArgs.push_back(&I);
900  if (PointerArgs.empty())
901    return nullptr;
902
903  // Second check: make sure that all callers are direct callers.  We can't
904  // transform functions that have indirect callers.  Also see if the function
905  // is self-recursive and check that target features are compatible.
906  bool isSelfRecursive = false;
907  for (Use &U : F->uses()) {
908    CallSite CS(U.getUser());
909    // Must be a direct call.
910    if (CS.getInstruction() == nullptr || !CS.isCallee(&U))
911      return nullptr;
912
913    // Can't change signature of musttail callee
914    if (CS.isMustTailCall())
915      return nullptr;
916
917    if (CS.getInstruction()->getParent()->getParent() == F)
918      isSelfRecursive = true;
919  }
920
921  // Can't change signature of musttail caller
922  // FIXME: Support promoting whole chain of musttail functions
923  for (BasicBlock &BB : *F)
924    if (BB.getTerminatingMustTailCall())
925      return nullptr;
926
927  const DataLayout &DL = F->getParent()->getDataLayout();
928
929  AAResults &AAR = AARGetter(*F);
930
931  // Check to see which arguments are promotable.  If an argument is promotable,
932  // add it to ArgsToPromote.
933  SmallPtrSet<Argument *, 8> ArgsToPromote;
934  SmallPtrSet<Argument *, 8> ByValArgsToTransform;
935  for (Argument *PtrArg : PointerArgs) {
936    Type *AgTy = cast<PointerType>(PtrArg->getType())->getElementType();
937
938    // Replace sret attribute with noalias. This reduces register pressure by
939    // avoiding a register copy.
940    if (PtrArg->hasStructRetAttr()) {
941      unsigned ArgNo = PtrArg->getArgNo();
942      F->removeParamAttr(ArgNo, Attribute::StructRet);
943      F->addParamAttr(ArgNo, Attribute::NoAlias);
944      for (Use &U : F->uses()) {
945        CallSite CS(U.getUser());
946        CS.removeParamAttr(ArgNo, Attribute::StructRet);
947        CS.addParamAttr(ArgNo, Attribute::NoAlias);
948      }
949    }
950
951    // If this is a byval argument, and if the aggregate type is small, just
952    // pass the elements, which is always safe, if the passed value is densely
953    // packed or if we can prove the padding bytes are never accessed.
954    bool isSafeToPromote =
955        PtrArg->hasByValAttr() &&
956        (isDenselyPacked(AgTy, DL) || !canPaddingBeAccessed(PtrArg));
957    if (isSafeToPromote) {
958      if (StructType *STy = dyn_cast<StructType>(AgTy)) {
959        if (MaxElements > 0 && STy->getNumElements() > MaxElements) {
960          LLVM_DEBUG(dbgs() << "argpromotion disable promoting argument '"
961                            << PtrArg->getName()
962                            << "' because it would require adding more"
963                            << " than " << MaxElements
964                            << " arguments to the function.\n");
965          continue;
966        }
967
968        // If all the elements are single-value types, we can promote it.
969        bool AllSimple = true;
970        for (const auto *EltTy : STy->elements()) {
971          if (!EltTy->isSingleValueType()) {
972            AllSimple = false;
973            break;
974          }
975        }
976
977        // Safe to transform, don't even bother trying to "promote" it.
978        // Passing the elements as a scalar will allow sroa to hack on
979        // the new alloca we introduce.
980        if (AllSimple) {
981          ByValArgsToTransform.insert(PtrArg);
982          continue;
983        }
984      }
985    }
986
987    // If the argument is a recursive type and we're in a recursive
988    // function, we could end up infinitely peeling the function argument.
989    if (isSelfRecursive) {
990      if (StructType *STy = dyn_cast<StructType>(AgTy)) {
991        bool RecursiveType = false;
992        for (const auto *EltTy : STy->elements()) {
993          if (EltTy == PtrArg->getType()) {
994            RecursiveType = true;
995            break;
996          }
997        }
998        if (RecursiveType)
999          continue;
1000      }
1001    }
1002
1003    // Otherwise, see if we can promote the pointer to its value.
1004    Type *ByValTy =
1005        PtrArg->hasByValAttr() ? PtrArg->getParamByValType() : nullptr;
1006    if (isSafeToPromoteArgument(PtrArg, ByValTy, AAR, MaxElements))
1007      ArgsToPromote.insert(PtrArg);
1008  }
1009
1010  // No promotable pointer arguments.
1011  if (ArgsToPromote.empty() && ByValArgsToTransform.empty())
1012    return nullptr;
1013
1014  if (!areFunctionArgsABICompatible(*F, TTI, ArgsToPromote,
1015                                    ByValArgsToTransform))
1016    return nullptr;
1017
1018  return doPromotion(F, ArgsToPromote, ByValArgsToTransform, ReplaceCallSite);
1019}
1020
1021PreservedAnalyses ArgumentPromotionPass::run(LazyCallGraph::SCC &C,
1022                                             CGSCCAnalysisManager &AM,
1023                                             LazyCallGraph &CG,
1024                                             CGSCCUpdateResult &UR) {
1025  bool Changed = false, LocalChange;
1026
1027  // Iterate until we stop promoting from this SCC.
1028  do {
1029    LocalChange = false;
1030
1031    for (LazyCallGraph::Node &N : C) {
1032      Function &OldF = N.getFunction();
1033
1034      FunctionAnalysisManager &FAM =
1035          AM.getResult<FunctionAnalysisManagerCGSCCProxy>(C, CG).getManager();
1036      // FIXME: This lambda must only be used with this function. We should
1037      // skip the lambda and just get the AA results directly.
1038      auto AARGetter = [&](Function &F) -> AAResults & {
1039        assert(&F == &OldF && "Called with an unexpected function!");
1040        return FAM.getResult<AAManager>(F);
1041      };
1042
1043      const TargetTransformInfo &TTI = FAM.getResult<TargetIRAnalysis>(OldF);
1044      Function *NewF =
1045          promoteArguments(&OldF, AARGetter, MaxElements, None, TTI);
1046      if (!NewF)
1047        continue;
1048      LocalChange = true;
1049
1050      // Directly substitute the functions in the call graph. Note that this
1051      // requires the old function to be completely dead and completely
1052      // replaced by the new function. It does no call graph updates, it merely
1053      // swaps out the particular function mapped to a particular node in the
1054      // graph.
1055      C.getOuterRefSCC().replaceNodeFunction(N, *NewF);
1056      OldF.eraseFromParent();
1057    }
1058
1059    Changed |= LocalChange;
1060  } while (LocalChange);
1061
1062  if (!Changed)
1063    return PreservedAnalyses::all();
1064
1065  return PreservedAnalyses::none();
1066}
1067
1068namespace {
1069
1070/// ArgPromotion - The 'by reference' to 'by value' argument promotion pass.
1071struct ArgPromotion : public CallGraphSCCPass {
1072  // Pass identification, replacement for typeid
1073  static char ID;
1074
1075  explicit ArgPromotion(unsigned MaxElements = 3)
1076      : CallGraphSCCPass(ID), MaxElements(MaxElements) {
1077    initializeArgPromotionPass(*PassRegistry::getPassRegistry());
1078  }
1079
1080  void getAnalysisUsage(AnalysisUsage &AU) const override {
1081    AU.addRequired<AssumptionCacheTracker>();
1082    AU.addRequired<TargetLibraryInfoWrapperPass>();
1083    AU.addRequired<TargetTransformInfoWrapperPass>();
1084    getAAResultsAnalysisUsage(AU);
1085    CallGraphSCCPass::getAnalysisUsage(AU);
1086  }
1087
1088  bool runOnSCC(CallGraphSCC &SCC) override;
1089
1090private:
1091  using llvm::Pass::doInitialization;
1092
1093  bool doInitialization(CallGraph &CG) override;
1094
1095  /// The maximum number of elements to expand, or 0 for unlimited.
1096  unsigned MaxElements;
1097};
1098
1099} // end anonymous namespace
1100
1101char ArgPromotion::ID = 0;
1102
1103INITIALIZE_PASS_BEGIN(ArgPromotion, "argpromotion",
1104                      "Promote 'by reference' arguments to scalars", false,
1105                      false)
1106INITIALIZE_PASS_DEPENDENCY(AssumptionCacheTracker)
1107INITIALIZE_PASS_DEPENDENCY(CallGraphWrapperPass)
1108INITIALIZE_PASS_DEPENDENCY(TargetLibraryInfoWrapperPass)
1109INITIALIZE_PASS_DEPENDENCY(TargetTransformInfoWrapperPass)
1110INITIALIZE_PASS_END(ArgPromotion, "argpromotion",
1111                    "Promote 'by reference' arguments to scalars", false, false)
1112
1113Pass *llvm::createArgumentPromotionPass(unsigned MaxElements) {
1114  return new ArgPromotion(MaxElements);
1115}
1116
1117bool ArgPromotion::runOnSCC(CallGraphSCC &SCC) {
1118  if (skipSCC(SCC))
1119    return false;
1120
1121  // Get the callgraph information that we need to update to reflect our
1122  // changes.
1123  CallGraph &CG = getAnalysis<CallGraphWrapperPass>().getCallGraph();
1124
1125  LegacyAARGetter AARGetter(*this);
1126
1127  bool Changed = false, LocalChange;
1128
1129  // Iterate until we stop promoting from this SCC.
1130  do {
1131    LocalChange = false;
1132    // Attempt to promote arguments from all functions in this SCC.
1133    for (CallGraphNode *OldNode : SCC) {
1134      Function *OldF = OldNode->getFunction();
1135      if (!OldF)
1136        continue;
1137
1138      auto ReplaceCallSite = [&](CallSite OldCS, CallSite NewCS) {
1139        Function *Caller = OldCS.getInstruction()->getParent()->getParent();
1140        CallGraphNode *NewCalleeNode =
1141            CG.getOrInsertFunction(NewCS.getCalledFunction());
1142        CallGraphNode *CallerNode = CG[Caller];
1143        CallerNode->replaceCallEdge(*cast<CallBase>(OldCS.getInstruction()),
1144                                    *cast<CallBase>(NewCS.getInstruction()),
1145                                    NewCalleeNode);
1146      };
1147
1148      const TargetTransformInfo &TTI =
1149          getAnalysis<TargetTransformInfoWrapperPass>().getTTI(*OldF);
1150      if (Function *NewF = promoteArguments(OldF, AARGetter, MaxElements,
1151                                            {ReplaceCallSite}, TTI)) {
1152        LocalChange = true;
1153
1154        // Update the call graph for the newly promoted function.
1155        CallGraphNode *NewNode = CG.getOrInsertFunction(NewF);
1156        NewNode->stealCalledFunctionsFrom(OldNode);
1157        if (OldNode->getNumReferences() == 0)
1158          delete CG.removeFunctionFromModule(OldNode);
1159        else
1160          OldF->setLinkage(Function::ExternalLinkage);
1161
1162        // And updat ethe SCC we're iterating as well.
1163        SCC.ReplaceNode(OldNode, NewNode);
1164      }
1165    }
1166    // Remember that we changed something.
1167    Changed |= LocalChange;
1168  } while (LocalChange);
1169
1170  return Changed;
1171}
1172
1173bool ArgPromotion::doInitialization(CallGraph &CG) {
1174  return CallGraphSCCPass::doInitialization(CG);
1175}
1176