1//===- CloneFunction.cpp - Clone a function into another function ---------===//
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 CloneFunctionInto interface, which is used as the
11// low-level function cloner.  This is used by the CloneFunction and function
12// inliner to do the dirty work of copying the body of a function around.
13//
14//===----------------------------------------------------------------------===//
15
16#include "llvm/Transforms/Utils/Cloning.h"
17#include "llvm/ADT/SmallVector.h"
18#include "llvm/Analysis/ConstantFolding.h"
19#include "llvm/Analysis/InstructionSimplify.h"
20#include "llvm/IR/CFG.h"
21#include "llvm/IR/Constants.h"
22#include "llvm/IR/DebugInfo.h"
23#include "llvm/IR/DerivedTypes.h"
24#include "llvm/IR/Function.h"
25#include "llvm/IR/GlobalVariable.h"
26#include "llvm/IR/Instructions.h"
27#include "llvm/IR/IntrinsicInst.h"
28#include "llvm/IR/LLVMContext.h"
29#include "llvm/IR/Metadata.h"
30#include "llvm/IR/Module.h"
31#include "llvm/Transforms/Utils/BasicBlockUtils.h"
32#include "llvm/Transforms/Utils/Local.h"
33#include "llvm/Transforms/Utils/ValueMapper.h"
34#include <map>
35using namespace llvm;
36
37/// See comments in Cloning.h.
38BasicBlock *llvm::CloneBasicBlock(const BasicBlock *BB,
39                                  ValueToValueMapTy &VMap,
40                                  const Twine &NameSuffix, Function *F,
41                                  ClonedCodeInfo *CodeInfo) {
42  BasicBlock *NewBB = BasicBlock::Create(BB->getContext(), "", F);
43  if (BB->hasName()) NewBB->setName(BB->getName()+NameSuffix);
44
45  bool hasCalls = false, hasDynamicAllocas = false, hasStaticAllocas = false;
46
47  // Loop over all instructions, and copy them over.
48  for (BasicBlock::const_iterator II = BB->begin(), IE = BB->end();
49       II != IE; ++II) {
50    Instruction *NewInst = II->clone();
51    if (II->hasName())
52      NewInst->setName(II->getName()+NameSuffix);
53    NewBB->getInstList().push_back(NewInst);
54    VMap[II] = NewInst;                // Add instruction map to value.
55
56    hasCalls |= (isa<CallInst>(II) && !isa<DbgInfoIntrinsic>(II));
57    if (const AllocaInst *AI = dyn_cast<AllocaInst>(II)) {
58      if (isa<ConstantInt>(AI->getArraySize()))
59        hasStaticAllocas = true;
60      else
61        hasDynamicAllocas = true;
62    }
63  }
64
65  if (CodeInfo) {
66    CodeInfo->ContainsCalls          |= hasCalls;
67    CodeInfo->ContainsDynamicAllocas |= hasDynamicAllocas;
68    CodeInfo->ContainsDynamicAllocas |= hasStaticAllocas &&
69                                        BB != &BB->getParent()->getEntryBlock();
70  }
71  return NewBB;
72}
73
74// Clone OldFunc into NewFunc, transforming the old arguments into references to
75// VMap values.
76//
77void llvm::CloneFunctionInto(Function *NewFunc, const Function *OldFunc,
78                             ValueToValueMapTy &VMap,
79                             bool ModuleLevelChanges,
80                             SmallVectorImpl<ReturnInst*> &Returns,
81                             const char *NameSuffix, ClonedCodeInfo *CodeInfo,
82                             ValueMapTypeRemapper *TypeMapper,
83                             ValueMaterializer *Materializer) {
84  assert(NameSuffix && "NameSuffix cannot be null!");
85
86#ifndef NDEBUG
87  for (Function::const_arg_iterator I = OldFunc->arg_begin(),
88       E = OldFunc->arg_end(); I != E; ++I)
89    assert(VMap.count(I) && "No mapping from source argument specified!");
90#endif
91
92  // Copy all attributes other than those stored in the AttributeSet.  We need
93  // to remap the parameter indices of the AttributeSet.
94  AttributeSet NewAttrs = NewFunc->getAttributes();
95  NewFunc->copyAttributesFrom(OldFunc);
96  NewFunc->setAttributes(NewAttrs);
97
98  AttributeSet OldAttrs = OldFunc->getAttributes();
99  // Clone any argument attributes that are present in the VMap.
100  for (const Argument &OldArg : OldFunc->args())
101    if (Argument *NewArg = dyn_cast<Argument>(VMap[&OldArg])) {
102      AttributeSet attrs =
103          OldAttrs.getParamAttributes(OldArg.getArgNo() + 1);
104      if (attrs.getNumSlots() > 0)
105        NewArg->addAttr(attrs);
106    }
107
108  NewFunc->setAttributes(
109      NewFunc->getAttributes()
110          .addAttributes(NewFunc->getContext(), AttributeSet::ReturnIndex,
111                         OldAttrs.getRetAttributes())
112          .addAttributes(NewFunc->getContext(), AttributeSet::FunctionIndex,
113                         OldAttrs.getFnAttributes()));
114
115  // Loop over all of the basic blocks in the function, cloning them as
116  // appropriate.  Note that we save BE this way in order to handle cloning of
117  // recursive functions into themselves.
118  //
119  for (Function::const_iterator BI = OldFunc->begin(), BE = OldFunc->end();
120       BI != BE; ++BI) {
121    const BasicBlock &BB = *BI;
122
123    // Create a new basic block and copy instructions into it!
124    BasicBlock *CBB = CloneBasicBlock(&BB, VMap, NameSuffix, NewFunc, CodeInfo);
125
126    // Add basic block mapping.
127    VMap[&BB] = CBB;
128
129    // It is only legal to clone a function if a block address within that
130    // function is never referenced outside of the function.  Given that, we
131    // want to map block addresses from the old function to block addresses in
132    // the clone. (This is different from the generic ValueMapper
133    // implementation, which generates an invalid blockaddress when
134    // cloning a function.)
135    if (BB.hasAddressTaken()) {
136      Constant *OldBBAddr = BlockAddress::get(const_cast<Function*>(OldFunc),
137                                              const_cast<BasicBlock*>(&BB));
138      VMap[OldBBAddr] = BlockAddress::get(NewFunc, CBB);
139    }
140
141    // Note return instructions for the caller.
142    if (ReturnInst *RI = dyn_cast<ReturnInst>(CBB->getTerminator()))
143      Returns.push_back(RI);
144  }
145
146  // Loop over all of the instructions in the function, fixing up operand
147  // references as we go.  This uses VMap to do all the hard work.
148  for (Function::iterator BB = cast<BasicBlock>(VMap[OldFunc->begin()]),
149         BE = NewFunc->end(); BB != BE; ++BB)
150    // Loop over all instructions, fixing each one as we find it...
151    for (BasicBlock::iterator II = BB->begin(); II != BB->end(); ++II)
152      RemapInstruction(II, VMap,
153                       ModuleLevelChanges ? RF_None : RF_NoModuleLevelChanges,
154                       TypeMapper, Materializer);
155}
156
157// Find the MDNode which corresponds to the DISubprogram data that described F.
158static MDNode* FindSubprogram(const Function *F, DebugInfoFinder &Finder) {
159  for (DISubprogram Subprogram : Finder.subprograms()) {
160    if (Subprogram->describes(F))
161      return Subprogram;
162  }
163  return nullptr;
164}
165
166// Add an operand to an existing MDNode. The new operand will be added at the
167// back of the operand list.
168static void AddOperand(DICompileUnit CU, MDSubprogramArray SPs, Metadata *NewSP) {
169  SmallVector<Metadata *, 16> NewSPs;
170  NewSPs.reserve(SPs.size() + 1);
171  for (auto *SP : SPs)
172    NewSPs.push_back(SP);
173  NewSPs.push_back(NewSP);
174  CU->replaceSubprograms(MDTuple::get(CU->getContext(), NewSPs));
175}
176
177// Clone the module-level debug info associated with OldFunc. The cloned data
178// will point to NewFunc instead.
179static void CloneDebugInfoMetadata(Function *NewFunc, const Function *OldFunc,
180                            ValueToValueMapTy &VMap) {
181  DebugInfoFinder Finder;
182  Finder.processModule(*OldFunc->getParent());
183
184  const MDNode *OldSubprogramMDNode = FindSubprogram(OldFunc, Finder);
185  if (!OldSubprogramMDNode) return;
186
187  // Ensure that OldFunc appears in the map.
188  // (if it's already there it must point to NewFunc anyway)
189  VMap[OldFunc] = NewFunc;
190  DISubprogram NewSubprogram =
191      cast<MDSubprogram>(MapMetadata(OldSubprogramMDNode, VMap));
192
193  for (DICompileUnit CU : Finder.compile_units()) {
194    auto Subprograms = CU->getSubprograms();
195    // If the compile unit's function list contains the old function, it should
196    // also contain the new one.
197    for (auto *SP : Subprograms) {
198      if (SP == OldSubprogramMDNode) {
199        AddOperand(CU, Subprograms, NewSubprogram);
200        break;
201      }
202    }
203  }
204}
205
206/// Return a copy of the specified function, but without
207/// embedding the function into another module.  Also, any references specified
208/// in the VMap are changed to refer to their mapped value instead of the
209/// original one.  If any of the arguments to the function are in the VMap,
210/// the arguments are deleted from the resultant function.  The VMap is
211/// updated to include mappings from all of the instructions and basicblocks in
212/// the function from their old to new values.
213///
214Function *llvm::CloneFunction(const Function *F, ValueToValueMapTy &VMap,
215                              bool ModuleLevelChanges,
216                              ClonedCodeInfo *CodeInfo) {
217  std::vector<Type*> ArgTypes;
218
219  // The user might be deleting arguments to the function by specifying them in
220  // the VMap.  If so, we need to not add the arguments to the arg ty vector
221  //
222  for (Function::const_arg_iterator I = F->arg_begin(), E = F->arg_end();
223       I != E; ++I)
224    if (VMap.count(I) == 0)  // Haven't mapped the argument to anything yet?
225      ArgTypes.push_back(I->getType());
226
227  // Create a new function type...
228  FunctionType *FTy = FunctionType::get(F->getFunctionType()->getReturnType(),
229                                    ArgTypes, F->getFunctionType()->isVarArg());
230
231  // Create the new function...
232  Function *NewF = Function::Create(FTy, F->getLinkage(), F->getName());
233
234  // Loop over the arguments, copying the names of the mapped arguments over...
235  Function::arg_iterator DestI = NewF->arg_begin();
236  for (Function::const_arg_iterator I = F->arg_begin(), E = F->arg_end();
237       I != E; ++I)
238    if (VMap.count(I) == 0) {   // Is this argument preserved?
239      DestI->setName(I->getName()); // Copy the name over...
240      VMap[I] = DestI++;        // Add mapping to VMap
241    }
242
243  if (ModuleLevelChanges)
244    CloneDebugInfoMetadata(NewF, F, VMap);
245
246  SmallVector<ReturnInst*, 8> Returns;  // Ignore returns cloned.
247  CloneFunctionInto(NewF, F, VMap, ModuleLevelChanges, Returns, "", CodeInfo);
248  return NewF;
249}
250
251
252
253namespace {
254  /// This is a private class used to implement CloneAndPruneFunctionInto.
255  struct PruningFunctionCloner {
256    Function *NewFunc;
257    const Function *OldFunc;
258    ValueToValueMapTy &VMap;
259    bool ModuleLevelChanges;
260    const char *NameSuffix;
261    ClonedCodeInfo *CodeInfo;
262    CloningDirector *Director;
263    ValueMapTypeRemapper *TypeMapper;
264    ValueMaterializer *Materializer;
265
266  public:
267    PruningFunctionCloner(Function *newFunc, const Function *oldFunc,
268                          ValueToValueMapTy &valueMap, bool moduleLevelChanges,
269                          const char *nameSuffix, ClonedCodeInfo *codeInfo,
270                          CloningDirector *Director)
271        : NewFunc(newFunc), OldFunc(oldFunc), VMap(valueMap),
272          ModuleLevelChanges(moduleLevelChanges), NameSuffix(nameSuffix),
273          CodeInfo(codeInfo), Director(Director) {
274      // These are optional components.  The Director may return null.
275      if (Director) {
276        TypeMapper = Director->getTypeRemapper();
277        Materializer = Director->getValueMaterializer();
278      } else {
279        TypeMapper = nullptr;
280        Materializer = nullptr;
281      }
282    }
283
284    /// The specified block is found to be reachable, clone it and
285    /// anything that it can reach.
286    void CloneBlock(const BasicBlock *BB,
287                    BasicBlock::const_iterator StartingInst,
288                    std::vector<const BasicBlock*> &ToClone);
289  };
290}
291
292/// The specified block is found to be reachable, clone it and
293/// anything that it can reach.
294void PruningFunctionCloner::CloneBlock(const BasicBlock *BB,
295                                       BasicBlock::const_iterator StartingInst,
296                                       std::vector<const BasicBlock*> &ToClone){
297  WeakVH &BBEntry = VMap[BB];
298
299  // Have we already cloned this block?
300  if (BBEntry) return;
301
302  // Nope, clone it now.
303  BasicBlock *NewBB;
304  BBEntry = NewBB = BasicBlock::Create(BB->getContext());
305  if (BB->hasName()) NewBB->setName(BB->getName()+NameSuffix);
306
307  // It is only legal to clone a function if a block address within that
308  // function is never referenced outside of the function.  Given that, we
309  // want to map block addresses from the old function to block addresses in
310  // the clone. (This is different from the generic ValueMapper
311  // implementation, which generates an invalid blockaddress when
312  // cloning a function.)
313  //
314  // Note that we don't need to fix the mapping for unreachable blocks;
315  // the default mapping there is safe.
316  if (BB->hasAddressTaken()) {
317    Constant *OldBBAddr = BlockAddress::get(const_cast<Function*>(OldFunc),
318                                            const_cast<BasicBlock*>(BB));
319    VMap[OldBBAddr] = BlockAddress::get(NewFunc, NewBB);
320  }
321
322  bool hasCalls = false, hasDynamicAllocas = false, hasStaticAllocas = false;
323
324  // Loop over all instructions, and copy them over, DCE'ing as we go.  This
325  // loop doesn't include the terminator.
326  for (BasicBlock::const_iterator II = StartingInst, IE = --BB->end();
327       II != IE; ++II) {
328    // If the "Director" remaps the instruction, don't clone it.
329    if (Director) {
330      CloningDirector::CloningAction Action
331                              = Director->handleInstruction(VMap, II, NewBB);
332      // If the cloning director says stop, we want to stop everything, not
333      // just break out of the loop (which would cause the terminator to be
334      // cloned).  The cloning director is responsible for inserting a proper
335      // terminator into the new basic block in this case.
336      if (Action == CloningDirector::StopCloningBB)
337        return;
338      // If the cloning director says skip, continue to the next instruction.
339      // In this case, the cloning director is responsible for mapping the
340      // skipped instruction to some value that is defined in the new
341      // basic block.
342      if (Action == CloningDirector::SkipInstruction)
343        continue;
344    }
345
346    Instruction *NewInst = II->clone();
347
348    // Eagerly remap operands to the newly cloned instruction, except for PHI
349    // nodes for which we defer processing until we update the CFG.
350    if (!isa<PHINode>(NewInst)) {
351      RemapInstruction(NewInst, VMap,
352                       ModuleLevelChanges ? RF_None : RF_NoModuleLevelChanges,
353                       TypeMapper, Materializer);
354
355      // If we can simplify this instruction to some other value, simply add
356      // a mapping to that value rather than inserting a new instruction into
357      // the basic block.
358      if (Value *V =
359              SimplifyInstruction(NewInst, BB->getModule()->getDataLayout())) {
360        // On the off-chance that this simplifies to an instruction in the old
361        // function, map it back into the new function.
362        if (Value *MappedV = VMap.lookup(V))
363          V = MappedV;
364
365        VMap[II] = V;
366        delete NewInst;
367        continue;
368      }
369    }
370
371    if (II->hasName())
372      NewInst->setName(II->getName()+NameSuffix);
373    VMap[II] = NewInst;                // Add instruction map to value.
374    NewBB->getInstList().push_back(NewInst);
375    hasCalls |= (isa<CallInst>(II) && !isa<DbgInfoIntrinsic>(II));
376    if (const AllocaInst *AI = dyn_cast<AllocaInst>(II)) {
377      if (isa<ConstantInt>(AI->getArraySize()))
378        hasStaticAllocas = true;
379      else
380        hasDynamicAllocas = true;
381    }
382  }
383
384  // Finally, clone over the terminator.
385  const TerminatorInst *OldTI = BB->getTerminator();
386  bool TerminatorDone = false;
387  if (Director) {
388    CloningDirector::CloningAction Action
389                           = Director->handleInstruction(VMap, OldTI, NewBB);
390    // If the cloning director says stop, we want to stop everything, not
391    // just break out of the loop (which would cause the terminator to be
392    // cloned).  The cloning director is responsible for inserting a proper
393    // terminator into the new basic block in this case.
394    if (Action == CloningDirector::StopCloningBB)
395      return;
396    if (Action == CloningDirector::CloneSuccessors) {
397      // If the director says to skip with a terminate instruction, we still
398      // need to clone this block's successors.
399      const TerminatorInst *TI = NewBB->getTerminator();
400      for (unsigned i = 0, e = TI->getNumSuccessors(); i != e; ++i)
401        ToClone.push_back(TI->getSuccessor(i));
402      return;
403    }
404    assert(Action != CloningDirector::SkipInstruction &&
405           "SkipInstruction is not valid for terminators.");
406  }
407  if (const BranchInst *BI = dyn_cast<BranchInst>(OldTI)) {
408    if (BI->isConditional()) {
409      // If the condition was a known constant in the callee...
410      ConstantInt *Cond = dyn_cast<ConstantInt>(BI->getCondition());
411      // Or is a known constant in the caller...
412      if (!Cond) {
413        Value *V = VMap[BI->getCondition()];
414        Cond = dyn_cast_or_null<ConstantInt>(V);
415      }
416
417      // Constant fold to uncond branch!
418      if (Cond) {
419        BasicBlock *Dest = BI->getSuccessor(!Cond->getZExtValue());
420        VMap[OldTI] = BranchInst::Create(Dest, NewBB);
421        ToClone.push_back(Dest);
422        TerminatorDone = true;
423      }
424    }
425  } else if (const SwitchInst *SI = dyn_cast<SwitchInst>(OldTI)) {
426    // If switching on a value known constant in the caller.
427    ConstantInt *Cond = dyn_cast<ConstantInt>(SI->getCondition());
428    if (!Cond) { // Or known constant after constant prop in the callee...
429      Value *V = VMap[SI->getCondition()];
430      Cond = dyn_cast_or_null<ConstantInt>(V);
431    }
432    if (Cond) {     // Constant fold to uncond branch!
433      SwitchInst::ConstCaseIt Case = SI->findCaseValue(Cond);
434      BasicBlock *Dest = const_cast<BasicBlock*>(Case.getCaseSuccessor());
435      VMap[OldTI] = BranchInst::Create(Dest, NewBB);
436      ToClone.push_back(Dest);
437      TerminatorDone = true;
438    }
439  }
440
441  if (!TerminatorDone) {
442    Instruction *NewInst = OldTI->clone();
443    if (OldTI->hasName())
444      NewInst->setName(OldTI->getName()+NameSuffix);
445    NewBB->getInstList().push_back(NewInst);
446    VMap[OldTI] = NewInst;             // Add instruction map to value.
447
448    // Recursively clone any reachable successor blocks.
449    const TerminatorInst *TI = BB->getTerminator();
450    for (unsigned i = 0, e = TI->getNumSuccessors(); i != e; ++i)
451      ToClone.push_back(TI->getSuccessor(i));
452  }
453
454  if (CodeInfo) {
455    CodeInfo->ContainsCalls          |= hasCalls;
456    CodeInfo->ContainsDynamicAllocas |= hasDynamicAllocas;
457    CodeInfo->ContainsDynamicAllocas |= hasStaticAllocas &&
458      BB != &BB->getParent()->front();
459  }
460}
461
462/// This works like CloneAndPruneFunctionInto, except that it does not clone the
463/// entire function. Instead it starts at an instruction provided by the caller
464/// and copies (and prunes) only the code reachable from that instruction.
465void llvm::CloneAndPruneIntoFromInst(Function *NewFunc, const Function *OldFunc,
466                                     const Instruction *StartingInst,
467                                     ValueToValueMapTy &VMap,
468                                     bool ModuleLevelChanges,
469                                     SmallVectorImpl<ReturnInst *> &Returns,
470                                     const char *NameSuffix,
471                                     ClonedCodeInfo *CodeInfo,
472                                     CloningDirector *Director) {
473  assert(NameSuffix && "NameSuffix cannot be null!");
474
475  ValueMapTypeRemapper *TypeMapper = nullptr;
476  ValueMaterializer *Materializer = nullptr;
477
478  if (Director) {
479    TypeMapper = Director->getTypeRemapper();
480    Materializer = Director->getValueMaterializer();
481  }
482
483#ifndef NDEBUG
484  // If the cloning starts at the begining of the function, verify that
485  // the function arguments are mapped.
486  if (!StartingInst)
487    for (Function::const_arg_iterator II = OldFunc->arg_begin(),
488         E = OldFunc->arg_end(); II != E; ++II)
489      assert(VMap.count(II) && "No mapping from source argument specified!");
490#endif
491
492  PruningFunctionCloner PFC(NewFunc, OldFunc, VMap, ModuleLevelChanges,
493                            NameSuffix, CodeInfo, Director);
494  const BasicBlock *StartingBB;
495  if (StartingInst)
496    StartingBB = StartingInst->getParent();
497  else {
498    StartingBB = &OldFunc->getEntryBlock();
499    StartingInst = StartingBB->begin();
500  }
501
502  // Clone the entry block, and anything recursively reachable from it.
503  std::vector<const BasicBlock*> CloneWorklist;
504  PFC.CloneBlock(StartingBB, StartingInst, CloneWorklist);
505  while (!CloneWorklist.empty()) {
506    const BasicBlock *BB = CloneWorklist.back();
507    CloneWorklist.pop_back();
508    PFC.CloneBlock(BB, BB->begin(), CloneWorklist);
509  }
510
511  // Loop over all of the basic blocks in the old function.  If the block was
512  // reachable, we have cloned it and the old block is now in the value map:
513  // insert it into the new function in the right order.  If not, ignore it.
514  //
515  // Defer PHI resolution until rest of function is resolved.
516  SmallVector<const PHINode*, 16> PHIToResolve;
517  for (Function::const_iterator BI = OldFunc->begin(), BE = OldFunc->end();
518       BI != BE; ++BI) {
519    Value *V = VMap[BI];
520    BasicBlock *NewBB = cast_or_null<BasicBlock>(V);
521    if (!NewBB) continue;  // Dead block.
522
523    // Add the new block to the new function.
524    NewFunc->getBasicBlockList().push_back(NewBB);
525
526    // Handle PHI nodes specially, as we have to remove references to dead
527    // blocks.
528    for (BasicBlock::const_iterator I = BI->begin(), E = BI->end(); I != E; ++I) {
529      // PHI nodes may have been remapped to non-PHI nodes by the caller or
530      // during the cloning process.
531      if (const PHINode *PN = dyn_cast<PHINode>(I)) {
532        if (isa<PHINode>(VMap[PN]))
533          PHIToResolve.push_back(PN);
534        else
535          break;
536      } else {
537        break;
538      }
539    }
540
541    // Finally, remap the terminator instructions, as those can't be remapped
542    // until all BBs are mapped.
543    RemapInstruction(NewBB->getTerminator(), VMap,
544                     ModuleLevelChanges ? RF_None : RF_NoModuleLevelChanges,
545                     TypeMapper, Materializer);
546  }
547
548  // Defer PHI resolution until rest of function is resolved, PHI resolution
549  // requires the CFG to be up-to-date.
550  for (unsigned phino = 0, e = PHIToResolve.size(); phino != e; ) {
551    const PHINode *OPN = PHIToResolve[phino];
552    unsigned NumPreds = OPN->getNumIncomingValues();
553    const BasicBlock *OldBB = OPN->getParent();
554    BasicBlock *NewBB = cast<BasicBlock>(VMap[OldBB]);
555
556    // Map operands for blocks that are live and remove operands for blocks
557    // that are dead.
558    for (; phino != PHIToResolve.size() &&
559         PHIToResolve[phino]->getParent() == OldBB; ++phino) {
560      OPN = PHIToResolve[phino];
561      PHINode *PN = cast<PHINode>(VMap[OPN]);
562      for (unsigned pred = 0, e = NumPreds; pred != e; ++pred) {
563        Value *V = VMap[PN->getIncomingBlock(pred)];
564        if (BasicBlock *MappedBlock = cast_or_null<BasicBlock>(V)) {
565          Value *InVal = MapValue(PN->getIncomingValue(pred),
566                                  VMap,
567                        ModuleLevelChanges ? RF_None : RF_NoModuleLevelChanges);
568          assert(InVal && "Unknown input value?");
569          PN->setIncomingValue(pred, InVal);
570          PN->setIncomingBlock(pred, MappedBlock);
571        } else {
572          PN->removeIncomingValue(pred, false);
573          --pred, --e;  // Revisit the next entry.
574        }
575      }
576    }
577
578    // The loop above has removed PHI entries for those blocks that are dead
579    // and has updated others.  However, if a block is live (i.e. copied over)
580    // but its terminator has been changed to not go to this block, then our
581    // phi nodes will have invalid entries.  Update the PHI nodes in this
582    // case.
583    PHINode *PN = cast<PHINode>(NewBB->begin());
584    NumPreds = std::distance(pred_begin(NewBB), pred_end(NewBB));
585    if (NumPreds != PN->getNumIncomingValues()) {
586      assert(NumPreds < PN->getNumIncomingValues());
587      // Count how many times each predecessor comes to this block.
588      std::map<BasicBlock*, unsigned> PredCount;
589      for (pred_iterator PI = pred_begin(NewBB), E = pred_end(NewBB);
590           PI != E; ++PI)
591        --PredCount[*PI];
592
593      // Figure out how many entries to remove from each PHI.
594      for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i)
595        ++PredCount[PN->getIncomingBlock(i)];
596
597      // At this point, the excess predecessor entries are positive in the
598      // map.  Loop over all of the PHIs and remove excess predecessor
599      // entries.
600      BasicBlock::iterator I = NewBB->begin();
601      for (; (PN = dyn_cast<PHINode>(I)); ++I) {
602        for (std::map<BasicBlock*, unsigned>::iterator PCI =PredCount.begin(),
603             E = PredCount.end(); PCI != E; ++PCI) {
604          BasicBlock *Pred     = PCI->first;
605          for (unsigned NumToRemove = PCI->second; NumToRemove; --NumToRemove)
606            PN->removeIncomingValue(Pred, false);
607        }
608      }
609    }
610
611    // If the loops above have made these phi nodes have 0 or 1 operand,
612    // replace them with undef or the input value.  We must do this for
613    // correctness, because 0-operand phis are not valid.
614    PN = cast<PHINode>(NewBB->begin());
615    if (PN->getNumIncomingValues() == 0) {
616      BasicBlock::iterator I = NewBB->begin();
617      BasicBlock::const_iterator OldI = OldBB->begin();
618      while ((PN = dyn_cast<PHINode>(I++))) {
619        Value *NV = UndefValue::get(PN->getType());
620        PN->replaceAllUsesWith(NV);
621        assert(VMap[OldI] == PN && "VMap mismatch");
622        VMap[OldI] = NV;
623        PN->eraseFromParent();
624        ++OldI;
625      }
626    }
627  }
628
629  // Make a second pass over the PHINodes now that all of them have been
630  // remapped into the new function, simplifying the PHINode and performing any
631  // recursive simplifications exposed. This will transparently update the
632  // WeakVH in the VMap. Notably, we rely on that so that if we coalesce
633  // two PHINodes, the iteration over the old PHIs remains valid, and the
634  // mapping will just map us to the new node (which may not even be a PHI
635  // node).
636  for (unsigned Idx = 0, Size = PHIToResolve.size(); Idx != Size; ++Idx)
637    if (PHINode *PN = dyn_cast<PHINode>(VMap[PHIToResolve[Idx]]))
638      recursivelySimplifyInstruction(PN);
639
640  // Now that the inlined function body has been fully constructed, go through
641  // and zap unconditional fall-through branches. This happens all the time when
642  // specializing code: code specialization turns conditional branches into
643  // uncond branches, and this code folds them.
644  Function::iterator Begin = cast<BasicBlock>(VMap[StartingBB]);
645  Function::iterator I = Begin;
646  while (I != NewFunc->end()) {
647    // Check if this block has become dead during inlining or other
648    // simplifications. Note that the first block will appear dead, as it has
649    // not yet been wired up properly.
650    if (I != Begin && (pred_begin(I) == pred_end(I) ||
651                       I->getSinglePredecessor() == I)) {
652      BasicBlock *DeadBB = I++;
653      DeleteDeadBlock(DeadBB);
654      continue;
655    }
656
657    // We need to simplify conditional branches and switches with a constant
658    // operand. We try to prune these out when cloning, but if the
659    // simplification required looking through PHI nodes, those are only
660    // available after forming the full basic block. That may leave some here,
661    // and we still want to prune the dead code as early as possible.
662    ConstantFoldTerminator(I);
663
664    BranchInst *BI = dyn_cast<BranchInst>(I->getTerminator());
665    if (!BI || BI->isConditional()) { ++I; continue; }
666
667    BasicBlock *Dest = BI->getSuccessor(0);
668    if (!Dest->getSinglePredecessor()) {
669      ++I; continue;
670    }
671
672    // We shouldn't be able to get single-entry PHI nodes here, as instsimplify
673    // above should have zapped all of them..
674    assert(!isa<PHINode>(Dest->begin()));
675
676    // We know all single-entry PHI nodes in the inlined function have been
677    // removed, so we just need to splice the blocks.
678    BI->eraseFromParent();
679
680    // Make all PHI nodes that referred to Dest now refer to I as their source.
681    Dest->replaceAllUsesWith(I);
682
683    // Move all the instructions in the succ to the pred.
684    I->getInstList().splice(I->end(), Dest->getInstList());
685
686    // Remove the dest block.
687    Dest->eraseFromParent();
688
689    // Do not increment I, iteratively merge all things this block branches to.
690  }
691
692  // Make a final pass over the basic blocks from the old function to gather
693  // any return instructions which survived folding. We have to do this here
694  // because we can iteratively remove and merge returns above.
695  for (Function::iterator I = cast<BasicBlock>(VMap[StartingBB]),
696                          E = NewFunc->end();
697       I != E; ++I)
698    if (ReturnInst *RI = dyn_cast<ReturnInst>(I->getTerminator()))
699      Returns.push_back(RI);
700}
701
702
703/// This works exactly like CloneFunctionInto,
704/// except that it does some simple constant prop and DCE on the fly.  The
705/// effect of this is to copy significantly less code in cases where (for
706/// example) a function call with constant arguments is inlined, and those
707/// constant arguments cause a significant amount of code in the callee to be
708/// dead.  Since this doesn't produce an exact copy of the input, it can't be
709/// used for things like CloneFunction or CloneModule.
710void llvm::CloneAndPruneFunctionInto(Function *NewFunc, const Function *OldFunc,
711                                     ValueToValueMapTy &VMap,
712                                     bool ModuleLevelChanges,
713                                     SmallVectorImpl<ReturnInst*> &Returns,
714                                     const char *NameSuffix,
715                                     ClonedCodeInfo *CodeInfo,
716                                     Instruction *TheCall) {
717  CloneAndPruneIntoFromInst(NewFunc, OldFunc, OldFunc->front().begin(), VMap,
718                            ModuleLevelChanges, Returns, NameSuffix, CodeInfo,
719                            nullptr);
720}
721