InlineFunction.cpp revision 13b1c31412372ef3790934ca213546fec595fbbc
1ca398dc3989d35e8516489fd163e012133bd41cbChris Lattner//===- InlineFunction.cpp - Code to perform function inlining -------------===//
2fd93908ae8b9684fe71c239e3c6cfe13ff6a2663Misha Brukman//
3b576c94c15af9a440f69d9d03c2afead7971118cJohn Criswell//                     The LLVM Compiler Infrastructure
4b576c94c15af9a440f69d9d03c2afead7971118cJohn Criswell//
54ee451de366474b9c228b4e5fa573795a715216dChris Lattner// This file is distributed under the University of Illinois Open Source
64ee451de366474b9c228b4e5fa573795a715216dChris Lattner// License. See LICENSE.TXT for details.
7fd93908ae8b9684fe71c239e3c6cfe13ff6a2663Misha Brukman//
8b576c94c15af9a440f69d9d03c2afead7971118cJohn Criswell//===----------------------------------------------------------------------===//
9ca398dc3989d35e8516489fd163e012133bd41cbChris Lattner//
10ca398dc3989d35e8516489fd163e012133bd41cbChris Lattner// This file implements inlining of a function into a call site, resolving
11ca398dc3989d35e8516489fd163e012133bd41cbChris Lattner// parameters and the return value as appropriate.
12ca398dc3989d35e8516489fd163e012133bd41cbChris Lattner//
13ca398dc3989d35e8516489fd163e012133bd41cbChris Lattner//===----------------------------------------------------------------------===//
14ca398dc3989d35e8516489fd163e012133bd41cbChris Lattner
15ca398dc3989d35e8516489fd163e012133bd41cbChris Lattner#include "llvm/Transforms/Utils/Cloning.h"
163787e765facfad5ea62753922d940bcdd52afd57Chris Lattner#include "llvm/Constants.h"
177152c237b46a920b29d5605af934766b8f9a07a1Chris Lattner#include "llvm/DerivedTypes.h"
18ca398dc3989d35e8516489fd163e012133bd41cbChris Lattner#include "llvm/Module.h"
1980a38d245359cb0a3be8f78f5d7d911232886b9aChris Lattner#include "llvm/Instructions.h"
20517576d6f96a0acde9bab79553d89f4ceba20cf6Devang Patel#include "llvm/IntrinsicInst.h"
2180a38d245359cb0a3be8f78f5d7d911232886b9aChris Lattner#include "llvm/Intrinsics.h"
22eaf42abab6d465c38891345d999255871cf03943Devang Patel#include "llvm/Attributes.h"
23468fb1df7db466e5682ee44341c3990b599e8d6aChris Lattner#include "llvm/Analysis/CallGraph.h"
24517576d6f96a0acde9bab79553d89f4ceba20cf6Devang Patel#include "llvm/Analysis/DebugInfo.h"
256fb881c036c32728c4a128d81b6083457e534e09Duncan Sands#include "llvm/Analysis/InstructionSimplify.h"
26c93adca35856d0eaae088e52ba30cfefbd7ad910Chris Lattner#include "llvm/Target/TargetData.h"
277569d79de1bd97a6a17b81340ea6ce97d8a3c279Chris Lattner#include "llvm/Transforms/Utils/Local.h"
2893e985f1b17aef62d58e3198a4604f9f6cfe8d19Chris Lattner#include "llvm/ADT/SmallVector.h"
29641ca93cff0f957fc5fb9dfb05d2a4a340aa8af7Devang Patel#include "llvm/ADT/StringExtras.h"
3080a38d245359cb0a3be8f78f5d7d911232886b9aChris Lattner#include "llvm/Support/CallSite.h"
316d55f2269e20298a1d6a683be72d9552482156a9Nick Lewycky#include "llvm/Support/IRBuilder.h"
32f7703df4968084c18c248c1feea9961c19a32e6aChris Lattnerusing namespace llvm;
33ca398dc3989d35e8516489fd163e012133bd41cbChris Lattner
3460915146f4d35e12f10dcdaa155596fac79184daChris Lattnerbool llvm::InlineFunction(CallInst *CI, InlineFunctionInfo &IFI) {
3560915146f4d35e12f10dcdaa155596fac79184daChris Lattner  return InlineFunction(CallSite(CI), IFI);
36468fb1df7db466e5682ee44341c3990b599e8d6aChris Lattner}
3760915146f4d35e12f10dcdaa155596fac79184daChris Lattnerbool llvm::InlineFunction(InvokeInst *II, InlineFunctionInfo &IFI) {
3860915146f4d35e12f10dcdaa155596fac79184daChris Lattner  return InlineFunction(CallSite(II), IFI);
39468fb1df7db466e5682ee44341c3990b599e8d6aChris Lattner}
4080a38d245359cb0a3be8f78f5d7d911232886b9aChris Lattner
41a3de16bc8f36638d5444e3e7b0112998af54f826John McCallnamespace {
42a3de16bc8f36638d5444e3e7b0112998af54f826John McCall  /// A class for recording information about inlining through an invoke.
43a3de16bc8f36638d5444e3e7b0112998af54f826John McCall  class InvokeInliningInfo {
44fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling    BasicBlock *OuterResumeDest; //< Destination of the invoke's unwind.
45fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling    BasicBlock *InnerResumeDest; //< Destination for the callee's resume.
46fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling    LandingPadInst *CallerLPad;  //< LandingPadInst associated with the invoke.
47fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling    PHINode *InnerEHValuesPHI;   //< PHI for EH values from landingpad insts.
484dbd9b8ebfddb845c5675bbf2567a4d0e04871e7Bill Wendling    SmallVector<Value*, 8> UnwindDestPHIValues;
49fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling
502bf84c15d24bb373987d9dbc6308092eac1b8324Bill Wendling  public:
51fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling    InvokeInliningInfo(InvokeInst *II)
5208d01462d13fdfac756a8bd0f38bbfbceb247403Bill Wendling      : OuterResumeDest(II->getUnwindDest()), InnerResumeDest(0),
53fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling        CallerLPad(0), InnerEHValuesPHI(0) {
54fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling      // If there are PHI nodes in the unwind destination block, we need to keep
55fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling      // track of which values came into them from the invoke before removing
56fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling      // the edge from this block.
57fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling      llvm::BasicBlock *InvokeBB = II->getParent();
5808d01462d13fdfac756a8bd0f38bbfbceb247403Bill Wendling      BasicBlock::iterator I = OuterResumeDest->begin();
59fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling      for (; isa<PHINode>(I); ++I) {
60a3de16bc8f36638d5444e3e7b0112998af54f826John McCall        // Save the value to use for this edge.
61fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling        PHINode *PHI = cast<PHINode>(I);
62fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling        UnwindDestPHIValues.push_back(PHI->getIncomingValueForBlock(InvokeBB));
63fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling      }
64fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling
6527b5658affba5b12b396048d2cc598c70719bfc5Bill Wendling      CallerLPad = cast<LandingPadInst>(I);
66a3de16bc8f36638d5444e3e7b0112998af54f826John McCall    }
67a3de16bc8f36638d5444e3e7b0112998af54f826John McCall
6808d01462d13fdfac756a8bd0f38bbfbceb247403Bill Wendling    /// getOuterResumeDest - The outer unwind destination is the target of
6908d01462d13fdfac756a8bd0f38bbfbceb247403Bill Wendling    /// unwind edges introduced for calls within the inlined function.
704dbd9b8ebfddb845c5675bbf2567a4d0e04871e7Bill Wendling    BasicBlock *getOuterResumeDest() const {
7108d01462d13fdfac756a8bd0f38bbfbceb247403Bill Wendling      return OuterResumeDest;
72a3de16bc8f36638d5444e3e7b0112998af54f826John McCall    }
73a3de16bc8f36638d5444e3e7b0112998af54f826John McCall
7413b1c31412372ef3790934ca213546fec595fbbcBill Wendling    BasicBlock *getInnerResumeDest();
75fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling
76fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling    LandingPadInst *getLandingPadInst() const { return CallerLPad; }
77fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling
78fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling    /// forwardResume - Forward the 'resume' instruction to the caller's landing
79fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling    /// pad block. When the landing pad block has only one predecessor, this is
80fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling    /// a simple branch. When there is more than one predecessor, we need to
81fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling    /// split the landing pad block after the landingpad instruction and jump
82fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling    /// to there.
83fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling    void forwardResume(ResumeInst *RI);
84fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling
85fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling    /// addIncomingPHIValuesFor - Add incoming-PHI values to the unwind
86fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling    /// destination block for the given basic block, using the values for the
87fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling    /// original invoke's source block.
88a3de16bc8f36638d5444e3e7b0112998af54f826John McCall    void addIncomingPHIValuesFor(BasicBlock *BB) const {
8908d01462d13fdfac756a8bd0f38bbfbceb247403Bill Wendling      addIncomingPHIValuesForInto(BB, OuterResumeDest);
90d7c10862016939c9850cadfe5e1c35513c0adf28John McCall    }
9110c6d12a9fd4dab411091f64db4db69670b88850Bill Wendling
92d7c10862016939c9850cadfe5e1c35513c0adf28John McCall    void addIncomingPHIValuesForInto(BasicBlock *src, BasicBlock *dest) const {
93d7c10862016939c9850cadfe5e1c35513c0adf28John McCall      BasicBlock::iterator I = dest->begin();
94a3de16bc8f36638d5444e3e7b0112998af54f826John McCall      for (unsigned i = 0, e = UnwindDestPHIValues.size(); i != e; ++i, ++I) {
9510c6d12a9fd4dab411091f64db4db69670b88850Bill Wendling        PHINode *phi = cast<PHINode>(I);
9610c6d12a9fd4dab411091f64db4db69670b88850Bill Wendling        phi->addIncoming(UnwindDestPHIValues[i], src);
97a3de16bc8f36638d5444e3e7b0112998af54f826John McCall      }
98a3de16bc8f36638d5444e3e7b0112998af54f826John McCall    }
99a3de16bc8f36638d5444e3e7b0112998af54f826John McCall  };
100a3de16bc8f36638d5444e3e7b0112998af54f826John McCall}
101a3de16bc8f36638d5444e3e7b0112998af54f826John McCall
10213b1c31412372ef3790934ca213546fec595fbbcBill Wendling/// getInnerResumeDest - Get or create a target for the branch from ResumeInsts.
10313b1c31412372ef3790934ca213546fec595fbbcBill WendlingBasicBlock *InvokeInliningInfo::getInnerResumeDest() {
104fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling  if (InnerResumeDest) return InnerResumeDest;
105fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling
106fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling  // Split the landing pad.
107fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling  BasicBlock::iterator SplitPoint = CallerLPad; ++SplitPoint;
108fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling  InnerResumeDest =
109fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling    OuterResumeDest->splitBasicBlock(SplitPoint,
110fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling                                     OuterResumeDest->getName() + ".body");
111fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling
112fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling  // The number of incoming edges we expect to the inner landing pad.
113fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling  const unsigned PHICapacity = 2;
114fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling
115fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling  // Create corresponding new PHIs for all the PHIs in the outer landing pad.
116fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling  BasicBlock::iterator InsertPoint = InnerResumeDest->begin();
117fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling  BasicBlock::iterator I = OuterResumeDest->begin();
118fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling  for (unsigned i = 0, e = UnwindDestPHIValues.size(); i != e; ++i, ++I) {
119fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling    PHINode *OuterPHI = cast<PHINode>(I);
120fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling    PHINode *InnerPHI = PHINode::Create(OuterPHI->getType(), PHICapacity,
121fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling                                        OuterPHI->getName() + ".lpad-body",
122fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling                                        InsertPoint);
123fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling    OuterPHI->replaceAllUsesWith(InnerPHI);
124fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling    InnerPHI->addIncoming(OuterPHI, OuterResumeDest);
125fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling  }
126fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling
127fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling  // Create a PHI for the exception values.
128fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling  InnerEHValuesPHI = PHINode::Create(CallerLPad->getType(), PHICapacity,
129fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling                                     "eh.lpad-body", InsertPoint);
130fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling  CallerLPad->replaceAllUsesWith(InnerEHValuesPHI);
131fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling  InnerEHValuesPHI->addIncoming(CallerLPad, OuterResumeDest);
132fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling
133fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling  // All done.
134fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling  return InnerResumeDest;
135fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling}
136fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling
137fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling/// forwardResume - Forward the 'resume' instruction to the caller's landing pad
138fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling/// block. When the landing pad block has only one predecessor, this is a simple
139fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling/// branch. When there is more than one predecessor, we need to split the
140fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling/// landing pad block after the landingpad instruction and jump to there.
141fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendlingvoid InvokeInliningInfo::forwardResume(ResumeInst *RI) {
14213b1c31412372ef3790934ca213546fec595fbbcBill Wendling  BasicBlock *Dest = getInnerResumeDest();
143fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling  BasicBlock *Src = RI->getParent();
144fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling
145fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling  BranchInst::Create(Dest, Src);
146fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling
147fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling  // Update the PHIs in the destination. They were inserted in an order which
148fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling  // makes this work.
149fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling  addIncomingPHIValuesForInto(Src, Dest);
150fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling
151fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling  InnerEHValuesPHI->addIncoming(RI->getOperand(0), Src);
152fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling  RI->eraseFromParent();
153fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling}
154fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling
155135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner/// HandleCallsInBlockInlinedThroughInvoke - When we inline a basic block into
156f61f89ae14cf332a014a598153137113af34002fEric Christopher/// an invoke, we have to turn all of the calls that can throw into
157135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner/// invokes.  This function analyze BB to see if there are any calls, and if so,
158135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner/// it rewrites them to be invokes that jump to InvokeDest and fills in the PHI
15981dfb3885252fbf621b080827a080099864415f8Chris Lattner/// nodes in that block with the values specified in InvokeDestPHIValues.
160135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner///
161a3de16bc8f36638d5444e3e7b0112998af54f826John McCall/// Returns true to indicate that the next block should be skipped.
162a3de16bc8f36638d5444e3e7b0112998af54f826John McCallstatic bool HandleCallsInBlockInlinedThroughInvoke(BasicBlock *BB,
163a3de16bc8f36638d5444e3e7b0112998af54f826John McCall                                                   InvokeInliningInfo &Invoke) {
164fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling  LandingPadInst *LPI = Invoke.getLandingPadInst();
165fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling
166135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner  for (BasicBlock::iterator BBI = BB->begin(), E = BB->end(); BBI != E; ) {
167135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner    Instruction *I = BBI++;
168fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling
16927b5658affba5b12b396048d2cc598c70719bfc5Bill Wendling    if (LandingPadInst *L = dyn_cast<LandingPadInst>(I)) {
17027b5658affba5b12b396048d2cc598c70719bfc5Bill Wendling      unsigned NumClauses = LPI->getNumClauses();
17127b5658affba5b12b396048d2cc598c70719bfc5Bill Wendling      L->reserveClauses(NumClauses);
17227b5658affba5b12b396048d2cc598c70719bfc5Bill Wendling      for (unsigned i = 0; i != NumClauses; ++i)
17327b5658affba5b12b396048d2cc598c70719bfc5Bill Wendling        L->addClause(LPI->getClause(i));
17427b5658affba5b12b396048d2cc598c70719bfc5Bill Wendling    }
175fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling
176135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner    // We only need to check for function calls: inlined invoke
177135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner    // instructions require no special handling.
178135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner    CallInst *CI = dyn_cast<CallInst>(I);
179675f63886944d72e05e5210c36838c797364a0aaBill Wendling
180135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner    // If this call cannot unwind, don't convert it to an invoke.
181675f63886944d72e05e5210c36838c797364a0aaBill Wendling    if (!CI || CI->doesNotThrow())
182135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner      continue;
183675f63886944d72e05e5210c36838c797364a0aaBill Wendling
184675f63886944d72e05e5210c36838c797364a0aaBill Wendling    // Convert this function call into an invoke instruction.  First, split the
185675f63886944d72e05e5210c36838c797364a0aaBill Wendling    // basic block.
186135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner    BasicBlock *Split = BB->splitBasicBlock(CI, CI->getName()+".noexc");
187a3de16bc8f36638d5444e3e7b0112998af54f826John McCall
188d7c10862016939c9850cadfe5e1c35513c0adf28John McCall    // Delete the unconditional branch inserted by splitBasicBlock
189d7c10862016939c9850cadfe5e1c35513c0adf28John McCall    BB->getInstList().pop_back();
190a3de16bc8f36638d5444e3e7b0112998af54f826John McCall
1919e9a34c5688500eee47d6a7800c6e9ef93b90684Bill Wendling    // Create the new invoke instruction.
192d7c10862016939c9850cadfe5e1c35513c0adf28John McCall    ImmutableCallSite CS(CI);
193d7c10862016939c9850cadfe5e1c35513c0adf28John McCall    SmallVector<Value*, 8> InvokeArgs(CS.arg_begin(), CS.arg_end());
19406881e8734b1758fb0666f4e47a91bc58c6383beBill Wendling    InvokeInst *II = InvokeInst::Create(CI->getCalledValue(), Split,
1954dbd9b8ebfddb845c5675bbf2567a4d0e04871e7Bill Wendling                                        Invoke.getOuterResumeDest(),
19606881e8734b1758fb0666f4e47a91bc58c6383beBill Wendling                                        InvokeArgs, CI->getName(), BB);
197d7c10862016939c9850cadfe5e1c35513c0adf28John McCall    II->setCallingConv(CI->getCallingConv());
198d7c10862016939c9850cadfe5e1c35513c0adf28John McCall    II->setAttributes(CI->getAttributes());
199135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner
200d7c10862016939c9850cadfe5e1c35513c0adf28John McCall    // Make sure that anything using the call now uses the invoke!  This also
201d7c10862016939c9850cadfe5e1c35513c0adf28John McCall    // updates the CallGraph if present, because it uses a WeakVH.
202d7c10862016939c9850cadfe5e1c35513c0adf28John McCall    CI->replaceAllUsesWith(II);
203d7c10862016939c9850cadfe5e1c35513c0adf28John McCall
20406881e8734b1758fb0666f4e47a91bc58c6383beBill Wendling    // Delete the original call
20506881e8734b1758fb0666f4e47a91bc58c6383beBill Wendling    Split->getInstList().pop_front();
206a3de16bc8f36638d5444e3e7b0112998af54f826John McCall
20706881e8734b1758fb0666f4e47a91bc58c6383beBill Wendling    // Update any PHI nodes in the exceptional block to indicate that there is
20806881e8734b1758fb0666f4e47a91bc58c6383beBill Wendling    // now a new entry in them.
209a3de16bc8f36638d5444e3e7b0112998af54f826John McCall    Invoke.addIncomingPHIValuesFor(BB);
210d7c10862016939c9850cadfe5e1c35513c0adf28John McCall    return false;
211135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner  }
212a3de16bc8f36638d5444e3e7b0112998af54f826John McCall
213a3de16bc8f36638d5444e3e7b0112998af54f826John McCall  return false;
214135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner}
215135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner
216cd4d339ec187182c9abc22b80560349f8ba5010fChris Lattner/// HandleInlinedInvoke - If we inlined an invoke site, we need to convert calls
217cd4d339ec187182c9abc22b80560349f8ba5010fChris Lattner/// in the body of the inlined function into invokes and turn unwind
218cd4d339ec187182c9abc22b80560349f8ba5010fChris Lattner/// instructions into branches to the invoke unwind dest.
219cd4d339ec187182c9abc22b80560349f8ba5010fChris Lattner///
220dac5c4b10b387b55c2394cd98a64f3f1394df2e8Nick Lewycky/// II is the invoke instruction being inlined.  FirstNewBlock is the first
221cd4d339ec187182c9abc22b80560349f8ba5010fChris Lattner/// block of the inlined code (the last block is the end of the function),
222cd4d339ec187182c9abc22b80560349f8ba5010fChris Lattner/// and InlineCodeInfo is information about the code that got inlined.
223cd4d339ec187182c9abc22b80560349f8ba5010fChris Lattnerstatic void HandleInlinedInvoke(InvokeInst *II, BasicBlock *FirstNewBlock,
22481dfb3885252fbf621b080827a080099864415f8Chris Lattner                                ClonedCodeInfo &InlinedCodeInfo) {
225cd4d339ec187182c9abc22b80560349f8ba5010fChris Lattner  BasicBlock *InvokeDest = II->getUnwindDest();
226cd4d339ec187182c9abc22b80560349f8ba5010fChris Lattner
227cd4d339ec187182c9abc22b80560349f8ba5010fChris Lattner  Function *Caller = FirstNewBlock->getParent();
228a7212e58260f6d1ead0c4eec7af400cf6c0d289eDuncan Sands
229cd4d339ec187182c9abc22b80560349f8ba5010fChris Lattner  // The inlined code is currently at the end of the function, scan from the
230cd4d339ec187182c9abc22b80560349f8ba5010fChris Lattner  // start of the inlined code to its end, checking for stuff we need to
231135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner  // rewrite.  If the code doesn't have calls or unwinds, we know there is
232135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner  // nothing to rewrite.
233135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner  if (!InlinedCodeInfo.ContainsCalls && !InlinedCodeInfo.ContainsUnwinds) {
234135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner    // Now that everything is happy, we have one final detail.  The PHI nodes in
235135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner    // the exception destination block still have entries due to the original
236135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner    // invoke instruction.  Eliminate these entries (which might even delete the
237135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner    // PHI node) now.
238135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner    InvokeDest->removePredecessor(II->getParent());
239135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner    return;
240135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner  }
241a3de16bc8f36638d5444e3e7b0112998af54f826John McCall
242a3de16bc8f36638d5444e3e7b0112998af54f826John McCall  InvokeInliningInfo Invoke(II);
243135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner
244135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner  for (Function::iterator BB = FirstNewBlock, E = Caller->end(); BB != E; ++BB){
245135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner    if (InlinedCodeInfo.ContainsCalls)
246a3de16bc8f36638d5444e3e7b0112998af54f826John McCall      if (HandleCallsInBlockInlinedThroughInvoke(BB, Invoke)) {
247a3de16bc8f36638d5444e3e7b0112998af54f826John McCall        // Honor a request to skip the next block.  We don't need to
248a3de16bc8f36638d5444e3e7b0112998af54f826John McCall        // consider UnwindInsts in this case either.
249a3de16bc8f36638d5444e3e7b0112998af54f826John McCall        ++BB;
250a3de16bc8f36638d5444e3e7b0112998af54f826John McCall        continue;
251a3de16bc8f36638d5444e3e7b0112998af54f826John McCall      }
252135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner
253135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner    if (UnwindInst *UI = dyn_cast<UnwindInst>(BB->getTerminator())) {
254135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner      // An UnwindInst requires special handling when it gets inlined into an
255135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner      // invoke site.  Once this happens, we know that the unwind would cause
256135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner      // a control transfer to the invoke exception destination, so we can
257135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner      // transform it into a direct branch to the exception destination.
258135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner      BranchInst::Create(InvokeDest, UI);
259135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner
260135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner      // Delete the unwind instruction!
261135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner      UI->eraseFromParent();
262135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner
263135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner      // Update any PHI nodes in the exceptional block to indicate that
264135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner      // there is now a new entry in them.
265a3de16bc8f36638d5444e3e7b0112998af54f826John McCall      Invoke.addIncomingPHIValuesFor(BB);
266cd4d339ec187182c9abc22b80560349f8ba5010fChris Lattner    }
267fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling
2689e9a34c5688500eee47d6a7800c6e9ef93b90684Bill Wendling    if (ResumeInst *RI = dyn_cast<ResumeInst>(BB->getTerminator()))
269fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling      Invoke.forwardResume(RI);
270cd4d339ec187182c9abc22b80560349f8ba5010fChris Lattner  }
271cd4d339ec187182c9abc22b80560349f8ba5010fChris Lattner
272cd4d339ec187182c9abc22b80560349f8ba5010fChris Lattner  // Now that everything is happy, we have one final detail.  The PHI nodes in
273cd4d339ec187182c9abc22b80560349f8ba5010fChris Lattner  // the exception destination block still have entries due to the original
274cd4d339ec187182c9abc22b80560349f8ba5010fChris Lattner  // invoke instruction.  Eliminate these entries (which might even delete the
275cd4d339ec187182c9abc22b80560349f8ba5010fChris Lattner  // PHI node) now.
276cd4d339ec187182c9abc22b80560349f8ba5010fChris Lattner  InvokeDest->removePredecessor(II->getParent());
277cd4d339ec187182c9abc22b80560349f8ba5010fChris Lattner}
278cd4d339ec187182c9abc22b80560349f8ba5010fChris Lattner
279d85340f4ec587e22b0239617f3b747a6df113894Chris Lattner/// UpdateCallGraphAfterInlining - Once we have cloned code over from a callee
280d85340f4ec587e22b0239617f3b747a6df113894Chris Lattner/// into the caller, update the specified callgraph to reflect the changes we
281d85340f4ec587e22b0239617f3b747a6df113894Chris Lattner/// made.  Note that it's possible that not all code was copied over, so only
282d7b9851c4e634ed3599b1a4c70b1c76c90a11686Duncan Sands/// some edges of the callgraph may remain.
283d7b9851c4e634ed3599b1a4c70b1c76c90a11686Duncan Sandsstatic void UpdateCallGraphAfterInlining(CallSite CS,
284d85340f4ec587e22b0239617f3b747a6df113894Chris Lattner                                         Function::iterator FirstNewBlock,
2851ed219a9d2279ce5a5bbcf16d9b7ccc05cce638cRafael Espindola                                         ValueToValueMapTy &VMap,
286fe9af3b1f7e5d68ecc330bdf4f047d76838f8cc3Chris Lattner                                         InlineFunctionInfo &IFI) {
287fe9af3b1f7e5d68ecc330bdf4f047d76838f8cc3Chris Lattner  CallGraph &CG = *IFI.CG;
288d7b9851c4e634ed3599b1a4c70b1c76c90a11686Duncan Sands  const Function *Caller = CS.getInstruction()->getParent()->getParent();
289d7b9851c4e634ed3599b1a4c70b1c76c90a11686Duncan Sands  const Function *Callee = CS.getCalledFunction();
290468fb1df7db466e5682ee44341c3990b599e8d6aChris Lattner  CallGraphNode *CalleeNode = CG[Callee];
291468fb1df7db466e5682ee44341c3990b599e8d6aChris Lattner  CallGraphNode *CallerNode = CG[Caller];
292a7212e58260f6d1ead0c4eec7af400cf6c0d289eDuncan Sands
293d85340f4ec587e22b0239617f3b747a6df113894Chris Lattner  // Since we inlined some uninlined call sites in the callee into the caller,
294468fb1df7db466e5682ee44341c3990b599e8d6aChris Lattner  // add edges from the caller to all of the callees of the callee.
295c478e52bf4c12691037856ee103c66946afeab6cGabor Greif  CallGraphNode::iterator I = CalleeNode->begin(), E = CalleeNode->end();
296c478e52bf4c12691037856ee103c66946afeab6cGabor Greif
297c478e52bf4c12691037856ee103c66946afeab6cGabor Greif  // Consider the case where CalleeNode == CallerNode.
298125329891f97baedef21e4b464ba70182c3fb45eGabor Greif  CallGraphNode::CalledFunctionsVector CallCache;
299c478e52bf4c12691037856ee103c66946afeab6cGabor Greif  if (CalleeNode == CallerNode) {
300c478e52bf4c12691037856ee103c66946afeab6cGabor Greif    CallCache.assign(I, E);
301c478e52bf4c12691037856ee103c66946afeab6cGabor Greif    I = CallCache.begin();
302c478e52bf4c12691037856ee103c66946afeab6cGabor Greif    E = CallCache.end();
303c478e52bf4c12691037856ee103c66946afeab6cGabor Greif  }
304c478e52bf4c12691037856ee103c66946afeab6cGabor Greif
305c478e52bf4c12691037856ee103c66946afeab6cGabor Greif  for (; I != E; ++I) {
306a541b0fde2ab6b8b037edf113d42da41a2c5aae9Chris Lattner    const Value *OrigCall = I->first;
307a7212e58260f6d1ead0c4eec7af400cf6c0d289eDuncan Sands
3081ed219a9d2279ce5a5bbcf16d9b7ccc05cce638cRafael Espindola    ValueToValueMapTy::iterator VMI = VMap.find(OrigCall);
309981418bf1562d0b5b470ddc7d0034c9f3297b893Chris Lattner    // Only copy the edge if the call was inlined!
31029d3dd8a64791031eea00ffbae51843dc9982df9Devang Patel    if (VMI == VMap.end() || VMI->second == 0)
311135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner      continue;
312135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner
313135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner    // If the call was inlined, but then constant folded, there is no edge to
314135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner    // add.  Check for this case.
315b957a5e41ed6288f4d033167f6413621a09655eeChris Lattner    Instruction *NewCall = dyn_cast<Instruction>(VMI->second);
316b957a5e41ed6288f4d033167f6413621a09655eeChris Lattner    if (NewCall == 0) continue;
3170ca2f28458ae9122f413a4092ddcee33a9dd21c6Chris Lattner
3180ca2f28458ae9122f413a4092ddcee33a9dd21c6Chris Lattner    // Remember that this call site got inlined for the client of
3190ca2f28458ae9122f413a4092ddcee33a9dd21c6Chris Lattner    // InlineFunction.
3200ca2f28458ae9122f413a4092ddcee33a9dd21c6Chris Lattner    IFI.InlinedCalls.push_back(NewCall);
3210ca2f28458ae9122f413a4092ddcee33a9dd21c6Chris Lattner
322b957a5e41ed6288f4d033167f6413621a09655eeChris Lattner    // It's possible that inlining the callsite will cause it to go from an
323b957a5e41ed6288f4d033167f6413621a09655eeChris Lattner    // indirect to a direct call by resolving a function pointer.  If this
324b957a5e41ed6288f4d033167f6413621a09655eeChris Lattner    // happens, set the callee of the new call site to a more precise
325b957a5e41ed6288f4d033167f6413621a09655eeChris Lattner    // destination.  This can also happen if the call graph node of the caller
326b957a5e41ed6288f4d033167f6413621a09655eeChris Lattner    // was just unnecessarily imprecise.
327b957a5e41ed6288f4d033167f6413621a09655eeChris Lattner    if (I->second->getFunction() == 0)
328b957a5e41ed6288f4d033167f6413621a09655eeChris Lattner      if (Function *F = CallSite(NewCall).getCalledFunction()) {
329b957a5e41ed6288f4d033167f6413621a09655eeChris Lattner        // Indirect call site resolved to direct call.
33086099345db95fdce6960ab62fbd9cb0cf96875f7Gabor Greif        CallerNode->addCalledFunction(CallSite(NewCall), CG[F]);
33186099345db95fdce6960ab62fbd9cb0cf96875f7Gabor Greif
332b957a5e41ed6288f4d033167f6413621a09655eeChris Lattner        continue;
333b957a5e41ed6288f4d033167f6413621a09655eeChris Lattner      }
33486099345db95fdce6960ab62fbd9cb0cf96875f7Gabor Greif
33586099345db95fdce6960ab62fbd9cb0cf96875f7Gabor Greif    CallerNode->addCalledFunction(CallSite(NewCall), I->second);
336d85340f4ec587e22b0239617f3b747a6df113894Chris Lattner  }
337135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner
33839fa32403e0b5e163f4f05566d6cde65e6c11095Dale Johannesen  // Update the call graph by deleting the edge from Callee to Caller.  We must
33939fa32403e0b5e163f4f05566d6cde65e6c11095Dale Johannesen  // do this after the loop above in case Caller and Callee are the same.
34039fa32403e0b5e163f4f05566d6cde65e6c11095Dale Johannesen  CallerNode->removeCallEdgeFor(CS);
341468fb1df7db466e5682ee44341c3990b599e8d6aChris Lattner}
342468fb1df7db466e5682ee44341c3990b599e8d6aChris Lattner
3430b66f63a26387f5c0360a4324fc3c31e0599a6e0Chris Lattner/// HandleByValArgument - When inlining a call site that has a byval argument,
3440b66f63a26387f5c0360a4324fc3c31e0599a6e0Chris Lattner/// we have to make the implicit memcpy explicit by adding it.
345e7ae705c32906979a527926864345016e76867b9Chris Lattnerstatic Value *HandleByValArgument(Value *Arg, Instruction *TheCall,
346e7ae705c32906979a527926864345016e76867b9Chris Lattner                                  const Function *CalledFunc,
347e7ae705c32906979a527926864345016e76867b9Chris Lattner                                  InlineFunctionInfo &IFI,
348e7ae705c32906979a527926864345016e76867b9Chris Lattner                                  unsigned ByValAlignment) {
349db125cfaf57cc83e7dd7453de2d509bc8efd0e5eChris Lattner  Type *AggTy = cast<PointerType>(Arg->getType())->getElementType();
3500b66f63a26387f5c0360a4324fc3c31e0599a6e0Chris Lattner
3510b66f63a26387f5c0360a4324fc3c31e0599a6e0Chris Lattner  // If the called function is readonly, then it could not mutate the caller's
3520b66f63a26387f5c0360a4324fc3c31e0599a6e0Chris Lattner  // copy of the byval'd memory.  In this case, it is safe to elide the copy and
3530b66f63a26387f5c0360a4324fc3c31e0599a6e0Chris Lattner  // temporary.
3540b66f63a26387f5c0360a4324fc3c31e0599a6e0Chris Lattner  if (CalledFunc->onlyReadsMemory()) {
3550b66f63a26387f5c0360a4324fc3c31e0599a6e0Chris Lattner    // If the byval argument has a specified alignment that is greater than the
3560b66f63a26387f5c0360a4324fc3c31e0599a6e0Chris Lattner    // passed in pointer, then we either have to round up the input pointer or
3570b66f63a26387f5c0360a4324fc3c31e0599a6e0Chris Lattner    // give up on this transformation.
3580b66f63a26387f5c0360a4324fc3c31e0599a6e0Chris Lattner    if (ByValAlignment <= 1)  // 0 = unspecified, 1 = no particular alignment.
3590b66f63a26387f5c0360a4324fc3c31e0599a6e0Chris Lattner      return Arg;
3600b66f63a26387f5c0360a4324fc3c31e0599a6e0Chris Lattner
3617569d79de1bd97a6a17b81340ea6ce97d8a3c279Chris Lattner    // If the pointer is already known to be sufficiently aligned, or if we can
3627569d79de1bd97a6a17b81340ea6ce97d8a3c279Chris Lattner    // round it up to a larger alignment, then we don't need a temporary.
3637569d79de1bd97a6a17b81340ea6ce97d8a3c279Chris Lattner    if (getOrEnforceKnownAlignment(Arg, ByValAlignment,
3647569d79de1bd97a6a17b81340ea6ce97d8a3c279Chris Lattner                                   IFI.TD) >= ByValAlignment)
3657569d79de1bd97a6a17b81340ea6ce97d8a3c279Chris Lattner      return Arg;
3660b66f63a26387f5c0360a4324fc3c31e0599a6e0Chris Lattner
3677569d79de1bd97a6a17b81340ea6ce97d8a3c279Chris Lattner    // Otherwise, we have to make a memcpy to get a safe alignment.  This is bad
3687569d79de1bd97a6a17b81340ea6ce97d8a3c279Chris Lattner    // for code quality, but rarely happens and is required for correctness.
3690b66f63a26387f5c0360a4324fc3c31e0599a6e0Chris Lattner  }
370e7ae705c32906979a527926864345016e76867b9Chris Lattner
371e7ae705c32906979a527926864345016e76867b9Chris Lattner  LLVMContext &Context = Arg->getContext();
372e7ae705c32906979a527926864345016e76867b9Chris Lattner
3735fdd6c8793462549e3593890ec61573da06e3346Jay Foad  Type *VoidPtrTy = Type::getInt8PtrTy(Context);
374e7ae705c32906979a527926864345016e76867b9Chris Lattner
375e7ae705c32906979a527926864345016e76867b9Chris Lattner  // Create the alloca.  If we have TargetData, use nice alignment.
376e7ae705c32906979a527926864345016e76867b9Chris Lattner  unsigned Align = 1;
377e7ae705c32906979a527926864345016e76867b9Chris Lattner  if (IFI.TD)
378e7ae705c32906979a527926864345016e76867b9Chris Lattner    Align = IFI.TD->getPrefTypeAlignment(AggTy);
379e7ae705c32906979a527926864345016e76867b9Chris Lattner
380e7ae705c32906979a527926864345016e76867b9Chris Lattner  // If the byval had an alignment specified, we *must* use at least that
381e7ae705c32906979a527926864345016e76867b9Chris Lattner  // alignment, as it is required by the byval argument (and uses of the
382e7ae705c32906979a527926864345016e76867b9Chris Lattner  // pointer inside the callee).
383e7ae705c32906979a527926864345016e76867b9Chris Lattner  Align = std::max(Align, ByValAlignment);
384e7ae705c32906979a527926864345016e76867b9Chris Lattner
385e7ae705c32906979a527926864345016e76867b9Chris Lattner  Function *Caller = TheCall->getParent()->getParent();
386e7ae705c32906979a527926864345016e76867b9Chris Lattner
387e7ae705c32906979a527926864345016e76867b9Chris Lattner  Value *NewAlloca = new AllocaInst(AggTy, 0, Align, Arg->getName(),
388e7ae705c32906979a527926864345016e76867b9Chris Lattner                                    &*Caller->begin()->begin());
389e7ae705c32906979a527926864345016e76867b9Chris Lattner  // Emit a memcpy.
3905fdd6c8793462549e3593890ec61573da06e3346Jay Foad  Type *Tys[3] = {VoidPtrTy, VoidPtrTy, Type::getInt64Ty(Context)};
391e7ae705c32906979a527926864345016e76867b9Chris Lattner  Function *MemCpyFn = Intrinsic::getDeclaration(Caller->getParent(),
392e7ae705c32906979a527926864345016e76867b9Chris Lattner                                                 Intrinsic::memcpy,
393eb9a85f09e18b3fe88499710404b38d3a9128f62Benjamin Kramer                                                 Tys);
394e7ae705c32906979a527926864345016e76867b9Chris Lattner  Value *DestCast = new BitCastInst(NewAlloca, VoidPtrTy, "tmp", TheCall);
395e7ae705c32906979a527926864345016e76867b9Chris Lattner  Value *SrcCast = new BitCastInst(Arg, VoidPtrTy, "tmp", TheCall);
396e7ae705c32906979a527926864345016e76867b9Chris Lattner
397e7ae705c32906979a527926864345016e76867b9Chris Lattner  Value *Size;
398e7ae705c32906979a527926864345016e76867b9Chris Lattner  if (IFI.TD == 0)
399e7ae705c32906979a527926864345016e76867b9Chris Lattner    Size = ConstantExpr::getSizeOf(AggTy);
400e7ae705c32906979a527926864345016e76867b9Chris Lattner  else
401e7ae705c32906979a527926864345016e76867b9Chris Lattner    Size = ConstantInt::get(Type::getInt64Ty(Context),
402e7ae705c32906979a527926864345016e76867b9Chris Lattner                            IFI.TD->getTypeStoreSize(AggTy));
403e7ae705c32906979a527926864345016e76867b9Chris Lattner
404e7ae705c32906979a527926864345016e76867b9Chris Lattner  // Always generate a memcpy of alignment 1 here because we don't know
405e7ae705c32906979a527926864345016e76867b9Chris Lattner  // the alignment of the src pointer.  Other optimizations can infer
406e7ae705c32906979a527926864345016e76867b9Chris Lattner  // better alignment.
407e7ae705c32906979a527926864345016e76867b9Chris Lattner  Value *CallArgs[] = {
408e7ae705c32906979a527926864345016e76867b9Chris Lattner    DestCast, SrcCast, Size,
409e7ae705c32906979a527926864345016e76867b9Chris Lattner    ConstantInt::get(Type::getInt32Ty(Context), 1),
410e7ae705c32906979a527926864345016e76867b9Chris Lattner    ConstantInt::getFalse(Context) // isVolatile
411e7ae705c32906979a527926864345016e76867b9Chris Lattner  };
412a3efbb15ddd5aa9006564cd79086723640084878Jay Foad  IRBuilder<>(TheCall).CreateCall(MemCpyFn, CallArgs);
413e7ae705c32906979a527926864345016e76867b9Chris Lattner
414e7ae705c32906979a527926864345016e76867b9Chris Lattner  // Uses of the argument in the function should use our new alloca
415e7ae705c32906979a527926864345016e76867b9Chris Lattner  // instead.
416e7ae705c32906979a527926864345016e76867b9Chris Lattner  return NewAlloca;
417e7ae705c32906979a527926864345016e76867b9Chris Lattner}
418e7ae705c32906979a527926864345016e76867b9Chris Lattner
4196d55f2269e20298a1d6a683be72d9552482156a9Nick Lewycky// isUsedByLifetimeMarker - Check whether this Value is used by a lifetime
4206d55f2269e20298a1d6a683be72d9552482156a9Nick Lewycky// intrinsic.
4216d55f2269e20298a1d6a683be72d9552482156a9Nick Lewyckystatic bool isUsedByLifetimeMarker(Value *V) {
4226d55f2269e20298a1d6a683be72d9552482156a9Nick Lewycky  for (Value::use_iterator UI = V->use_begin(), UE = V->use_end(); UI != UE;
4236d55f2269e20298a1d6a683be72d9552482156a9Nick Lewycky       ++UI) {
4246d55f2269e20298a1d6a683be72d9552482156a9Nick Lewycky    if (IntrinsicInst *II = dyn_cast<IntrinsicInst>(*UI)) {
4256d55f2269e20298a1d6a683be72d9552482156a9Nick Lewycky      switch (II->getIntrinsicID()) {
4266d55f2269e20298a1d6a683be72d9552482156a9Nick Lewycky      default: break;
4276d55f2269e20298a1d6a683be72d9552482156a9Nick Lewycky      case Intrinsic::lifetime_start:
4286d55f2269e20298a1d6a683be72d9552482156a9Nick Lewycky      case Intrinsic::lifetime_end:
4296d55f2269e20298a1d6a683be72d9552482156a9Nick Lewycky        return true;
4306d55f2269e20298a1d6a683be72d9552482156a9Nick Lewycky      }
4316d55f2269e20298a1d6a683be72d9552482156a9Nick Lewycky    }
4326d55f2269e20298a1d6a683be72d9552482156a9Nick Lewycky  }
4336d55f2269e20298a1d6a683be72d9552482156a9Nick Lewycky  return false;
4346d55f2269e20298a1d6a683be72d9552482156a9Nick Lewycky}
4356d55f2269e20298a1d6a683be72d9552482156a9Nick Lewycky
4366d55f2269e20298a1d6a683be72d9552482156a9Nick Lewycky// hasLifetimeMarkers - Check whether the given alloca already has
4376d55f2269e20298a1d6a683be72d9552482156a9Nick Lewycky// lifetime.start or lifetime.end intrinsics.
4386d55f2269e20298a1d6a683be72d9552482156a9Nick Lewyckystatic bool hasLifetimeMarkers(AllocaInst *AI) {
439db125cfaf57cc83e7dd7453de2d509bc8efd0e5eChris Lattner  Type *Int8PtrTy = Type::getInt8PtrTy(AI->getType()->getContext());
4406d55f2269e20298a1d6a683be72d9552482156a9Nick Lewycky  if (AI->getType() == Int8PtrTy)
4416d55f2269e20298a1d6a683be72d9552482156a9Nick Lewycky    return isUsedByLifetimeMarker(AI);
4426d55f2269e20298a1d6a683be72d9552482156a9Nick Lewycky
443708c1ac077fbc0cb73d489b4f4df3b2718566b05Nick Lewycky  // Do a scan to find all the casts to i8*.
4446d55f2269e20298a1d6a683be72d9552482156a9Nick Lewycky  for (Value::use_iterator I = AI->use_begin(), E = AI->use_end(); I != E;
4456d55f2269e20298a1d6a683be72d9552482156a9Nick Lewycky       ++I) {
4466d55f2269e20298a1d6a683be72d9552482156a9Nick Lewycky    if (I->getType() != Int8PtrTy) continue;
447708c1ac077fbc0cb73d489b4f4df3b2718566b05Nick Lewycky    if (I->stripPointerCasts() != AI) continue;
4486d55f2269e20298a1d6a683be72d9552482156a9Nick Lewycky    if (isUsedByLifetimeMarker(*I))
4496d55f2269e20298a1d6a683be72d9552482156a9Nick Lewycky      return true;
4506d55f2269e20298a1d6a683be72d9552482156a9Nick Lewycky  }
4516d55f2269e20298a1d6a683be72d9552482156a9Nick Lewycky  return false;
4526d55f2269e20298a1d6a683be72d9552482156a9Nick Lewycky}
4536d55f2269e20298a1d6a683be72d9552482156a9Nick Lewycky
4542cf158ec4bf78f236976f07e09d7b1fe6be13994Devang Patel/// updateInlinedAtInfo - Helper function used by fixupLineNumbers to recursively
4552cf158ec4bf78f236976f07e09d7b1fe6be13994Devang Patel/// update InlinedAtEntry of a DebugLoc.
4562cf158ec4bf78f236976f07e09d7b1fe6be13994Devang Patelstatic DebugLoc updateInlinedAtInfo(const DebugLoc &DL,
4572cf158ec4bf78f236976f07e09d7b1fe6be13994Devang Patel                                    const DebugLoc &InlinedAtDL,
4582cf158ec4bf78f236976f07e09d7b1fe6be13994Devang Patel                                    LLVMContext &Ctx) {
4592cf158ec4bf78f236976f07e09d7b1fe6be13994Devang Patel  if (MDNode *IA = DL.getInlinedAt(Ctx)) {
4602cf158ec4bf78f236976f07e09d7b1fe6be13994Devang Patel    DebugLoc NewInlinedAtDL
4612cf158ec4bf78f236976f07e09d7b1fe6be13994Devang Patel      = updateInlinedAtInfo(DebugLoc::getFromDILocation(IA), InlinedAtDL, Ctx);
4622cf158ec4bf78f236976f07e09d7b1fe6be13994Devang Patel    return DebugLoc::get(DL.getLine(), DL.getCol(), DL.getScope(Ctx),
4632cf158ec4bf78f236976f07e09d7b1fe6be13994Devang Patel                         NewInlinedAtDL.getAsMDNode(Ctx));
4642cf158ec4bf78f236976f07e09d7b1fe6be13994Devang Patel  }
4652cf158ec4bf78f236976f07e09d7b1fe6be13994Devang Patel
4662cf158ec4bf78f236976f07e09d7b1fe6be13994Devang Patel  return DebugLoc::get(DL.getLine(), DL.getCol(), DL.getScope(Ctx),
4672cf158ec4bf78f236976f07e09d7b1fe6be13994Devang Patel                       InlinedAtDL.getAsMDNode(Ctx));
4682cf158ec4bf78f236976f07e09d7b1fe6be13994Devang Patel}
4692cf158ec4bf78f236976f07e09d7b1fe6be13994Devang Patel
4702cf158ec4bf78f236976f07e09d7b1fe6be13994Devang Patel/// fixupLineNumbers - Update inlined instructions' line numbers to
4712cf158ec4bf78f236976f07e09d7b1fe6be13994Devang Patel/// to encode location where these instructions are inlined.
4722cf158ec4bf78f236976f07e09d7b1fe6be13994Devang Patelstatic void fixupLineNumbers(Function *Fn, Function::iterator FI,
4732cf158ec4bf78f236976f07e09d7b1fe6be13994Devang Patel                              Instruction *TheCall) {
4742cf158ec4bf78f236976f07e09d7b1fe6be13994Devang Patel  DebugLoc TheCallDL = TheCall->getDebugLoc();
4752cf158ec4bf78f236976f07e09d7b1fe6be13994Devang Patel  if (TheCallDL.isUnknown())
4762cf158ec4bf78f236976f07e09d7b1fe6be13994Devang Patel    return;
4772cf158ec4bf78f236976f07e09d7b1fe6be13994Devang Patel
4782cf158ec4bf78f236976f07e09d7b1fe6be13994Devang Patel  for (; FI != Fn->end(); ++FI) {
4792cf158ec4bf78f236976f07e09d7b1fe6be13994Devang Patel    for (BasicBlock::iterator BI = FI->begin(), BE = FI->end();
4802cf158ec4bf78f236976f07e09d7b1fe6be13994Devang Patel         BI != BE; ++BI) {
4812cf158ec4bf78f236976f07e09d7b1fe6be13994Devang Patel      DebugLoc DL = BI->getDebugLoc();
482b549bcfe6c19dbb24162c75bbcc06d4a5fa90cb8Devang Patel      if (!DL.isUnknown()) {
4832cf158ec4bf78f236976f07e09d7b1fe6be13994Devang Patel        BI->setDebugLoc(updateInlinedAtInfo(DL, TheCallDL, BI->getContext()));
484b549bcfe6c19dbb24162c75bbcc06d4a5fa90cb8Devang Patel        if (DbgValueInst *DVI = dyn_cast<DbgValueInst>(BI)) {
485b549bcfe6c19dbb24162c75bbcc06d4a5fa90cb8Devang Patel          LLVMContext &Ctx = BI->getContext();
486b549bcfe6c19dbb24162c75bbcc06d4a5fa90cb8Devang Patel          MDNode *InlinedAt = BI->getDebugLoc().getInlinedAt(Ctx);
487b549bcfe6c19dbb24162c75bbcc06d4a5fa90cb8Devang Patel          DVI->setOperand(2, createInlinedVariable(DVI->getVariable(),
488b549bcfe6c19dbb24162c75bbcc06d4a5fa90cb8Devang Patel                                                   InlinedAt, Ctx));
489b549bcfe6c19dbb24162c75bbcc06d4a5fa90cb8Devang Patel        }
490b549bcfe6c19dbb24162c75bbcc06d4a5fa90cb8Devang Patel      }
4912cf158ec4bf78f236976f07e09d7b1fe6be13994Devang Patel    }
4922cf158ec4bf78f236976f07e09d7b1fe6be13994Devang Patel  }
4932cf158ec4bf78f236976f07e09d7b1fe6be13994Devang Patel}
4942cf158ec4bf78f236976f07e09d7b1fe6be13994Devang Patel
49506881e8734b1758fb0666f4e47a91bc58c6383beBill Wendling/// InlineFunction - This function inlines the called function into the basic
49606881e8734b1758fb0666f4e47a91bc58c6383beBill Wendling/// block of the caller.  This returns false if it is not possible to inline
49706881e8734b1758fb0666f4e47a91bc58c6383beBill Wendling/// this call.  The program is still in a well defined state if this occurs
49806881e8734b1758fb0666f4e47a91bc58c6383beBill Wendling/// though.
49906881e8734b1758fb0666f4e47a91bc58c6383beBill Wendling///
50006881e8734b1758fb0666f4e47a91bc58c6383beBill Wendling/// Note that this only does one level of inlining.  For example, if the
50106881e8734b1758fb0666f4e47a91bc58c6383beBill Wendling/// instruction 'call B' is inlined, and 'B' calls 'C', then the call to 'C' now
50206881e8734b1758fb0666f4e47a91bc58c6383beBill Wendling/// exists in the instruction stream.  Similarly this will inline a recursive
50306881e8734b1758fb0666f4e47a91bc58c6383beBill Wendling/// function by one level.
50460915146f4d35e12f10dcdaa155596fac79184daChris Lattnerbool llvm::InlineFunction(CallSite CS, InlineFunctionInfo &IFI) {
50580a38d245359cb0a3be8f78f5d7d911232886b9aChris Lattner  Instruction *TheCall = CS.getInstruction();
506e922c0201916e0b980ab3cfe91e1413e68d55647Owen Anderson  LLVMContext &Context = TheCall->getContext();
50780a38d245359cb0a3be8f78f5d7d911232886b9aChris Lattner  assert(TheCall->getParent() && TheCall->getParent()->getParent() &&
50880a38d245359cb0a3be8f78f5d7d911232886b9aChris Lattner         "Instruction not in function!");
509ca398dc3989d35e8516489fd163e012133bd41cbChris Lattner
51060915146f4d35e12f10dcdaa155596fac79184daChris Lattner  // If IFI has any state in it, zap it before we fill it in.
51160915146f4d35e12f10dcdaa155596fac79184daChris Lattner  IFI.reset();
51260915146f4d35e12f10dcdaa155596fac79184daChris Lattner
51380a38d245359cb0a3be8f78f5d7d911232886b9aChris Lattner  const Function *CalledFunc = CS.getCalledFunction();
514ca398dc3989d35e8516489fd163e012133bd41cbChris Lattner  if (CalledFunc == 0 ||          // Can't inline external function or indirect
5155cbf985dcbc89fba3208e7baf8b6f488b06d3ec9Reid Spencer      CalledFunc->isDeclaration() || // call, or call to a vararg function!
5160623e90398153be61226ad19f1b40d3817874526Eric Christopher      CalledFunc->getFunctionType()->isVarArg()) return false;
517ca398dc3989d35e8516489fd163e012133bd41cbChris Lattner
518af9985c6b9d066cb70a0363fed699022d0ec196cChris Lattner  // If the call to the callee is not a tail call, we must clear the 'tail'
5191b49141821e98e4321bfe6234c7001c836b2a289Chris Lattner  // flags on any calls that we inline.
5201b49141821e98e4321bfe6234c7001c836b2a289Chris Lattner  bool MustClearTailCallFlags =
521af9985c6b9d066cb70a0363fed699022d0ec196cChris Lattner    !(isa<CallInst>(TheCall) && cast<CallInst>(TheCall)->isTailCall());
5221b49141821e98e4321bfe6234c7001c836b2a289Chris Lattner
523f0c3354d998507515ab39e26b5292ea0ceb06aefDuncan Sands  // If the call to the callee cannot throw, set the 'nounwind' flag on any
524f0c3354d998507515ab39e26b5292ea0ceb06aefDuncan Sands  // calls that we inline.
525f0c3354d998507515ab39e26b5292ea0ceb06aefDuncan Sands  bool MarkNoUnwind = CS.doesNotThrow();
526f0c3354d998507515ab39e26b5292ea0ceb06aefDuncan Sands
52780a38d245359cb0a3be8f78f5d7d911232886b9aChris Lattner  BasicBlock *OrigBB = TheCall->getParent();
528ca398dc3989d35e8516489fd163e012133bd41cbChris Lattner  Function *Caller = OrigBB->getParent();
529ca398dc3989d35e8516489fd163e012133bd41cbChris Lattner
5300e13821c96937830ec817f08095c3cef1fdcac8dGordon Henriksen  // GC poses two hazards to inlining, which only occur when the callee has GC:
5310e13821c96937830ec817f08095c3cef1fdcac8dGordon Henriksen  //  1. If the caller has no GC, then the callee's GC must be propagated to the
5320e13821c96937830ec817f08095c3cef1fdcac8dGordon Henriksen  //     caller.
5330e13821c96937830ec817f08095c3cef1fdcac8dGordon Henriksen  //  2. If the caller has a differing GC, it is invalid to inline.
5345eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen  if (CalledFunc->hasGC()) {
5355eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen    if (!Caller->hasGC())
5365eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen      Caller->setGC(CalledFunc->getGC());
5375eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen    else if (CalledFunc->getGC() != Caller->getGC())
5380e13821c96937830ec817f08095c3cef1fdcac8dGordon Henriksen      return false;
5390e13821c96937830ec817f08095c3cef1fdcac8dGordon Henriksen  }
540a7212e58260f6d1ead0c4eec7af400cf6c0d289eDuncan Sands
54130fe1ae20d02ac8e12cec9d767d855946546a030Benjamin Kramer  // Get the personality function from the callee if it contains a landing pad.
54230fe1ae20d02ac8e12cec9d767d855946546a030Benjamin Kramer  Value *CalleePersonality = 0;
54330fe1ae20d02ac8e12cec9d767d855946546a030Benjamin Kramer  for (Function::const_iterator I = CalledFunc->begin(), E = CalledFunc->end();
54430fe1ae20d02ac8e12cec9d767d855946546a030Benjamin Kramer       I != E; ++I)
545fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling    if (const InvokeInst *II = dyn_cast<InvokeInst>(I->getTerminator())) {
546fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling      const BasicBlock *BB = II->getUnwindDest();
54727b5658affba5b12b396048d2cc598c70719bfc5Bill Wendling      const LandingPadInst *LP = BB->getLandingPadInst();
54827b5658affba5b12b396048d2cc598c70719bfc5Bill Wendling      CalleePersonality = LP->getPersonalityFn();
549fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling      break;
550fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling    }
551fe7a071a19ca6781c774c392c82341bdf14df104Bill Wendling
55230fe1ae20d02ac8e12cec9d767d855946546a030Benjamin Kramer  // Find the personality function used by the landing pads of the caller. If it
55330fe1ae20d02ac8e12cec9d767d855946546a030Benjamin Kramer  // exists, then check to see that it matches the personality function used in
55430fe1ae20d02ac8e12cec9d767d855946546a030Benjamin Kramer  // the callee.
55506881e8734b1758fb0666f4e47a91bc58c6383beBill Wendling  if (CalleePersonality) {
55630fe1ae20d02ac8e12cec9d767d855946546a030Benjamin Kramer    for (Function::const_iterator I = Caller->begin(), E = Caller->end();
55730fe1ae20d02ac8e12cec9d767d855946546a030Benjamin Kramer         I != E; ++I)
55830fe1ae20d02ac8e12cec9d767d855946546a030Benjamin Kramer      if (const InvokeInst *II = dyn_cast<InvokeInst>(I->getTerminator())) {
55930fe1ae20d02ac8e12cec9d767d855946546a030Benjamin Kramer        const BasicBlock *BB = II->getUnwindDest();
56027b5658affba5b12b396048d2cc598c70719bfc5Bill Wendling        const LandingPadInst *LP = BB->getLandingPadInst();
56130fe1ae20d02ac8e12cec9d767d855946546a030Benjamin Kramer
56230fe1ae20d02ac8e12cec9d767d855946546a030Benjamin Kramer        // If the personality functions match, then we can perform the
56330fe1ae20d02ac8e12cec9d767d855946546a030Benjamin Kramer        // inlining. Otherwise, we can't inline.
56430fe1ae20d02ac8e12cec9d767d855946546a030Benjamin Kramer        // TODO: This isn't 100% true. Some personality functions are proper
56530fe1ae20d02ac8e12cec9d767d855946546a030Benjamin Kramer        //       supersets of others and can be used in place of the other.
56630fe1ae20d02ac8e12cec9d767d855946546a030Benjamin Kramer        if (LP->getPersonalityFn() != CalleePersonality)
56730fe1ae20d02ac8e12cec9d767d855946546a030Benjamin Kramer          return false;
56830fe1ae20d02ac8e12cec9d767d855946546a030Benjamin Kramer
56930fe1ae20d02ac8e12cec9d767d855946546a030Benjamin Kramer        break;
57030fe1ae20d02ac8e12cec9d767d855946546a030Benjamin Kramer      }
57106881e8734b1758fb0666f4e47a91bc58c6383beBill Wendling  }
57230fe1ae20d02ac8e12cec9d767d855946546a030Benjamin Kramer
5735052c911ec1be51ecb36e7f025c26412e9f1bfacChris Lattner  // Get an iterator to the last basic block in the function, which will have
5745052c911ec1be51ecb36e7f025c26412e9f1bfacChris Lattner  // the new function inlined after it.
5755052c911ec1be51ecb36e7f025c26412e9f1bfacChris Lattner  Function::iterator LastBlock = &Caller->back();
5765052c911ec1be51ecb36e7f025c26412e9f1bfacChris Lattner
5775e923dee6024248f58fa83a7c7299437f44f0d1aChris Lattner  // Make sure to capture all of the return instructions from the cloned
5785e923dee6024248f58fa83a7c7299437f44f0d1aChris Lattner  // function.
579ec1bea0d94372985a0a5eb283e644c6d0dd345dcChris Lattner  SmallVector<ReturnInst*, 8> Returns;
580cd4d339ec187182c9abc22b80560349f8ba5010fChris Lattner  ClonedCodeInfo InlinedFunctionInfo;
5810744f09efc53d3352ac1caffc61f6e8239201c3bDale Johannesen  Function::iterator FirstNewBlock;
582f0c3354d998507515ab39e26b5292ea0ceb06aefDuncan Sands
58329d3dd8a64791031eea00ffbae51843dc9982df9Devang Patel  { // Scope to destroy VMap after cloning.
5841ed219a9d2279ce5a5bbcf16d9b7ccc05cce638cRafael Espindola    ValueToValueMapTy VMap;
5855b5bc3032f97cfa7bfa3e22282d3a9c1ed05eec6Chris Lattner
5869614fcc640eb628cc5dfddb277ebae9f6cb61014Dan Gohman    assert(CalledFunc->arg_size() == CS.arg_size() &&
5875e923dee6024248f58fa83a7c7299437f44f0d1aChris Lattner           "No varargs calls can be inlined!");
588a7212e58260f6d1ead0c4eec7af400cf6c0d289eDuncan Sands
589c93adca35856d0eaae088e52ba30cfefbd7ad910Chris Lattner    // Calculate the vector of arguments to pass into the function cloner, which
590c93adca35856d0eaae088e52ba30cfefbd7ad910Chris Lattner    // matches up the formal to the actual argument values.
5915e923dee6024248f58fa83a7c7299437f44f0d1aChris Lattner    CallSite::arg_iterator AI = CS.arg_begin();
592c93adca35856d0eaae088e52ba30cfefbd7ad910Chris Lattner    unsigned ArgNo = 0;
593e4d5c441e04bdc00ccf1804744af670655123b07Chris Lattner    for (Function::const_arg_iterator I = CalledFunc->arg_begin(),
594c93adca35856d0eaae088e52ba30cfefbd7ad910Chris Lattner         E = CalledFunc->arg_end(); I != E; ++I, ++AI, ++ArgNo) {
595c93adca35856d0eaae088e52ba30cfefbd7ad910Chris Lattner      Value *ActualArg = *AI;
596a7212e58260f6d1ead0c4eec7af400cf6c0d289eDuncan Sands
597d82375c1c43db7f823dd4660d3495e76566699e3Duncan Sands      // When byval arguments actually inlined, we need to make the copy implied
598d82375c1c43db7f823dd4660d3495e76566699e3Duncan Sands      // by them explicit.  However, we don't do this if the callee is readonly
599d82375c1c43db7f823dd4660d3495e76566699e3Duncan Sands      // or readnone, because the copy would be unneeded: the callee doesn't
600d82375c1c43db7f823dd4660d3495e76566699e3Duncan Sands      // modify the struct.
601173862e5468fbcf4b022b9088d2c81b25c2d60c5Nick Lewycky      if (CS.isByValArgument(ArgNo)) {
602e7ae705c32906979a527926864345016e76867b9Chris Lattner        ActualArg = HandleByValArgument(ActualArg, TheCall, CalledFunc, IFI,
603e7ae705c32906979a527926864345016e76867b9Chris Lattner                                        CalledFunc->getParamAlignment(ArgNo+1));
604e7ae705c32906979a527926864345016e76867b9Chris Lattner
6052914ba6ec793e2bb0e9ca5891af1d29ee2fee28eDuncan Sands        // Calls that we inline may use the new alloca, so we need to clear
606e7ae705c32906979a527926864345016e76867b9Chris Lattner        // their 'tail' flags if HandleByValArgument introduced a new alloca and
607e7ae705c32906979a527926864345016e76867b9Chris Lattner        // the callee has calls.
608e7ae705c32906979a527926864345016e76867b9Chris Lattner        MustClearTailCallFlags |= ActualArg != *AI;
609c93adca35856d0eaae088e52ba30cfefbd7ad910Chris Lattner      }
610a7212e58260f6d1ead0c4eec7af400cf6c0d289eDuncan Sands
61129d3dd8a64791031eea00ffbae51843dc9982df9Devang Patel      VMap[I] = ActualArg;
612c93adca35856d0eaae088e52ba30cfefbd7ad910Chris Lattner    }
613fd93908ae8b9684fe71c239e3c6cfe13ff6a2663Misha Brukman
6145b5bc3032f97cfa7bfa3e22282d3a9c1ed05eec6Chris Lattner    // We want the inliner to prune the code as it copies.  We would LOVE to
6155b5bc3032f97cfa7bfa3e22282d3a9c1ed05eec6Chris Lattner    // have no dead or constant instructions leftover after inlining occurs
6165b5bc3032f97cfa7bfa3e22282d3a9c1ed05eec6Chris Lattner    // (which can happen, e.g., because an argument was constant), but we'll be
6175b5bc3032f97cfa7bfa3e22282d3a9c1ed05eec6Chris Lattner    // happy with whatever the cloner can do.
6186cb8c23db1c3becdce6dfbf1b7f1677faca4251eDan Gohman    CloneAndPruneFunctionInto(Caller, CalledFunc, VMap,
6196cb8c23db1c3becdce6dfbf1b7f1677faca4251eDan Gohman                              /*ModuleLevelChanges=*/false, Returns, ".i",
62060915146f4d35e12f10dcdaa155596fac79184daChris Lattner                              &InlinedFunctionInfo, IFI.TD, TheCall);
621a7212e58260f6d1ead0c4eec7af400cf6c0d289eDuncan Sands
622d85340f4ec587e22b0239617f3b747a6df113894Chris Lattner    // Remember the first block that is newly cloned over.
623d85340f4ec587e22b0239617f3b747a6df113894Chris Lattner    FirstNewBlock = LastBlock; ++FirstNewBlock;
624a7212e58260f6d1ead0c4eec7af400cf6c0d289eDuncan Sands
625d85340f4ec587e22b0239617f3b747a6df113894Chris Lattner    // Update the callgraph if requested.
62660915146f4d35e12f10dcdaa155596fac79184daChris Lattner    if (IFI.CG)
62729d3dd8a64791031eea00ffbae51843dc9982df9Devang Patel      UpdateCallGraphAfterInlining(CS, FirstNewBlock, VMap, IFI);
6282cf158ec4bf78f236976f07e09d7b1fe6be13994Devang Patel
6292cf158ec4bf78f236976f07e09d7b1fe6be13994Devang Patel    // Update inlined instructions' line number information.
6302cf158ec4bf78f236976f07e09d7b1fe6be13994Devang Patel    fixupLineNumbers(Caller, FirstNewBlock, TheCall);
631fd93908ae8b9684fe71c239e3c6cfe13ff6a2663Misha Brukman  }
632a7212e58260f6d1ead0c4eec7af400cf6c0d289eDuncan Sands
633ca398dc3989d35e8516489fd163e012133bd41cbChris Lattner  // If there are any alloca instructions in the block that used to be the entry
634ca398dc3989d35e8516489fd163e012133bd41cbChris Lattner  // block for the callee, move them to the entry block of the caller.  First
635ca398dc3989d35e8516489fd163e012133bd41cbChris Lattner  // calculate which instruction they should be inserted before.  We insert the
636ca398dc3989d35e8516489fd163e012133bd41cbChris Lattner  // instructions at the end of the current alloca list.
63721f20558d629f7ff8f64c20746d890d29328a544Chris Lattner  {
63880a38d245359cb0a3be8f78f5d7d911232886b9aChris Lattner    BasicBlock::iterator InsertPoint = Caller->begin()->begin();
6395e923dee6024248f58fa83a7c7299437f44f0d1aChris Lattner    for (BasicBlock::iterator I = FirstNewBlock->begin(),
640135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner         E = FirstNewBlock->end(); I != E; ) {
641135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner      AllocaInst *AI = dyn_cast<AllocaInst>(I++);
642135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner      if (AI == 0) continue;
643135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner
644135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner      // If the alloca is now dead, remove it.  This often occurs due to code
645135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner      // specialization.
646135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner      if (AI->use_empty()) {
647135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner        AI->eraseFromParent();
648135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner        continue;
64933bb3c8be355d179ece8e751f6e0f0978d0dd038Chris Lattner      }
650135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner
651135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner      if (!isa<Constant>(AI->getArraySize()))
652135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner        continue;
653135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner
65439add23dc54a1580983b1901384688d6622daa3bChris Lattner      // Keep track of the static allocas that we inline into the caller.
65560915146f4d35e12f10dcdaa155596fac79184daChris Lattner      IFI.StaticAllocas.push_back(AI);
6568f2718fbef6177966ff807af0732eb2431bd9a5fChris Lattner
657135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner      // Scan for the block of allocas that we can move over, and move them
658135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner      // all at once.
659135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner      while (isa<AllocaInst>(I) &&
6608f2718fbef6177966ff807af0732eb2431bd9a5fChris Lattner             isa<Constant>(cast<AllocaInst>(I)->getArraySize())) {
66160915146f4d35e12f10dcdaa155596fac79184daChris Lattner        IFI.StaticAllocas.push_back(cast<AllocaInst>(I));
662135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner        ++I;
6638f2718fbef6177966ff807af0732eb2431bd9a5fChris Lattner      }
664135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner
665135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner      // Transfer all of the allocas over in a block.  Using splice means
666135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner      // that the instructions aren't removed from the symbol table, then
667135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner      // reinserted.
668135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner      Caller->getEntryBlock().getInstList().splice(InsertPoint,
669135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner                                                   FirstNewBlock->getInstList(),
670135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner                                                   AI, I);
671135755dae4c3fa8003b76150689d5064aa4612eeChris Lattner    }
67280a38d245359cb0a3be8f78f5d7d911232886b9aChris Lattner  }
67380a38d245359cb0a3be8f78f5d7d911232886b9aChris Lattner
6746d55f2269e20298a1d6a683be72d9552482156a9Nick Lewycky  // Leave lifetime markers for the static alloca's, scoping them to the
6756d55f2269e20298a1d6a683be72d9552482156a9Nick Lewycky  // function we just inlined.
6766d55f2269e20298a1d6a683be72d9552482156a9Nick Lewycky  if (!IFI.StaticAllocas.empty()) {
6776d55f2269e20298a1d6a683be72d9552482156a9Nick Lewycky    IRBuilder<> builder(FirstNewBlock->begin());
6786d55f2269e20298a1d6a683be72d9552482156a9Nick Lewycky    for (unsigned ai = 0, ae = IFI.StaticAllocas.size(); ai != ae; ++ai) {
6796d55f2269e20298a1d6a683be72d9552482156a9Nick Lewycky      AllocaInst *AI = IFI.StaticAllocas[ai];
6806d55f2269e20298a1d6a683be72d9552482156a9Nick Lewycky
6816d55f2269e20298a1d6a683be72d9552482156a9Nick Lewycky      // If the alloca is already scoped to something smaller than the whole
6826d55f2269e20298a1d6a683be72d9552482156a9Nick Lewycky      // function then there's no need to add redundant, less accurate markers.
6836d55f2269e20298a1d6a683be72d9552482156a9Nick Lewycky      if (hasLifetimeMarkers(AI))
6846d55f2269e20298a1d6a683be72d9552482156a9Nick Lewycky        continue;
6856d55f2269e20298a1d6a683be72d9552482156a9Nick Lewycky
686e669d83a21d7ebf01d3c9e37a20c7348b5a77c11John McCall      builder.CreateLifetimeStart(AI);
6876d55f2269e20298a1d6a683be72d9552482156a9Nick Lewycky      for (unsigned ri = 0, re = Returns.size(); ri != re; ++ri) {
6886d55f2269e20298a1d6a683be72d9552482156a9Nick Lewycky        IRBuilder<> builder(Returns[ri]);
689e669d83a21d7ebf01d3c9e37a20c7348b5a77c11John McCall        builder.CreateLifetimeEnd(AI);
6906d55f2269e20298a1d6a683be72d9552482156a9Nick Lewycky      }
6916d55f2269e20298a1d6a683be72d9552482156a9Nick Lewycky    }
6926d55f2269e20298a1d6a683be72d9552482156a9Nick Lewycky  }
6936d55f2269e20298a1d6a683be72d9552482156a9Nick Lewycky
694bf229f488a7541abd979cc3fbe9c3ce1c100e5c0Chris Lattner  // If the inlined code contained dynamic alloca instructions, wrap the inlined
695bf229f488a7541abd979cc3fbe9c3ce1c100e5c0Chris Lattner  // code with llvm.stacksave/llvm.stackrestore intrinsics.
696bf229f488a7541abd979cc3fbe9c3ce1c100e5c0Chris Lattner  if (InlinedFunctionInfo.ContainsDynamicAllocas) {
697bf229f488a7541abd979cc3fbe9c3ce1c100e5c0Chris Lattner    Module *M = Caller->getParent();
698bf229f488a7541abd979cc3fbe9c3ce1c100e5c0Chris Lattner    // Get the two intrinsics we care about.
6996128df525501c333a650d097703c18d7e878f5e8Chris Lattner    Function *StackSave = Intrinsic::getDeclaration(M, Intrinsic::stacksave);
7006128df525501c333a650d097703c18d7e878f5e8Chris Lattner    Function *StackRestore=Intrinsic::getDeclaration(M,Intrinsic::stackrestore);
701d85340f4ec587e22b0239617f3b747a6df113894Chris Lattner
702bf229f488a7541abd979cc3fbe9c3ce1c100e5c0Chris Lattner    // Insert the llvm.stacksave.
703c975a51ac042eb15bcb04a293cb737810ff40a00John McCall    CallInst *SavedPtr = IRBuilder<>(FirstNewBlock, FirstNewBlock->begin())
704c975a51ac042eb15bcb04a293cb737810ff40a00John McCall      .CreateCall(StackSave, "savedstack");
705a7212e58260f6d1ead0c4eec7af400cf6c0d289eDuncan Sands
706bf229f488a7541abd979cc3fbe9c3ce1c100e5c0Chris Lattner    // Insert a call to llvm.stackrestore before any return instructions in the
707bf229f488a7541abd979cc3fbe9c3ce1c100e5c0Chris Lattner    // inlined function.
708d85340f4ec587e22b0239617f3b747a6df113894Chris Lattner    for (unsigned i = 0, e = Returns.size(); i != e; ++i) {
709c975a51ac042eb15bcb04a293cb737810ff40a00John McCall      IRBuilder<>(Returns[i]).CreateCall(StackRestore, SavedPtr);
710d85340f4ec587e22b0239617f3b747a6df113894Chris Lattner    }
711468fb1df7db466e5682ee44341c3990b599e8d6aChris Lattner
712468fb1df7db466e5682ee44341c3990b599e8d6aChris Lattner    // Count the number of StackRestore calls we insert.
713468fb1df7db466e5682ee44341c3990b599e8d6aChris Lattner    unsigned NumStackRestores = Returns.size();
714a7212e58260f6d1ead0c4eec7af400cf6c0d289eDuncan Sands
715bf229f488a7541abd979cc3fbe9c3ce1c100e5c0Chris Lattner    // If we are inlining an invoke instruction, insert restores before each
716bf229f488a7541abd979cc3fbe9c3ce1c100e5c0Chris Lattner    // unwind.  These unwinds will be rewritten into branches later.
717bf229f488a7541abd979cc3fbe9c3ce1c100e5c0Chris Lattner    if (InlinedFunctionInfo.ContainsUnwinds && isa<InvokeInst>(TheCall)) {
718bf229f488a7541abd979cc3fbe9c3ce1c100e5c0Chris Lattner      for (Function::iterator BB = FirstNewBlock, E = Caller->end();
719bf229f488a7541abd979cc3fbe9c3ce1c100e5c0Chris Lattner           BB != E; ++BB)
720468fb1df7db466e5682ee44341c3990b599e8d6aChris Lattner        if (UnwindInst *UI = dyn_cast<UnwindInst>(BB->getTerminator())) {
721c975a51ac042eb15bcb04a293cb737810ff40a00John McCall          IRBuilder<>(UI).CreateCall(StackRestore, SavedPtr);
722468fb1df7db466e5682ee44341c3990b599e8d6aChris Lattner          ++NumStackRestores;
723468fb1df7db466e5682ee44341c3990b599e8d6aChris Lattner        }
724468fb1df7db466e5682ee44341c3990b599e8d6aChris Lattner    }
725bf229f488a7541abd979cc3fbe9c3ce1c100e5c0Chris Lattner  }
726bf229f488a7541abd979cc3fbe9c3ce1c100e5c0Chris Lattner
727a7212e58260f6d1ead0c4eec7af400cf6c0d289eDuncan Sands  // If we are inlining tail call instruction through a call site that isn't
7281fdf4a859f03ce5aa4ce9acba29ce321c847388eChris Lattner  // marked 'tail', we must remove the tail marker for any calls in the inlined
729f0c3354d998507515ab39e26b5292ea0ceb06aefDuncan Sands  // code.  Also, calls inlined through a 'nounwind' call site should be marked
730f0c3354d998507515ab39e26b5292ea0ceb06aefDuncan Sands  // 'nounwind'.
731f0c3354d998507515ab39e26b5292ea0ceb06aefDuncan Sands  if (InlinedFunctionInfo.ContainsCalls &&
732f0c3354d998507515ab39e26b5292ea0ceb06aefDuncan Sands      (MustClearTailCallFlags || MarkNoUnwind)) {
7331b49141821e98e4321bfe6234c7001c836b2a289Chris Lattner    for (Function::iterator BB = FirstNewBlock, E = Caller->end();
7341b49141821e98e4321bfe6234c7001c836b2a289Chris Lattner         BB != E; ++BB)
7351b49141821e98e4321bfe6234c7001c836b2a289Chris Lattner      for (BasicBlock::iterator I = BB->begin(), E = BB->end(); I != E; ++I)
736f0c3354d998507515ab39e26b5292ea0ceb06aefDuncan Sands        if (CallInst *CI = dyn_cast<CallInst>(I)) {
737f0c3354d998507515ab39e26b5292ea0ceb06aefDuncan Sands          if (MustClearTailCallFlags)
738f0c3354d998507515ab39e26b5292ea0ceb06aefDuncan Sands            CI->setTailCall(false);
739f0c3354d998507515ab39e26b5292ea0ceb06aefDuncan Sands          if (MarkNoUnwind)
740f0c3354d998507515ab39e26b5292ea0ceb06aefDuncan Sands            CI->setDoesNotThrow();
741f0c3354d998507515ab39e26b5292ea0ceb06aefDuncan Sands        }
7421b49141821e98e4321bfe6234c7001c836b2a289Chris Lattner  }
7431b49141821e98e4321bfe6234c7001c836b2a289Chris Lattner
744f0c3354d998507515ab39e26b5292ea0ceb06aefDuncan Sands  // If we are inlining through a 'nounwind' call site then any inlined 'unwind'
745f0c3354d998507515ab39e26b5292ea0ceb06aefDuncan Sands  // instructions are unreachable.
746f0c3354d998507515ab39e26b5292ea0ceb06aefDuncan Sands  if (InlinedFunctionInfo.ContainsUnwinds && MarkNoUnwind)
747f0c3354d998507515ab39e26b5292ea0ceb06aefDuncan Sands    for (Function::iterator BB = FirstNewBlock, E = Caller->end();
748f0c3354d998507515ab39e26b5292ea0ceb06aefDuncan Sands         BB != E; ++BB) {
749f0c3354d998507515ab39e26b5292ea0ceb06aefDuncan Sands      TerminatorInst *Term = BB->getTerminator();
750f0c3354d998507515ab39e26b5292ea0ceb06aefDuncan Sands      if (isa<UnwindInst>(Term)) {
7511d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson        new UnreachableInst(Context, Term);
752f0c3354d998507515ab39e26b5292ea0ceb06aefDuncan Sands        BB->getInstList().erase(Term);
753f0c3354d998507515ab39e26b5292ea0ceb06aefDuncan Sands      }
754f0c3354d998507515ab39e26b5292ea0ceb06aefDuncan Sands    }
755f0c3354d998507515ab39e26b5292ea0ceb06aefDuncan Sands
7565e923dee6024248f58fa83a7c7299437f44f0d1aChris Lattner  // If we are inlining for an invoke instruction, we must make sure to rewrite
7575e923dee6024248f58fa83a7c7299437f44f0d1aChris Lattner  // any inlined 'unwind' instructions into branches to the invoke exception
7585e923dee6024248f58fa83a7c7299437f44f0d1aChris Lattner  // destination, and call instructions into invoke instructions.
759cd4d339ec187182c9abc22b80560349f8ba5010fChris Lattner  if (InvokeInst *II = dyn_cast<InvokeInst>(TheCall))
76081dfb3885252fbf621b080827a080099864415f8Chris Lattner    HandleInlinedInvoke(II, FirstNewBlock, InlinedFunctionInfo);
7615e923dee6024248f58fa83a7c7299437f44f0d1aChris Lattner
76244a6807f4f785ecdd96b3aa67dad056677131b98Chris Lattner  // If we cloned in _exactly one_ basic block, and if that block ends in a
76344a6807f4f785ecdd96b3aa67dad056677131b98Chris Lattner  // return instruction, we splice the body of the inlined callee directly into
76444a6807f4f785ecdd96b3aa67dad056677131b98Chris Lattner  // the calling basic block.
76544a6807f4f785ecdd96b3aa67dad056677131b98Chris Lattner  if (Returns.size() == 1 && std::distance(FirstNewBlock, Caller->end()) == 1) {
76644a6807f4f785ecdd96b3aa67dad056677131b98Chris Lattner    // Move all of the instructions right before the call.
76744a6807f4f785ecdd96b3aa67dad056677131b98Chris Lattner    OrigBB->getInstList().splice(TheCall, FirstNewBlock->getInstList(),
76844a6807f4f785ecdd96b3aa67dad056677131b98Chris Lattner                                 FirstNewBlock->begin(), FirstNewBlock->end());
76944a6807f4f785ecdd96b3aa67dad056677131b98Chris Lattner    // Remove the cloned basic block.
77044a6807f4f785ecdd96b3aa67dad056677131b98Chris Lattner    Caller->getBasicBlockList().pop_back();
771fd93908ae8b9684fe71c239e3c6cfe13ff6a2663Misha Brukman
77244a6807f4f785ecdd96b3aa67dad056677131b98Chris Lattner    // If the call site was an invoke instruction, add a branch to the normal
77344a6807f4f785ecdd96b3aa67dad056677131b98Chris Lattner    // destination.
77444a6807f4f785ecdd96b3aa67dad056677131b98Chris Lattner    if (InvokeInst *II = dyn_cast<InvokeInst>(TheCall))
775051a950000e21935165db56695e35bade668193bGabor Greif      BranchInst::Create(II->getNormalDest(), TheCall);
77644a6807f4f785ecdd96b3aa67dad056677131b98Chris Lattner
77744a6807f4f785ecdd96b3aa67dad056677131b98Chris Lattner    // If the return instruction returned a value, replace uses of the call with
77844a6807f4f785ecdd96b3aa67dad056677131b98Chris Lattner    // uses of the returned value.
779dc00d42bb18a6748f43c365d9bd30c1ed0e800acDevang Patel    if (!TheCall->use_empty()) {
780dc00d42bb18a6748f43c365d9bd30c1ed0e800acDevang Patel      ReturnInst *R = Returns[0];
7815877ad7e90de2179c15914ff9e8f1c72152cac30Eli Friedman      if (TheCall == R->getReturnValue())
7829e9a0d5fc26878e51a58a8b57900fcbf952c2691Owen Anderson        TheCall->replaceAllUsesWith(UndefValue::get(TheCall->getType()));
7835877ad7e90de2179c15914ff9e8f1c72152cac30Eli Friedman      else
7845877ad7e90de2179c15914ff9e8f1c72152cac30Eli Friedman        TheCall->replaceAllUsesWith(R->getReturnValue());
785dc00d42bb18a6748f43c365d9bd30c1ed0e800acDevang Patel    }
78644a6807f4f785ecdd96b3aa67dad056677131b98Chris Lattner    // Since we are now done with the Call/Invoke, we can delete it.
7871adec83ae84031bfa9f0bf209c5ee6c64906a1ffDan Gohman    TheCall->eraseFromParent();
78844a6807f4f785ecdd96b3aa67dad056677131b98Chris Lattner
78944a6807f4f785ecdd96b3aa67dad056677131b98Chris Lattner    // Since we are now done with the return instruction, delete it also.
7901adec83ae84031bfa9f0bf209c5ee6c64906a1ffDan Gohman    Returns[0]->eraseFromParent();
79144a6807f4f785ecdd96b3aa67dad056677131b98Chris Lattner
79244a6807f4f785ecdd96b3aa67dad056677131b98Chris Lattner    // We are now done with the inlining.
79344a6807f4f785ecdd96b3aa67dad056677131b98Chris Lattner    return true;
79444a6807f4f785ecdd96b3aa67dad056677131b98Chris Lattner  }
79544a6807f4f785ecdd96b3aa67dad056677131b98Chris Lattner
79644a6807f4f785ecdd96b3aa67dad056677131b98Chris Lattner  // Otherwise, we have the normal case, of more than one block to inline or
79744a6807f4f785ecdd96b3aa67dad056677131b98Chris Lattner  // multiple return sites.
79844a6807f4f785ecdd96b3aa67dad056677131b98Chris Lattner
7995e923dee6024248f58fa83a7c7299437f44f0d1aChris Lattner  // We want to clone the entire callee function into the hole between the
8005e923dee6024248f58fa83a7c7299437f44f0d1aChris Lattner  // "starter" and "ender" blocks.  How we accomplish this depends on whether
8015e923dee6024248f58fa83a7c7299437f44f0d1aChris Lattner  // this is an invoke instruction or a call instruction.
8025e923dee6024248f58fa83a7c7299437f44f0d1aChris Lattner  BasicBlock *AfterCallBB;
8035e923dee6024248f58fa83a7c7299437f44f0d1aChris Lattner  if (InvokeInst *II = dyn_cast<InvokeInst>(TheCall)) {
804fd93908ae8b9684fe71c239e3c6cfe13ff6a2663Misha Brukman
8055e923dee6024248f58fa83a7c7299437f44f0d1aChris Lattner    // Add an unconditional branch to make this look like the CallInst case...
806051a950000e21935165db56695e35bade668193bGabor Greif    BranchInst *NewBr = BranchInst::Create(II->getNormalDest(), TheCall);
807fd93908ae8b9684fe71c239e3c6cfe13ff6a2663Misha Brukman
8085e923dee6024248f58fa83a7c7299437f44f0d1aChris Lattner    // Split the basic block.  This guarantees that no PHI nodes will have to be
8095e923dee6024248f58fa83a7c7299437f44f0d1aChris Lattner    // updated due to new incoming edges, and make the invoke case more
8105e923dee6024248f58fa83a7c7299437f44f0d1aChris Lattner    // symmetric to the call case.
8115e923dee6024248f58fa83a7c7299437f44f0d1aChris Lattner    AfterCallBB = OrigBB->splitBasicBlock(NewBr,
812284d1b88273eb1967c8faef407f1167791c760e0Chris Lattner                                          CalledFunc->getName()+".exit");
813fd93908ae8b9684fe71c239e3c6cfe13ff6a2663Misha Brukman
8145e923dee6024248f58fa83a7c7299437f44f0d1aChris Lattner  } else {  // It's a call
81544a6807f4f785ecdd96b3aa67dad056677131b98Chris Lattner    // If this is a call instruction, we need to split the basic block that
81644a6807f4f785ecdd96b3aa67dad056677131b98Chris Lattner    // the call lives in.
8175e923dee6024248f58fa83a7c7299437f44f0d1aChris Lattner    //
8185e923dee6024248f58fa83a7c7299437f44f0d1aChris Lattner    AfterCallBB = OrigBB->splitBasicBlock(TheCall,
819284d1b88273eb1967c8faef407f1167791c760e0Chris Lattner                                          CalledFunc->getName()+".exit");
8205e923dee6024248f58fa83a7c7299437f44f0d1aChris Lattner  }
8215e923dee6024248f58fa83a7c7299437f44f0d1aChris Lattner
82244a6807f4f785ecdd96b3aa67dad056677131b98Chris Lattner  // Change the branch that used to go to AfterCallBB to branch to the first
82344a6807f4f785ecdd96b3aa67dad056677131b98Chris Lattner  // basic block of the inlined function.
82444a6807f4f785ecdd96b3aa67dad056677131b98Chris Lattner  //
82544a6807f4f785ecdd96b3aa67dad056677131b98Chris Lattner  TerminatorInst *Br = OrigBB->getTerminator();
826fd93908ae8b9684fe71c239e3c6cfe13ff6a2663Misha Brukman  assert(Br && Br->getOpcode() == Instruction::Br &&
82744a6807f4f785ecdd96b3aa67dad056677131b98Chris Lattner         "splitBasicBlock broken!");
82844a6807f4f785ecdd96b3aa67dad056677131b98Chris Lattner  Br->setOperand(0, FirstNewBlock);
82944a6807f4f785ecdd96b3aa67dad056677131b98Chris Lattner
83044a6807f4f785ecdd96b3aa67dad056677131b98Chris Lattner
83144a6807f4f785ecdd96b3aa67dad056677131b98Chris Lattner  // Now that the function is correct, make it a little bit nicer.  In
83244a6807f4f785ecdd96b3aa67dad056677131b98Chris Lattner  // particular, move the basic blocks inserted from the end of the function
83344a6807f4f785ecdd96b3aa67dad056677131b98Chris Lattner  // into the space made by splitting the source basic block.
83444a6807f4f785ecdd96b3aa67dad056677131b98Chris Lattner  Caller->getBasicBlockList().splice(AfterCallBB, Caller->getBasicBlockList(),
83544a6807f4f785ecdd96b3aa67dad056677131b98Chris Lattner                                     FirstNewBlock, Caller->end());
83644a6807f4f785ecdd96b3aa67dad056677131b98Chris Lattner
8375e923dee6024248f58fa83a7c7299437f44f0d1aChris Lattner  // Handle all of the return instructions that we just cloned in, and eliminate
8385e923dee6024248f58fa83a7c7299437f44f0d1aChris Lattner  // any users of the original call/invoke instruction.
839db125cfaf57cc83e7dd7453de2d509bc8efd0e5eChris Lattner  Type *RTy = CalledFunc->getReturnType();
8402c31750cd0ebdc83a890ace97dbb6249b3abe44eDan Gohman
8416fb881c036c32728c4a128d81b6083457e534e09Duncan Sands  PHINode *PHI = 0;
842fc74abfba5128544a750fce22fdf13eb0403e3ceDan Gohman  if (Returns.size() > 1) {
8435e923dee6024248f58fa83a7c7299437f44f0d1aChris Lattner    // The PHI node should go at the front of the new basic block to merge all
8445e923dee6024248f58fa83a7c7299437f44f0d1aChris Lattner    // possible incoming values.
8455e923dee6024248f58fa83a7c7299437f44f0d1aChris Lattner    if (!TheCall->use_empty()) {
8463ecfc861b4365f341c5c969b40e1afccde676e6fJay Foad      PHI = PHINode::Create(RTy, Returns.size(), TheCall->getName(),
847fc74abfba5128544a750fce22fdf13eb0403e3ceDan Gohman                            AfterCallBB->begin());
848fc74abfba5128544a750fce22fdf13eb0403e3ceDan Gohman      // Anything that used the result of the function call should now use the
849fc74abfba5128544a750fce22fdf13eb0403e3ceDan Gohman      // PHI node as their operand.
850a7212e58260f6d1ead0c4eec7af400cf6c0d289eDuncan Sands      TheCall->replaceAllUsesWith(PHI);
8515e923dee6024248f58fa83a7c7299437f44f0d1aChris Lattner    }
852fd93908ae8b9684fe71c239e3c6cfe13ff6a2663Misha Brukman
853c478e52bf4c12691037856ee103c66946afeab6cGabor Greif    // Loop over all of the return instructions adding entries to the PHI node
854c478e52bf4c12691037856ee103c66946afeab6cGabor Greif    // as appropriate.
855fc74abfba5128544a750fce22fdf13eb0403e3ceDan Gohman    if (PHI) {
856fc74abfba5128544a750fce22fdf13eb0403e3ceDan Gohman      for (unsigned i = 0, e = Returns.size(); i != e; ++i) {
857fc74abfba5128544a750fce22fdf13eb0403e3ceDan Gohman        ReturnInst *RI = Returns[i];
858fc74abfba5128544a750fce22fdf13eb0403e3ceDan Gohman        assert(RI->getReturnValue()->getType() == PHI->getType() &&
859fc74abfba5128544a750fce22fdf13eb0403e3ceDan Gohman               "Ret value not consistent in function!");
860fc74abfba5128544a750fce22fdf13eb0403e3ceDan Gohman        PHI->addIncoming(RI->getReturnValue(), RI->getParent());
8615e923dee6024248f58fa83a7c7299437f44f0d1aChris Lattner      }
86212a466b9d0e27be453cfa05cff18acc9d7c1cfbaDevang Patel    }
863fd93908ae8b9684fe71c239e3c6cfe13ff6a2663Misha Brukman
864c581acbbba3cb1af6a08e17314b26344333f9267Chris Lattner
865de62aeaec49ddcf4a4c61fbbb3a22d3a4dd448f0Gabor Greif    // Add a branch to the merge points and remove return instructions.
86612a466b9d0e27be453cfa05cff18acc9d7c1cfbaDevang Patel    for (unsigned i = 0, e = Returns.size(); i != e; ++i) {
86712a466b9d0e27be453cfa05cff18acc9d7c1cfbaDevang Patel      ReturnInst *RI = Returns[i];
8680744f09efc53d3352ac1caffc61f6e8239201c3bDale Johannesen      BranchInst::Create(AfterCallBB, RI);
869b8f198af1b62f2ed48dcb914973a9d211dcba38bDevang Patel      RI->eraseFromParent();
8705e923dee6024248f58fa83a7c7299437f44f0d1aChris Lattner    }
871b8f198af1b62f2ed48dcb914973a9d211dcba38bDevang Patel  } else if (!Returns.empty()) {
872b8f198af1b62f2ed48dcb914973a9d211dcba38bDevang Patel    // Otherwise, if there is exactly one return value, just replace anything
873b8f198af1b62f2ed48dcb914973a9d211dcba38bDevang Patel    // using the return value of the call with the computed value.
8745877ad7e90de2179c15914ff9e8f1c72152cac30Eli Friedman    if (!TheCall->use_empty()) {
8755877ad7e90de2179c15914ff9e8f1c72152cac30Eli Friedman      if (TheCall == Returns[0]->getReturnValue())
8769e9a0d5fc26878e51a58a8b57900fcbf952c2691Owen Anderson        TheCall->replaceAllUsesWith(UndefValue::get(TheCall->getType()));
8775877ad7e90de2179c15914ff9e8f1c72152cac30Eli Friedman      else
8785877ad7e90de2179c15914ff9e8f1c72152cac30Eli Friedman        TheCall->replaceAllUsesWith(Returns[0]->getReturnValue());
8795877ad7e90de2179c15914ff9e8f1c72152cac30Eli Friedman    }
880a7212e58260f6d1ead0c4eec7af400cf6c0d289eDuncan Sands
88195c3e48f9557adb6064d580684bb14cacec2f826Jay Foad    // Update PHI nodes that use the ReturnBB to use the AfterCallBB.
88295c3e48f9557adb6064d580684bb14cacec2f826Jay Foad    BasicBlock *ReturnBB = Returns[0]->getParent();
88395c3e48f9557adb6064d580684bb14cacec2f826Jay Foad    ReturnBB->replaceAllUsesWith(AfterCallBB);
88495c3e48f9557adb6064d580684bb14cacec2f826Jay Foad
885b8f198af1b62f2ed48dcb914973a9d211dcba38bDevang Patel    // Splice the code from the return block into the block that it will return
886b8f198af1b62f2ed48dcb914973a9d211dcba38bDevang Patel    // to, which contains the code that was after the call.
887b8f198af1b62f2ed48dcb914973a9d211dcba38bDevang Patel    AfterCallBB->getInstList().splice(AfterCallBB->begin(),
888b8f198af1b62f2ed48dcb914973a9d211dcba38bDevang Patel                                      ReturnBB->getInstList());
889a7212e58260f6d1ead0c4eec7af400cf6c0d289eDuncan Sands
890b8f198af1b62f2ed48dcb914973a9d211dcba38bDevang Patel    // Delete the return instruction now and empty ReturnBB now.
891b8f198af1b62f2ed48dcb914973a9d211dcba38bDevang Patel    Returns[0]->eraseFromParent();
892b8f198af1b62f2ed48dcb914973a9d211dcba38bDevang Patel    ReturnBB->eraseFromParent();
8933787e765facfad5ea62753922d940bcdd52afd57Chris Lattner  } else if (!TheCall->use_empty()) {
8943787e765facfad5ea62753922d940bcdd52afd57Chris Lattner    // No returns, but something is using the return value of the call.  Just
8953787e765facfad5ea62753922d940bcdd52afd57Chris Lattner    // nuke the result.
8969e9a0d5fc26878e51a58a8b57900fcbf952c2691Owen Anderson    TheCall->replaceAllUsesWith(UndefValue::get(TheCall->getType()));
8975e923dee6024248f58fa83a7c7299437f44f0d1aChris Lattner  }
898fd93908ae8b9684fe71c239e3c6cfe13ff6a2663Misha Brukman
8995e923dee6024248f58fa83a7c7299437f44f0d1aChris Lattner  // Since we are now done with the Call/Invoke, we can delete it.
9003787e765facfad5ea62753922d940bcdd52afd57Chris Lattner  TheCall->eraseFromParent();
901ca398dc3989d35e8516489fd163e012133bd41cbChris Lattner
9027152c237b46a920b29d5605af934766b8f9a07a1Chris Lattner  // We should always be able to fold the entry block of the function into the
9037152c237b46a920b29d5605af934766b8f9a07a1Chris Lattner  // single predecessor of the block...
904cd01ae5c7071fb99a665b2bbea7428d769792ab8Chris Lattner  assert(cast<BranchInst>(Br)->isUnconditional() && "splitBasicBlock broken!");
9057152c237b46a920b29d5605af934766b8f9a07a1Chris Lattner  BasicBlock *CalleeEntry = cast<BranchInst>(Br)->getSuccessor(0);
90644a6807f4f785ecdd96b3aa67dad056677131b98Chris Lattner
907cd01ae5c7071fb99a665b2bbea7428d769792ab8Chris Lattner  // Splice the code entry block into calling block, right before the
908cd01ae5c7071fb99a665b2bbea7428d769792ab8Chris Lattner  // unconditional branch.
909e59fbc04ad343435705c28b3cf7038d65fe4af0aEric Christopher  CalleeEntry->replaceAllUsesWith(OrigBB);  // Update PHI nodes
91095c3e48f9557adb6064d580684bb14cacec2f826Jay Foad  OrigBB->getInstList().splice(Br, CalleeEntry->getInstList());
911cd01ae5c7071fb99a665b2bbea7428d769792ab8Chris Lattner
912cd01ae5c7071fb99a665b2bbea7428d769792ab8Chris Lattner  // Remove the unconditional branch.
913cd01ae5c7071fb99a665b2bbea7428d769792ab8Chris Lattner  OrigBB->getInstList().erase(Br);
914cd01ae5c7071fb99a665b2bbea7428d769792ab8Chris Lattner
915cd01ae5c7071fb99a665b2bbea7428d769792ab8Chris Lattner  // Now we can remove the CalleeEntry block, which is now empty.
916cd01ae5c7071fb99a665b2bbea7428d769792ab8Chris Lattner  Caller->getBasicBlockList().erase(CalleeEntry);
917a7212e58260f6d1ead0c4eec7af400cf6c0d289eDuncan Sands
9186fb881c036c32728c4a128d81b6083457e534e09Duncan Sands  // If we inserted a phi node, check to see if it has a single value (e.g. all
9196fb881c036c32728c4a128d81b6083457e534e09Duncan Sands  // the entries are the same or undef).  If so, remove the PHI so it doesn't
9206fb881c036c32728c4a128d81b6083457e534e09Duncan Sands  // block other optimizations.
92106881e8734b1758fb0666f4e47a91bc58c6383beBill Wendling  if (PHI) {
9226fb881c036c32728c4a128d81b6083457e534e09Duncan Sands    if (Value *V = SimplifyInstruction(PHI, IFI.TD)) {
9236fb881c036c32728c4a128d81b6083457e534e09Duncan Sands      PHI->replaceAllUsesWith(V);
9246fb881c036c32728c4a128d81b6083457e534e09Duncan Sands      PHI->eraseFromParent();
9256fb881c036c32728c4a128d81b6083457e534e09Duncan Sands    }
92606881e8734b1758fb0666f4e47a91bc58c6383beBill Wendling  }
9276fb881c036c32728c4a128d81b6083457e534e09Duncan Sands
928ca398dc3989d35e8516489fd163e012133bd41cbChris Lattner  return true;
929ca398dc3989d35e8516489fd163e012133bd41cbChris Lattner}
930