Fix bug: Inline/2003-09-22-PHINodesInNormalInvokeDest.ll
authorChris Lattner <sabre@nondot.org>
Mon, 22 Sep 2003 22:35:39 +0000 (22:35 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 22 Sep 2003 22:35:39 +0000 (22:35 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8666 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Utils/InlineFunction.cpp

index 72f02e2d84f8bcf7f47fe457f7db098a6231a6ee..8f69c1ee161ab6e215aac9a0294dbda42499309a 100644 (file)
@@ -51,11 +51,16 @@ bool InlineFunction(CallSite CS) {
   BasicBlock *AfterCallBB;
 
   if (InvokeInst *II = dyn_cast<InvokeInst>(TheCall)) {
-    AfterCallBB = II->getNormalDest();
     InvokeDest = II->getExceptionalDest();
 
     // Add an unconditional branch to make this look like the CallInst case...
-    new BranchInst(AfterCallBB, TheCall);
+    BranchInst *NewBr = new BranchInst(II->getNormalDest(), TheCall);
+
+    // Split the basic block.  This guarantees that no PHI nodes will have to be
+    // updated due to new incoming edges, and make the invoke case more
+    // symmetric to the call case.
+    AfterCallBB = OrigBB->splitBasicBlock(NewBr,
+                                          CalledFunc->getName()+".entry");
 
     // If there are PHI nodes in the exceptional destination block, we need to
     // keep track of which values came into them from this invoke, then remove