[Unroll] Don't analyze blocks outside the loop.
authorMichael Zolotukhin <mzolotukhin@apple.com>
Tue, 28 Jul 2015 19:21:21 +0000 (19:21 +0000)
committerMichael Zolotukhin <mzolotukhin@apple.com>
Tue, 28 Jul 2015 19:21:21 +0000 (19:21 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243466 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/LoopUnrollPass.cpp

index 89b3d47c88f9459f49361a1c401925f04e1c170f..513c5a4dc51b52480627db036a3935f4b3bc0f04 100644 (file)
@@ -586,16 +586,20 @@ analyzeLoopUnrollCost(const Loop *L, unsigned TripCount, ScalarEvolution &SE,
         if (BI->isConditional()) {
           if (Constant *SimpleCond =
                   SimplifiedValues.lookup(BI->getCondition())) {
-            BBWorklist.insert(BI->getSuccessor(
-                cast<ConstantInt>(SimpleCond)->isZero() ? 1 : 0));
+            BasicBlock *Succ = BI->getSuccessor(
+                cast<ConstantInt>(SimpleCond)->isZero() ? 1 : 0);
+            if (L->contains(Succ))
+              BBWorklist.insert(Succ);
             continue;
           }
         }
       } else if (SwitchInst *SI = dyn_cast<SwitchInst>(TI)) {
         if (Constant *SimpleCond =
                 SimplifiedValues.lookup(SI->getCondition())) {
-          BBWorklist.insert(
-              SI->getSuccessor(cast<ConstantInt>(SimpleCond)->getSExtValue()));
+          BasicBlock *Succ =
+              SI->getSuccessor(cast<ConstantInt>(SimpleCond)->getSExtValue());
+          if (L->contains(Succ))
+            BBWorklist.insert(Succ);
           continue;
         }
       }