Do not add unreachable code to a natural loop!
authorChris Lattner <sabre@nondot.org>
Wed, 22 Oct 2003 16:41:21 +0000 (16:41 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 22 Oct 2003 16:41:21 +0000 (16:41 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@9377 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/LoopInfo.cpp

index 2277a1561429019f26ba7f840d082dba2d3ca16b..c1f97889e61c54d1b876c145ccd44734711759fd 100644 (file)
@@ -151,11 +151,14 @@ Loop *LoopInfo::ConsiderForLoop(BasicBlock *BB, const DominatorSet &DS) {
   Loop *L = new Loop(BB);
   BBMap[BB] = L;
 
+  BasicBlock *EntryBlock = &BB->getParent()->getEntryBlock();
+
   while (!TodoStack.empty()) {  // Process all the nodes in the loop
     BasicBlock *X = TodoStack.back();
     TodoStack.pop_back();
 
-    if (!L->contains(X)) {         // As of yet unprocessed??
+    if (!L->contains(X) &&         // As of yet unprocessed??
+        DS.dominates(EntryBlock, X)) {   // X is reachable from entry block?
       // Check to see if this block already belongs to a loop.  If this occurs
       // then we have a case where a loop that is supposed to be a child of the
       // current loop was processed before the current loop.  When this occurs,