diff options
Diffstat (limited to 'llvm/lib/Transforms')
| -rw-r--r-- | llvm/lib/Transforms/Scalar/SCCP.cpp | 6 | 
1 files changed, 5 insertions, 1 deletions
| diff --git a/llvm/lib/Transforms/Scalar/SCCP.cpp b/llvm/lib/Transforms/Scalar/SCCP.cpp index 9a8d26bb7b8..7682e5a9e18 100644 --- a/llvm/lib/Transforms/Scalar/SCCP.cpp +++ b/llvm/lib/Transforms/Scalar/SCCP.cpp @@ -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++; | 

