Unwind instructions are intrinsically alive, just like returns
authorChris Lattner <sabre@nondot.org>
Wed, 10 Sep 2003 20:38:14 +0000 (20:38 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 10 Sep 2003 20:38:14 +0000 (20:38 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8462 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/ADCE.cpp

index ffb57d0d6aeb449dc1ec88d4d8b5576b70ca19f9..0efdbf4b0f6cde750371beb1db8c0e7de7919378 100644 (file)
@@ -84,8 +84,8 @@ private:
   }
 
   inline void markTerminatorLive(const BasicBlock *BB) {
-    DEBUG(std::cerr << "Terminat Live: " << BB->getTerminator());
-    markInstructionLive((Instruction*)BB->getTerminator());
+    DEBUG(std::cerr << "Terminator Live: " << BB->getTerminator());
+    markInstructionLive(const_cast<TerminatorInst*>(BB->getTerminator()));
   }
 };
 
@@ -176,7 +176,7 @@ bool ADCE::doADCE() {
        BBI != BBE; ++BBI) {
     BasicBlock *BB = *BBI;
     for (BasicBlock::iterator II = BB->begin(), EI = BB->end(); II != EI; ) {
-      if (II->mayWriteToMemory() || II->getOpcode() == Instruction::Ret) {
+      if (II->mayWriteToMemory() || isa<ReturnInst>(II) || isa<UnwindInst>(II)){
        markInstructionLive(II);
         ++II;  // Increment the inst iterator if the inst wasn't deleted
       } else if (isInstructionTriviallyDead(II)) {