From: Chris Lattner Date: Sun, 16 Nov 2003 21:39:27 +0000 (+0000) Subject: Fix PR116 X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=commitdiff_plain;h=faa45ce300f45ad81576b1a7cefeb0f76d701579 Fix PR116 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10032 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Transforms/Scalar/ADCE.cpp b/lib/Transforms/Scalar/ADCE.cpp index e45b2731908..941cc2dc09c 100644 --- a/lib/Transforms/Scalar/ADCE.cpp +++ b/lib/Transforms/Scalar/ADCE.cpp @@ -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