Fix PR116
authorChris Lattner <sabre@nondot.org>
Sun, 16 Nov 2003 21:39:27 +0000 (21:39 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 16 Nov 2003 21:39:27 +0000 (21:39 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10032 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/ADCE.cpp

index e45b2731908935ae694570a5938e057c316763fb..941cc2dc09ca6c123eb6fdc81afde57b493d5fda 100644 (file)
@@ -209,6 +209,18 @@ bool ADCE::doADCE() {
     return MadeChanges;
   }
 
+  // Scan the function marking blocks without post-dominance information as
+  // live.  Blocks without post-dominance information occur when there is an
+  // infinite loop in the program.  Because the infinite loop could contain a
+  // function which unwinds, exits or has side-effects, we don't want to delete
+  // the infinite loop or those blocks leading up to it.
+  for (Function::iterator I = Func->begin(), E = Func->end(); I != E; ++I)
+    if (DT[I] == 0)
+      for (pred_iterator PI = pred_begin(I), E = pred_end(I); PI != E; ++PI)
+        markInstructionLive((*PI)->getTerminator());
+
+
+
   DEBUG(std::cerr << "Processing work list\n");
 
   // AliveBlocks - Set of basic blocks that we know have instructions that are