Insert stores after phi nodes in the normal dest. This fixes
authorChris Lattner <sabre@nondot.org>
Thu, 29 Sep 2005 17:44:20 +0000 (17:44 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 29 Sep 2005 17:44:20 +0000 (17:44 +0000)
LowerInvoke/2005-08-03-InvokeWithPHI.ll

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@23525 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Utils/LowerInvoke.cpp

index d74633b82b8684aa73320c0014b6ae606b63f2a2..2b0e16c17ba77734b0612f16dd7ba13a12e7eb18 100644 (file)
@@ -259,8 +259,11 @@ void LowerInvoke::rewriteExpensiveInvoke(InvokeInst *II, unsigned InvokeNo,
   // Insert a store of the invoke num before the invoke and store zero into the
   // location afterward.
   new StoreInst(InvokeNoC, InvokeNum, true, II);  // volatile
-  new StoreInst(Constant::getNullValue(Type::UIntTy), InvokeNum, false,
-                II->getNormalDest()->begin());  // nonvolatile.
+  
+  BasicBlock::iterator NI = II->getNormalDest()->begin();
+  while (isa<PHINode>(NI)) ++NI;
+  // nonvolatile.
+  new StoreInst(Constant::getNullValue(Type::UIntTy), InvokeNum, false, NI);
   
   // Add a switch case to our unwind block.
   CatchSwitch->addCase(InvokeNoC, II->getUnwindDest());