Remove unused ivars and s/getOuterUnwindDest/getOuterResumeDest/g.
[oota-llvm.git] / lib / Transforms / Utils / InlineFunction.cpp
1 //===- InlineFunction.cpp - Code to perform function inlining -------------===//
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 inlining of a function into a call site, resolving
11 // parameters and the return value as appropriate.
12 //
13 //===----------------------------------------------------------------------===//
14
15 #include "llvm/Transforms/Utils/Cloning.h"
16 #include "llvm/Constants.h"
17 #include "llvm/DerivedTypes.h"
18 #include "llvm/Module.h"
19 #include "llvm/Instructions.h"
20 #include "llvm/IntrinsicInst.h"
21 #include "llvm/Intrinsics.h"
22 #include "llvm/Attributes.h"
23 #include "llvm/Analysis/CallGraph.h"
24 #include "llvm/Analysis/DebugInfo.h"
25 #include "llvm/Analysis/InstructionSimplify.h"
26 #include "llvm/Target/TargetData.h"
27 #include "llvm/Transforms/Utils/Local.h"
28 #include "llvm/ADT/SmallVector.h"
29 #include "llvm/ADT/StringExtras.h"
30 #include "llvm/Support/CallSite.h"
31 #include "llvm/Support/IRBuilder.h"
32 using namespace llvm;
33
34 bool llvm::InlineFunction(CallInst *CI, InlineFunctionInfo &IFI) {
35   return InlineFunction(CallSite(CI), IFI);
36 }
37 bool llvm::InlineFunction(InvokeInst *II, InlineFunctionInfo &IFI) {
38   return InlineFunction(CallSite(II), IFI);
39 }
40
41 namespace {
42   /// A class for recording information about inlining through an invoke.
43   class InvokeInliningInfo {
44     BasicBlock *OuterUnwindDest;
45
46     // FIXME: New EH - These will replace the analogous ones above.
47     BasicBlock *OuterResumeDest; //< Destination of the invoke's unwind.
48     BasicBlock *InnerResumeDest; //< Destination for the callee's resume.
49     LandingPadInst *CallerLPad;  //< LandingPadInst associated with the invoke.
50     PHINode *InnerEHValuesPHI;   //< PHI for EH values from landingpad insts.
51     SmallVector<Value*, 8> UnwindDestPHIValues;
52
53   public:
54     InvokeInliningInfo(InvokeInst *II)
55       : OuterUnwindDest(II->getUnwindDest()),
56         OuterResumeDest(II->getUnwindDest()), InnerResumeDest(0),
57         CallerLPad(0), InnerEHValuesPHI(0) {
58       // If there are PHI nodes in the unwind destination block, we need to keep
59       // track of which values came into them from the invoke before removing
60       // the edge from this block.
61       llvm::BasicBlock *InvokeBB = II->getParent();
62       BasicBlock::iterator I = OuterUnwindDest->begin();
63       for (; isa<PHINode>(I); ++I) {
64         // Save the value to use for this edge.
65         PHINode *PHI = cast<PHINode>(I);
66         UnwindDestPHIValues.push_back(PHI->getIncomingValueForBlock(InvokeBB));
67       }
68
69       CallerLPad = cast<LandingPadInst>(I);
70     }
71
72     /// The outer unwind destination is the target of unwind edges
73     /// introduced for calls within the inlined function.
74     BasicBlock *getOuterResumeDest() const {
75       return OuterUnwindDest;
76     }
77
78     BasicBlock *getInnerUnwindDest();
79
80     LandingPadInst *getLandingPadInst() const { return CallerLPad; }
81
82     /// forwardResume - Forward the 'resume' instruction to the caller's landing
83     /// pad block. When the landing pad block has only one predecessor, this is
84     /// a simple branch. When there is more than one predecessor, we need to
85     /// split the landing pad block after the landingpad instruction and jump
86     /// to there.
87     void forwardResume(ResumeInst *RI);
88
89     /// addIncomingPHIValuesFor - Add incoming-PHI values to the unwind
90     /// destination block for the given basic block, using the values for the
91     /// original invoke's source block.
92     void addIncomingPHIValuesFor(BasicBlock *BB) const {
93       addIncomingPHIValuesForInto(BB, OuterUnwindDest);
94     }
95
96     void addIncomingPHIValuesForInto(BasicBlock *src, BasicBlock *dest) const {
97       BasicBlock::iterator I = dest->begin();
98       for (unsigned i = 0, e = UnwindDestPHIValues.size(); i != e; ++i, ++I) {
99         PHINode *phi = cast<PHINode>(I);
100         phi->addIncoming(UnwindDestPHIValues[i], src);
101       }
102     }
103   };
104 }
105
106 /// getInnerUnwindDest - Get or create a target for the branch from ResumeInsts.
107 BasicBlock *InvokeInliningInfo::getInnerUnwindDest() {
108   if (InnerResumeDest) return InnerResumeDest;
109
110   // Split the landing pad.
111   BasicBlock::iterator SplitPoint = CallerLPad; ++SplitPoint;
112   InnerResumeDest =
113     OuterResumeDest->splitBasicBlock(SplitPoint,
114                                      OuterResumeDest->getName() + ".body");
115
116   // The number of incoming edges we expect to the inner landing pad.
117   const unsigned PHICapacity = 2;
118
119   // Create corresponding new PHIs for all the PHIs in the outer landing pad.
120   BasicBlock::iterator InsertPoint = InnerResumeDest->begin();
121   BasicBlock::iterator I = OuterResumeDest->begin();
122   for (unsigned i = 0, e = UnwindDestPHIValues.size(); i != e; ++i, ++I) {
123     PHINode *OuterPHI = cast<PHINode>(I);
124     PHINode *InnerPHI = PHINode::Create(OuterPHI->getType(), PHICapacity,
125                                         OuterPHI->getName() + ".lpad-body",
126                                         InsertPoint);
127     OuterPHI->replaceAllUsesWith(InnerPHI);
128     InnerPHI->addIncoming(OuterPHI, OuterResumeDest);
129   }
130
131   // Create a PHI for the exception values.
132   InnerEHValuesPHI = PHINode::Create(CallerLPad->getType(), PHICapacity,
133                                      "eh.lpad-body", InsertPoint);
134   CallerLPad->replaceAllUsesWith(InnerEHValuesPHI);
135   InnerEHValuesPHI->addIncoming(CallerLPad, OuterResumeDest);
136
137   // All done.
138   return InnerResumeDest;
139 }
140
141 /// forwardResume - Forward the 'resume' instruction to the caller's landing pad
142 /// block. When the landing pad block has only one predecessor, this is a simple
143 /// branch. When there is more than one predecessor, we need to split the
144 /// landing pad block after the landingpad instruction and jump to there.
145 void InvokeInliningInfo::forwardResume(ResumeInst *RI) {
146   BasicBlock *Dest = getInnerUnwindDest();
147   BasicBlock *Src = RI->getParent();
148
149   BranchInst::Create(Dest, Src);
150
151   // Update the PHIs in the destination. They were inserted in an order which
152   // makes this work.
153   addIncomingPHIValuesForInto(Src, Dest);
154
155   InnerEHValuesPHI->addIncoming(RI->getOperand(0), Src);
156   RI->eraseFromParent();
157 }
158
159 /// HandleCallsInBlockInlinedThroughInvoke - When we inline a basic block into
160 /// an invoke, we have to turn all of the calls that can throw into
161 /// invokes.  This function analyze BB to see if there are any calls, and if so,
162 /// it rewrites them to be invokes that jump to InvokeDest and fills in the PHI
163 /// nodes in that block with the values specified in InvokeDestPHIValues.
164 ///
165 /// Returns true to indicate that the next block should be skipped.
166 static bool HandleCallsInBlockInlinedThroughInvoke(BasicBlock *BB,
167                                                    InvokeInliningInfo &Invoke) {
168   LandingPadInst *LPI = Invoke.getLandingPadInst();
169
170   for (BasicBlock::iterator BBI = BB->begin(), E = BB->end(); BBI != E; ) {
171     Instruction *I = BBI++;
172
173     if (LandingPadInst *L = dyn_cast<LandingPadInst>(I)) {
174       unsigned NumClauses = LPI->getNumClauses();
175       L->reserveClauses(NumClauses);
176       for (unsigned i = 0; i != NumClauses; ++i)
177         L->addClause(LPI->getClause(i));
178     }
179
180     // We only need to check for function calls: inlined invoke
181     // instructions require no special handling.
182     CallInst *CI = dyn_cast<CallInst>(I);
183
184     // If this call cannot unwind, don't convert it to an invoke.
185     if (!CI || CI->doesNotThrow())
186       continue;
187
188     // Convert this function call into an invoke instruction.  First, split the
189     // basic block.
190     BasicBlock *Split = BB->splitBasicBlock(CI, CI->getName()+".noexc");
191
192     // Delete the unconditional branch inserted by splitBasicBlock
193     BB->getInstList().pop_back();
194
195     // Create the new invoke instruction.
196     ImmutableCallSite CS(CI);
197     SmallVector<Value*, 8> InvokeArgs(CS.arg_begin(), CS.arg_end());
198     InvokeInst *II = InvokeInst::Create(CI->getCalledValue(), Split,
199                                         Invoke.getOuterResumeDest(),
200                                         InvokeArgs, CI->getName(), BB);
201     II->setCallingConv(CI->getCallingConv());
202     II->setAttributes(CI->getAttributes());
203     
204     // Make sure that anything using the call now uses the invoke!  This also
205     // updates the CallGraph if present, because it uses a WeakVH.
206     CI->replaceAllUsesWith(II);
207
208     // Delete the original call
209     Split->getInstList().pop_front();
210
211     // Update any PHI nodes in the exceptional block to indicate that there is
212     // now a new entry in them.
213     Invoke.addIncomingPHIValuesFor(BB);
214     return false;
215   }
216
217   return false;
218 }
219
220 /// HandleInlinedInvoke - If we inlined an invoke site, we need to convert calls
221 /// in the body of the inlined function into invokes and turn unwind
222 /// instructions into branches to the invoke unwind dest.
223 ///
224 /// II is the invoke instruction being inlined.  FirstNewBlock is the first
225 /// block of the inlined code (the last block is the end of the function),
226 /// and InlineCodeInfo is information about the code that got inlined.
227 static void HandleInlinedInvoke(InvokeInst *II, BasicBlock *FirstNewBlock,
228                                 ClonedCodeInfo &InlinedCodeInfo) {
229   BasicBlock *InvokeDest = II->getUnwindDest();
230
231   Function *Caller = FirstNewBlock->getParent();
232
233   // The inlined code is currently at the end of the function, scan from the
234   // start of the inlined code to its end, checking for stuff we need to
235   // rewrite.  If the code doesn't have calls or unwinds, we know there is
236   // nothing to rewrite.
237   if (!InlinedCodeInfo.ContainsCalls && !InlinedCodeInfo.ContainsUnwinds) {
238     // Now that everything is happy, we have one final detail.  The PHI nodes in
239     // the exception destination block still have entries due to the original
240     // invoke instruction.  Eliminate these entries (which might even delete the
241     // PHI node) now.
242     InvokeDest->removePredecessor(II->getParent());
243     return;
244   }
245
246   InvokeInliningInfo Invoke(II);
247   
248   for (Function::iterator BB = FirstNewBlock, E = Caller->end(); BB != E; ++BB){
249     if (InlinedCodeInfo.ContainsCalls)
250       if (HandleCallsInBlockInlinedThroughInvoke(BB, Invoke)) {
251         // Honor a request to skip the next block.  We don't need to
252         // consider UnwindInsts in this case either.
253         ++BB;
254         continue;
255       }
256
257     if (UnwindInst *UI = dyn_cast<UnwindInst>(BB->getTerminator())) {
258       // An UnwindInst requires special handling when it gets inlined into an
259       // invoke site.  Once this happens, we know that the unwind would cause
260       // a control transfer to the invoke exception destination, so we can
261       // transform it into a direct branch to the exception destination.
262       BranchInst::Create(InvokeDest, UI);
263
264       // Delete the unwind instruction!
265       UI->eraseFromParent();
266
267       // Update any PHI nodes in the exceptional block to indicate that
268       // there is now a new entry in them.
269       Invoke.addIncomingPHIValuesFor(BB);
270     }
271
272     if (ResumeInst *RI = dyn_cast<ResumeInst>(BB->getTerminator()))
273       Invoke.forwardResume(RI);
274   }
275
276   // Now that everything is happy, we have one final detail.  The PHI nodes in
277   // the exception destination block still have entries due to the original
278   // invoke instruction.  Eliminate these entries (which might even delete the
279   // PHI node) now.
280   InvokeDest->removePredecessor(II->getParent());
281 }
282
283 /// UpdateCallGraphAfterInlining - Once we have cloned code over from a callee
284 /// into the caller, update the specified callgraph to reflect the changes we
285 /// made.  Note that it's possible that not all code was copied over, so only
286 /// some edges of the callgraph may remain.
287 static void UpdateCallGraphAfterInlining(CallSite CS,
288                                          Function::iterator FirstNewBlock,
289                                          ValueToValueMapTy &VMap,
290                                          InlineFunctionInfo &IFI) {
291   CallGraph &CG = *IFI.CG;
292   const Function *Caller = CS.getInstruction()->getParent()->getParent();
293   const Function *Callee = CS.getCalledFunction();
294   CallGraphNode *CalleeNode = CG[Callee];
295   CallGraphNode *CallerNode = CG[Caller];
296
297   // Since we inlined some uninlined call sites in the callee into the caller,
298   // add edges from the caller to all of the callees of the callee.
299   CallGraphNode::iterator I = CalleeNode->begin(), E = CalleeNode->end();
300
301   // Consider the case where CalleeNode == CallerNode.
302   CallGraphNode::CalledFunctionsVector CallCache;
303   if (CalleeNode == CallerNode) {
304     CallCache.assign(I, E);
305     I = CallCache.begin();
306     E = CallCache.end();
307   }
308
309   for (; I != E; ++I) {
310     const Value *OrigCall = I->first;
311
312     ValueToValueMapTy::iterator VMI = VMap.find(OrigCall);
313     // Only copy the edge if the call was inlined!
314     if (VMI == VMap.end() || VMI->second == 0)
315       continue;
316     
317     // If the call was inlined, but then constant folded, there is no edge to
318     // add.  Check for this case.
319     Instruction *NewCall = dyn_cast<Instruction>(VMI->second);
320     if (NewCall == 0) continue;
321
322     // Remember that this call site got inlined for the client of
323     // InlineFunction.
324     IFI.InlinedCalls.push_back(NewCall);
325
326     // It's possible that inlining the callsite will cause it to go from an
327     // indirect to a direct call by resolving a function pointer.  If this
328     // happens, set the callee of the new call site to a more precise
329     // destination.  This can also happen if the call graph node of the caller
330     // was just unnecessarily imprecise.
331     if (I->second->getFunction() == 0)
332       if (Function *F = CallSite(NewCall).getCalledFunction()) {
333         // Indirect call site resolved to direct call.
334         CallerNode->addCalledFunction(CallSite(NewCall), CG[F]);
335
336         continue;
337       }
338
339     CallerNode->addCalledFunction(CallSite(NewCall), I->second);
340   }
341   
342   // Update the call graph by deleting the edge from Callee to Caller.  We must
343   // do this after the loop above in case Caller and Callee are the same.
344   CallerNode->removeCallEdgeFor(CS);
345 }
346
347 /// HandleByValArgument - When inlining a call site that has a byval argument,
348 /// we have to make the implicit memcpy explicit by adding it.
349 static Value *HandleByValArgument(Value *Arg, Instruction *TheCall,
350                                   const Function *CalledFunc,
351                                   InlineFunctionInfo &IFI,
352                                   unsigned ByValAlignment) {
353   Type *AggTy = cast<PointerType>(Arg->getType())->getElementType();
354
355   // If the called function is readonly, then it could not mutate the caller's
356   // copy of the byval'd memory.  In this case, it is safe to elide the copy and
357   // temporary.
358   if (CalledFunc->onlyReadsMemory()) {
359     // If the byval argument has a specified alignment that is greater than the
360     // passed in pointer, then we either have to round up the input pointer or
361     // give up on this transformation.
362     if (ByValAlignment <= 1)  // 0 = unspecified, 1 = no particular alignment.
363       return Arg;
364
365     // If the pointer is already known to be sufficiently aligned, or if we can
366     // round it up to a larger alignment, then we don't need a temporary.
367     if (getOrEnforceKnownAlignment(Arg, ByValAlignment,
368                                    IFI.TD) >= ByValAlignment)
369       return Arg;
370     
371     // Otherwise, we have to make a memcpy to get a safe alignment.  This is bad
372     // for code quality, but rarely happens and is required for correctness.
373   }
374   
375   LLVMContext &Context = Arg->getContext();
376
377   Type *VoidPtrTy = Type::getInt8PtrTy(Context);
378   
379   // Create the alloca.  If we have TargetData, use nice alignment.
380   unsigned Align = 1;
381   if (IFI.TD)
382     Align = IFI.TD->getPrefTypeAlignment(AggTy);
383   
384   // If the byval had an alignment specified, we *must* use at least that
385   // alignment, as it is required by the byval argument (and uses of the
386   // pointer inside the callee).
387   Align = std::max(Align, ByValAlignment);
388   
389   Function *Caller = TheCall->getParent()->getParent(); 
390   
391   Value *NewAlloca = new AllocaInst(AggTy, 0, Align, Arg->getName(), 
392                                     &*Caller->begin()->begin());
393   // Emit a memcpy.
394   Type *Tys[3] = {VoidPtrTy, VoidPtrTy, Type::getInt64Ty(Context)};
395   Function *MemCpyFn = Intrinsic::getDeclaration(Caller->getParent(),
396                                                  Intrinsic::memcpy, 
397                                                  Tys);
398   Value *DestCast = new BitCastInst(NewAlloca, VoidPtrTy, "tmp", TheCall);
399   Value *SrcCast = new BitCastInst(Arg, VoidPtrTy, "tmp", TheCall);
400   
401   Value *Size;
402   if (IFI.TD == 0)
403     Size = ConstantExpr::getSizeOf(AggTy);
404   else
405     Size = ConstantInt::get(Type::getInt64Ty(Context),
406                             IFI.TD->getTypeStoreSize(AggTy));
407   
408   // Always generate a memcpy of alignment 1 here because we don't know
409   // the alignment of the src pointer.  Other optimizations can infer
410   // better alignment.
411   Value *CallArgs[] = {
412     DestCast, SrcCast, Size,
413     ConstantInt::get(Type::getInt32Ty(Context), 1),
414     ConstantInt::getFalse(Context) // isVolatile
415   };
416   IRBuilder<>(TheCall).CreateCall(MemCpyFn, CallArgs);
417   
418   // Uses of the argument in the function should use our new alloca
419   // instead.
420   return NewAlloca;
421 }
422
423 // isUsedByLifetimeMarker - Check whether this Value is used by a lifetime
424 // intrinsic.
425 static bool isUsedByLifetimeMarker(Value *V) {
426   for (Value::use_iterator UI = V->use_begin(), UE = V->use_end(); UI != UE;
427        ++UI) {
428     if (IntrinsicInst *II = dyn_cast<IntrinsicInst>(*UI)) {
429       switch (II->getIntrinsicID()) {
430       default: break;
431       case Intrinsic::lifetime_start:
432       case Intrinsic::lifetime_end:
433         return true;
434       }
435     }
436   }
437   return false;
438 }
439
440 // hasLifetimeMarkers - Check whether the given alloca already has
441 // lifetime.start or lifetime.end intrinsics.
442 static bool hasLifetimeMarkers(AllocaInst *AI) {
443   Type *Int8PtrTy = Type::getInt8PtrTy(AI->getType()->getContext());
444   if (AI->getType() == Int8PtrTy)
445     return isUsedByLifetimeMarker(AI);
446
447   // Do a scan to find all the casts to i8*.
448   for (Value::use_iterator I = AI->use_begin(), E = AI->use_end(); I != E;
449        ++I) {
450     if (I->getType() != Int8PtrTy) continue;
451     if (I->stripPointerCasts() != AI) continue;
452     if (isUsedByLifetimeMarker(*I))
453       return true;
454   }
455   return false;
456 }
457
458 /// updateInlinedAtInfo - Helper function used by fixupLineNumbers to recursively
459 /// update InlinedAtEntry of a DebugLoc.
460 static DebugLoc updateInlinedAtInfo(const DebugLoc &DL, 
461                                     const DebugLoc &InlinedAtDL,
462                                     LLVMContext &Ctx) {
463   if (MDNode *IA = DL.getInlinedAt(Ctx)) {
464     DebugLoc NewInlinedAtDL 
465       = updateInlinedAtInfo(DebugLoc::getFromDILocation(IA), InlinedAtDL, Ctx);
466     return DebugLoc::get(DL.getLine(), DL.getCol(), DL.getScope(Ctx),
467                          NewInlinedAtDL.getAsMDNode(Ctx));
468   }
469                                              
470   return DebugLoc::get(DL.getLine(), DL.getCol(), DL.getScope(Ctx),
471                        InlinedAtDL.getAsMDNode(Ctx));
472 }
473
474 /// fixupLineNumbers - Update inlined instructions' line numbers to 
475 /// to encode location where these instructions are inlined.
476 static void fixupLineNumbers(Function *Fn, Function::iterator FI,
477                               Instruction *TheCall) {
478   DebugLoc TheCallDL = TheCall->getDebugLoc();
479   if (TheCallDL.isUnknown())
480     return;
481
482   for (; FI != Fn->end(); ++FI) {
483     for (BasicBlock::iterator BI = FI->begin(), BE = FI->end();
484          BI != BE; ++BI) {
485       DebugLoc DL = BI->getDebugLoc();
486       if (!DL.isUnknown()) {
487         BI->setDebugLoc(updateInlinedAtInfo(DL, TheCallDL, BI->getContext()));
488         if (DbgValueInst *DVI = dyn_cast<DbgValueInst>(BI)) {
489           LLVMContext &Ctx = BI->getContext();
490           MDNode *InlinedAt = BI->getDebugLoc().getInlinedAt(Ctx);
491           DVI->setOperand(2, createInlinedVariable(DVI->getVariable(), 
492                                                    InlinedAt, Ctx));
493         }
494       }
495     }
496   }
497 }
498
499 /// InlineFunction - This function inlines the called function into the basic
500 /// block of the caller.  This returns false if it is not possible to inline
501 /// this call.  The program is still in a well defined state if this occurs
502 /// though.
503 ///
504 /// Note that this only does one level of inlining.  For example, if the
505 /// instruction 'call B' is inlined, and 'B' calls 'C', then the call to 'C' now
506 /// exists in the instruction stream.  Similarly this will inline a recursive
507 /// function by one level.
508 bool llvm::InlineFunction(CallSite CS, InlineFunctionInfo &IFI) {
509   Instruction *TheCall = CS.getInstruction();
510   LLVMContext &Context = TheCall->getContext();
511   assert(TheCall->getParent() && TheCall->getParent()->getParent() &&
512          "Instruction not in function!");
513
514   // If IFI has any state in it, zap it before we fill it in.
515   IFI.reset();
516   
517   const Function *CalledFunc = CS.getCalledFunction();
518   if (CalledFunc == 0 ||          // Can't inline external function or indirect
519       CalledFunc->isDeclaration() || // call, or call to a vararg function!
520       CalledFunc->getFunctionType()->isVarArg()) return false;
521
522   // If the call to the callee is not a tail call, we must clear the 'tail'
523   // flags on any calls that we inline.
524   bool MustClearTailCallFlags =
525     !(isa<CallInst>(TheCall) && cast<CallInst>(TheCall)->isTailCall());
526
527   // If the call to the callee cannot throw, set the 'nounwind' flag on any
528   // calls that we inline.
529   bool MarkNoUnwind = CS.doesNotThrow();
530
531   BasicBlock *OrigBB = TheCall->getParent();
532   Function *Caller = OrigBB->getParent();
533
534   // GC poses two hazards to inlining, which only occur when the callee has GC:
535   //  1. If the caller has no GC, then the callee's GC must be propagated to the
536   //     caller.
537   //  2. If the caller has a differing GC, it is invalid to inline.
538   if (CalledFunc->hasGC()) {
539     if (!Caller->hasGC())
540       Caller->setGC(CalledFunc->getGC());
541     else if (CalledFunc->getGC() != Caller->getGC())
542       return false;
543   }
544
545   // Get the personality function from the callee if it contains a landing pad.
546   Value *CalleePersonality = 0;
547   for (Function::const_iterator I = CalledFunc->begin(), E = CalledFunc->end();
548        I != E; ++I)
549     if (const InvokeInst *II = dyn_cast<InvokeInst>(I->getTerminator())) {
550       const BasicBlock *BB = II->getUnwindDest();
551       const LandingPadInst *LP = BB->getLandingPadInst();
552       CalleePersonality = LP->getPersonalityFn();
553       break;
554     }
555
556   // Find the personality function used by the landing pads of the caller. If it
557   // exists, then check to see that it matches the personality function used in
558   // the callee.
559   if (CalleePersonality) {
560     for (Function::const_iterator I = Caller->begin(), E = Caller->end();
561          I != E; ++I)
562       if (const InvokeInst *II = dyn_cast<InvokeInst>(I->getTerminator())) {
563         const BasicBlock *BB = II->getUnwindDest();
564         const LandingPadInst *LP = BB->getLandingPadInst();
565
566         // If the personality functions match, then we can perform the
567         // inlining. Otherwise, we can't inline.
568         // TODO: This isn't 100% true. Some personality functions are proper
569         //       supersets of others and can be used in place of the other.
570         if (LP->getPersonalityFn() != CalleePersonality)
571           return false;
572
573         break;
574       }
575   }
576
577   // Get an iterator to the last basic block in the function, which will have
578   // the new function inlined after it.
579   Function::iterator LastBlock = &Caller->back();
580
581   // Make sure to capture all of the return instructions from the cloned
582   // function.
583   SmallVector<ReturnInst*, 8> Returns;
584   ClonedCodeInfo InlinedFunctionInfo;
585   Function::iterator FirstNewBlock;
586
587   { // Scope to destroy VMap after cloning.
588     ValueToValueMapTy VMap;
589
590     assert(CalledFunc->arg_size() == CS.arg_size() &&
591            "No varargs calls can be inlined!");
592
593     // Calculate the vector of arguments to pass into the function cloner, which
594     // matches up the formal to the actual argument values.
595     CallSite::arg_iterator AI = CS.arg_begin();
596     unsigned ArgNo = 0;
597     for (Function::const_arg_iterator I = CalledFunc->arg_begin(),
598          E = CalledFunc->arg_end(); I != E; ++I, ++AI, ++ArgNo) {
599       Value *ActualArg = *AI;
600
601       // When byval arguments actually inlined, we need to make the copy implied
602       // by them explicit.  However, we don't do this if the callee is readonly
603       // or readnone, because the copy would be unneeded: the callee doesn't
604       // modify the struct.
605       if (CS.isByValArgument(ArgNo)) {
606         ActualArg = HandleByValArgument(ActualArg, TheCall, CalledFunc, IFI,
607                                         CalledFunc->getParamAlignment(ArgNo+1));
608  
609         // Calls that we inline may use the new alloca, so we need to clear
610         // their 'tail' flags if HandleByValArgument introduced a new alloca and
611         // the callee has calls.
612         MustClearTailCallFlags |= ActualArg != *AI;
613       }
614
615       VMap[I] = ActualArg;
616     }
617
618     // We want the inliner to prune the code as it copies.  We would LOVE to
619     // have no dead or constant instructions leftover after inlining occurs
620     // (which can happen, e.g., because an argument was constant), but we'll be
621     // happy with whatever the cloner can do.
622     CloneAndPruneFunctionInto(Caller, CalledFunc, VMap, 
623                               /*ModuleLevelChanges=*/false, Returns, ".i",
624                               &InlinedFunctionInfo, IFI.TD, TheCall);
625
626     // Remember the first block that is newly cloned over.
627     FirstNewBlock = LastBlock; ++FirstNewBlock;
628
629     // Update the callgraph if requested.
630     if (IFI.CG)
631       UpdateCallGraphAfterInlining(CS, FirstNewBlock, VMap, IFI);
632
633     // Update inlined instructions' line number information.
634     fixupLineNumbers(Caller, FirstNewBlock, TheCall);
635   }
636
637   // If there are any alloca instructions in the block that used to be the entry
638   // block for the callee, move them to the entry block of the caller.  First
639   // calculate which instruction they should be inserted before.  We insert the
640   // instructions at the end of the current alloca list.
641   {
642     BasicBlock::iterator InsertPoint = Caller->begin()->begin();
643     for (BasicBlock::iterator I = FirstNewBlock->begin(),
644          E = FirstNewBlock->end(); I != E; ) {
645       AllocaInst *AI = dyn_cast<AllocaInst>(I++);
646       if (AI == 0) continue;
647       
648       // If the alloca is now dead, remove it.  This often occurs due to code
649       // specialization.
650       if (AI->use_empty()) {
651         AI->eraseFromParent();
652         continue;
653       }
654
655       if (!isa<Constant>(AI->getArraySize()))
656         continue;
657       
658       // Keep track of the static allocas that we inline into the caller.
659       IFI.StaticAllocas.push_back(AI);
660       
661       // Scan for the block of allocas that we can move over, and move them
662       // all at once.
663       while (isa<AllocaInst>(I) &&
664              isa<Constant>(cast<AllocaInst>(I)->getArraySize())) {
665         IFI.StaticAllocas.push_back(cast<AllocaInst>(I));
666         ++I;
667       }
668
669       // Transfer all of the allocas over in a block.  Using splice means
670       // that the instructions aren't removed from the symbol table, then
671       // reinserted.
672       Caller->getEntryBlock().getInstList().splice(InsertPoint,
673                                                    FirstNewBlock->getInstList(),
674                                                    AI, I);
675     }
676   }
677
678   // Leave lifetime markers for the static alloca's, scoping them to the
679   // function we just inlined.
680   if (!IFI.StaticAllocas.empty()) {
681     IRBuilder<> builder(FirstNewBlock->begin());
682     for (unsigned ai = 0, ae = IFI.StaticAllocas.size(); ai != ae; ++ai) {
683       AllocaInst *AI = IFI.StaticAllocas[ai];
684
685       // If the alloca is already scoped to something smaller than the whole
686       // function then there's no need to add redundant, less accurate markers.
687       if (hasLifetimeMarkers(AI))
688         continue;
689
690       builder.CreateLifetimeStart(AI);
691       for (unsigned ri = 0, re = Returns.size(); ri != re; ++ri) {
692         IRBuilder<> builder(Returns[ri]);
693         builder.CreateLifetimeEnd(AI);
694       }
695     }
696   }
697
698   // If the inlined code contained dynamic alloca instructions, wrap the inlined
699   // code with llvm.stacksave/llvm.stackrestore intrinsics.
700   if (InlinedFunctionInfo.ContainsDynamicAllocas) {
701     Module *M = Caller->getParent();
702     // Get the two intrinsics we care about.
703     Function *StackSave = Intrinsic::getDeclaration(M, Intrinsic::stacksave);
704     Function *StackRestore=Intrinsic::getDeclaration(M,Intrinsic::stackrestore);
705
706     // Insert the llvm.stacksave.
707     CallInst *SavedPtr = IRBuilder<>(FirstNewBlock, FirstNewBlock->begin())
708       .CreateCall(StackSave, "savedstack");
709
710     // Insert a call to llvm.stackrestore before any return instructions in the
711     // inlined function.
712     for (unsigned i = 0, e = Returns.size(); i != e; ++i) {
713       IRBuilder<>(Returns[i]).CreateCall(StackRestore, SavedPtr);
714     }
715
716     // Count the number of StackRestore calls we insert.
717     unsigned NumStackRestores = Returns.size();
718
719     // If we are inlining an invoke instruction, insert restores before each
720     // unwind.  These unwinds will be rewritten into branches later.
721     if (InlinedFunctionInfo.ContainsUnwinds && isa<InvokeInst>(TheCall)) {
722       for (Function::iterator BB = FirstNewBlock, E = Caller->end();
723            BB != E; ++BB)
724         if (UnwindInst *UI = dyn_cast<UnwindInst>(BB->getTerminator())) {
725           IRBuilder<>(UI).CreateCall(StackRestore, SavedPtr);
726           ++NumStackRestores;
727         }
728     }
729   }
730
731   // If we are inlining tail call instruction through a call site that isn't
732   // marked 'tail', we must remove the tail marker for any calls in the inlined
733   // code.  Also, calls inlined through a 'nounwind' call site should be marked
734   // 'nounwind'.
735   if (InlinedFunctionInfo.ContainsCalls &&
736       (MustClearTailCallFlags || MarkNoUnwind)) {
737     for (Function::iterator BB = FirstNewBlock, E = Caller->end();
738          BB != E; ++BB)
739       for (BasicBlock::iterator I = BB->begin(), E = BB->end(); I != E; ++I)
740         if (CallInst *CI = dyn_cast<CallInst>(I)) {
741           if (MustClearTailCallFlags)
742             CI->setTailCall(false);
743           if (MarkNoUnwind)
744             CI->setDoesNotThrow();
745         }
746   }
747
748   // If we are inlining through a 'nounwind' call site then any inlined 'unwind'
749   // instructions are unreachable.
750   if (InlinedFunctionInfo.ContainsUnwinds && MarkNoUnwind)
751     for (Function::iterator BB = FirstNewBlock, E = Caller->end();
752          BB != E; ++BB) {
753       TerminatorInst *Term = BB->getTerminator();
754       if (isa<UnwindInst>(Term)) {
755         new UnreachableInst(Context, Term);
756         BB->getInstList().erase(Term);
757       }
758     }
759
760   // If we are inlining for an invoke instruction, we must make sure to rewrite
761   // any inlined 'unwind' instructions into branches to the invoke exception
762   // destination, and call instructions into invoke instructions.
763   if (InvokeInst *II = dyn_cast<InvokeInst>(TheCall))
764     HandleInlinedInvoke(II, FirstNewBlock, InlinedFunctionInfo);
765
766   // If we cloned in _exactly one_ basic block, and if that block ends in a
767   // return instruction, we splice the body of the inlined callee directly into
768   // the calling basic block.
769   if (Returns.size() == 1 && std::distance(FirstNewBlock, Caller->end()) == 1) {
770     // Move all of the instructions right before the call.
771     OrigBB->getInstList().splice(TheCall, FirstNewBlock->getInstList(),
772                                  FirstNewBlock->begin(), FirstNewBlock->end());
773     // Remove the cloned basic block.
774     Caller->getBasicBlockList().pop_back();
775
776     // If the call site was an invoke instruction, add a branch to the normal
777     // destination.
778     if (InvokeInst *II = dyn_cast<InvokeInst>(TheCall))
779       BranchInst::Create(II->getNormalDest(), TheCall);
780
781     // If the return instruction returned a value, replace uses of the call with
782     // uses of the returned value.
783     if (!TheCall->use_empty()) {
784       ReturnInst *R = Returns[0];
785       if (TheCall == R->getReturnValue())
786         TheCall->replaceAllUsesWith(UndefValue::get(TheCall->getType()));
787       else
788         TheCall->replaceAllUsesWith(R->getReturnValue());
789     }
790     // Since we are now done with the Call/Invoke, we can delete it.
791     TheCall->eraseFromParent();
792
793     // Since we are now done with the return instruction, delete it also.
794     Returns[0]->eraseFromParent();
795
796     // We are now done with the inlining.
797     return true;
798   }
799
800   // Otherwise, we have the normal case, of more than one block to inline or
801   // multiple return sites.
802
803   // We want to clone the entire callee function into the hole between the
804   // "starter" and "ender" blocks.  How we accomplish this depends on whether
805   // this is an invoke instruction or a call instruction.
806   BasicBlock *AfterCallBB;
807   if (InvokeInst *II = dyn_cast<InvokeInst>(TheCall)) {
808
809     // Add an unconditional branch to make this look like the CallInst case...
810     BranchInst *NewBr = BranchInst::Create(II->getNormalDest(), TheCall);
811
812     // Split the basic block.  This guarantees that no PHI nodes will have to be
813     // updated due to new incoming edges, and make the invoke case more
814     // symmetric to the call case.
815     AfterCallBB = OrigBB->splitBasicBlock(NewBr,
816                                           CalledFunc->getName()+".exit");
817
818   } else {  // It's a call
819     // If this is a call instruction, we need to split the basic block that
820     // the call lives in.
821     //
822     AfterCallBB = OrigBB->splitBasicBlock(TheCall,
823                                           CalledFunc->getName()+".exit");
824   }
825
826   // Change the branch that used to go to AfterCallBB to branch to the first
827   // basic block of the inlined function.
828   //
829   TerminatorInst *Br = OrigBB->getTerminator();
830   assert(Br && Br->getOpcode() == Instruction::Br &&
831          "splitBasicBlock broken!");
832   Br->setOperand(0, FirstNewBlock);
833
834
835   // Now that the function is correct, make it a little bit nicer.  In
836   // particular, move the basic blocks inserted from the end of the function
837   // into the space made by splitting the source basic block.
838   Caller->getBasicBlockList().splice(AfterCallBB, Caller->getBasicBlockList(),
839                                      FirstNewBlock, Caller->end());
840
841   // Handle all of the return instructions that we just cloned in, and eliminate
842   // any users of the original call/invoke instruction.
843   Type *RTy = CalledFunc->getReturnType();
844
845   PHINode *PHI = 0;
846   if (Returns.size() > 1) {
847     // The PHI node should go at the front of the new basic block to merge all
848     // possible incoming values.
849     if (!TheCall->use_empty()) {
850       PHI = PHINode::Create(RTy, Returns.size(), TheCall->getName(),
851                             AfterCallBB->begin());
852       // Anything that used the result of the function call should now use the
853       // PHI node as their operand.
854       TheCall->replaceAllUsesWith(PHI);
855     }
856
857     // Loop over all of the return instructions adding entries to the PHI node
858     // as appropriate.
859     if (PHI) {
860       for (unsigned i = 0, e = Returns.size(); i != e; ++i) {
861         ReturnInst *RI = Returns[i];
862         assert(RI->getReturnValue()->getType() == PHI->getType() &&
863                "Ret value not consistent in function!");
864         PHI->addIncoming(RI->getReturnValue(), RI->getParent());
865       }
866     }
867
868
869     // Add a branch to the merge points and remove return instructions.
870     for (unsigned i = 0, e = Returns.size(); i != e; ++i) {
871       ReturnInst *RI = Returns[i];
872       BranchInst::Create(AfterCallBB, RI);
873       RI->eraseFromParent();
874     }
875   } else if (!Returns.empty()) {
876     // Otherwise, if there is exactly one return value, just replace anything
877     // using the return value of the call with the computed value.
878     if (!TheCall->use_empty()) {
879       if (TheCall == Returns[0]->getReturnValue())
880         TheCall->replaceAllUsesWith(UndefValue::get(TheCall->getType()));
881       else
882         TheCall->replaceAllUsesWith(Returns[0]->getReturnValue());
883     }
884
885     // Update PHI nodes that use the ReturnBB to use the AfterCallBB.
886     BasicBlock *ReturnBB = Returns[0]->getParent();
887     ReturnBB->replaceAllUsesWith(AfterCallBB);
888
889     // Splice the code from the return block into the block that it will return
890     // to, which contains the code that was after the call.
891     AfterCallBB->getInstList().splice(AfterCallBB->begin(),
892                                       ReturnBB->getInstList());
893
894     // Delete the return instruction now and empty ReturnBB now.
895     Returns[0]->eraseFromParent();
896     ReturnBB->eraseFromParent();
897   } else if (!TheCall->use_empty()) {
898     // No returns, but something is using the return value of the call.  Just
899     // nuke the result.
900     TheCall->replaceAllUsesWith(UndefValue::get(TheCall->getType()));
901   }
902
903   // Since we are now done with the Call/Invoke, we can delete it.
904   TheCall->eraseFromParent();
905
906   // We should always be able to fold the entry block of the function into the
907   // single predecessor of the block...
908   assert(cast<BranchInst>(Br)->isUnconditional() && "splitBasicBlock broken!");
909   BasicBlock *CalleeEntry = cast<BranchInst>(Br)->getSuccessor(0);
910
911   // Splice the code entry block into calling block, right before the
912   // unconditional branch.
913   CalleeEntry->replaceAllUsesWith(OrigBB);  // Update PHI nodes
914   OrigBB->getInstList().splice(Br, CalleeEntry->getInstList());
915
916   // Remove the unconditional branch.
917   OrigBB->getInstList().erase(Br);
918
919   // Now we can remove the CalleeEntry block, which is now empty.
920   Caller->getBasicBlockList().erase(CalleeEntry);
921
922   // If we inserted a phi node, check to see if it has a single value (e.g. all
923   // the entries are the same or undef).  If so, remove the PHI so it doesn't
924   // block other optimizations.
925   if (PHI) {
926     if (Value *V = SimplifyInstruction(PHI, IFI.TD)) {
927       PHI->replaceAllUsesWith(V);
928       PHI->eraseFromParent();
929     }
930   }
931
932   return true;
933 }