Do not delete the entry block to a function.
authorChris Lattner <sabre@nondot.org>
Sat, 11 Dec 2004 05:32:19 +0000 (05:32 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 11 Dec 2004 05:32:19 +0000 (05:32 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@18795 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/SCCP.cpp

index 9a8d26bb7b8c2b50795121dcdea41008b2dce1c2..7682e5a9e188e59688788fa8515cb37aa9b95735 100644 (file)
@@ -1178,7 +1178,6 @@ bool IPSCCP::runOnModule(Module &M) {
       if (!ExecutableBBs.count(BB)) {
         DEBUG(std::cerr << "  BasicBlock Dead:" << *BB);
         ++IPNumDeadBlocks;
-        BlocksToErase.push_back(BB);
 
         // Delete the instructions backwards, as it has a reduced likelihood of
         // having to update as many def-use and use-def chains.
@@ -1206,6 +1205,11 @@ bool IPSCCP::runOnModule(Module &M) {
           TI->replaceAllUsesWith(UndefValue::get(TI->getType()));
         BB->getInstList().erase(TI);
 
+        if (&*BB != &F->front())
+          BlocksToErase.push_back(BB);
+        else
+          new UnreachableInst(BB);
+
       } else {
         for (BasicBlock::iterator BI = BB->begin(), E = BB->end(); BI != E; ) {
           Instruction *Inst = BI++;