OSDN Git Service

[IndVars] Speculative fix for an assertion failure seen in bots
authorPhilip Reames <listmail@philipreames.com>
Tue, 16 Jul 2019 18:23:49 +0000 (18:23 +0000)
committerPhilip Reames <listmail@philipreames.com>
Tue, 16 Jul 2019 18:23:49 +0000 (18:23 +0000)
I don't have an IR sample which is actually failing, but the issue described in the comment is theoretically possible, and should be guarded against even if there's a different root cause for the bot failures.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@366241 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/IndVarSimplify.cpp

index 70508bf..f9fc698 100644 (file)
@@ -2810,7 +2810,12 @@ bool IndVarSimplify::run(Loop *L) {
       if (isa<SCEVCouldNotCompute>(ExitCount))
         continue;
 
-      assert(!ExitCount->isZero() && "Should have been folded above");
+      // This was handled above, but as we form SCEVs, we can sometimes refine
+      // existing ones; this allows exit counts to be folded to zero which
+      // weren't when optimizeLoopExits saw them.  Arguably, we should iterate
+      // until stable to handle cases like this better.
+      if (ExitCount->isZero())
+        continue;
       
       PHINode *IndVar = FindLoopCounter(L, ExitingBB, ExitCount, SE, DT);
       if (!IndVar)