Fix PR1101 and Analysis/ScalarEvolution/trip-count.ll
authorChris Lattner <sabre@nondot.org>
Sun, 14 Jan 2007 01:24:47 +0000 (01:24 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 14 Jan 2007 01:24:47 +0000 (01:24 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33193 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/ScalarEvolution.cpp

index 20a979a2e57bcecceb36634ac35e536c8d9a2a1f..be661d9768d3a04a96e8182dce0c0ccf2c6fb9a4 100644 (file)
@@ -1506,10 +1506,12 @@ SCEVHandle ScalarEvolutionsImpl::ComputeIterationCount(const Loop *L) {
   //
   // Currently we check for this by checking to see if the Exit branch goes to
   // the loop header.  If so, we know it will always execute the same number of
-  // times as the loop.  More extensive analysis could be done to handle more
-  // cases here.
+  // times as the loop.  We also handle the case where the exit block *is* the
+  // loop header.  This is common for un-rotated loops.  More extensive analysis
+  // could be done to handle more cases here.
   if (ExitBr->getSuccessor(0) != L->getHeader() &&
-      ExitBr->getSuccessor(1) != L->getHeader())
+      ExitBr->getSuccessor(1) != L->getHeader() &&
+      ExitBr->getParent() != L->getHeader())
     return UnknownValue;
   
   ICmpInst *ExitCond = dyn_cast<ICmpInst>(ExitBr->getCondition());