[PATCH] D108848: [LoopDeletion] Separate logic in breakBackedgeIfNotTaken using symboic max trip count [nfc]

Philip Reames via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Sep 1 13:31:02 PDT 2021


This revision was automatically updated to reflect the committed changes.
Closed by commit rG3af8a11bc66b: [LoopDeletion] Separate logic in breakBackedgeIfNotTaken using symboic max trip… (authored by reames).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D108848/new/

https://reviews.llvm.org/D108848

Files:
  llvm/lib/Transforms/Scalar/LoopDeletion.cpp


Index: llvm/lib/Transforms/Scalar/LoopDeletion.cpp
===================================================================
--- llvm/lib/Transforms/Scalar/LoopDeletion.cpp
+++ llvm/lib/Transforms/Scalar/LoopDeletion.cpp
@@ -393,19 +393,23 @@
   if (!L->getLoopLatch())
     return LoopDeletionResult::Unmodified;
 
-  auto *BTCMax = SE.getConstantMaxBackedgeTakenCount(L);
-  if (!BTCMax->isZero()) {
-    auto *BTC = SE.getBackedgeTakenCount(L);
-    if (!BTC->isZero()) {
-      if (!isa<SCEVCouldNotCompute>(BTC) && SE.isKnownNonZero(BTC))
-        return LoopDeletionResult::Unmodified;
-      if (!canProveExitOnFirstIteration(L, DT, LI))
-        return LoopDeletionResult::Unmodified;
-    }
+  auto *BTC = SE.getSymbolicMaxBackedgeTakenCount(L);
+  if (BTC->isZero()) {
+    // SCEV knows this backedge isn't taken!
+    breakLoopBackedge(L, DT, SE, LI, MSSA);
+    return LoopDeletionResult::Deleted;
   }
 
-  breakLoopBackedge(L, DT, SE, LI, MSSA);
-  return LoopDeletionResult::Deleted;
+  // If SCEV leaves open the possibility of a zero trip count, see if
+  // symbolically evaluating the first iteration lets us prove the backedge
+  // unreachable.
+  if (isa<SCEVCouldNotCompute>(BTC) || !SE.isKnownNonZero(BTC))
+    if (canProveExitOnFirstIteration(L, DT, LI)) {
+      breakLoopBackedge(L, DT, SE, LI, MSSA);
+      return LoopDeletionResult::Deleted;
+    }
+
+  return LoopDeletionResult::Unmodified;
 }
 
 /// Remove a loop if it is dead.


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D108848.370042.patch
Type: text/x-patch
Size: 1458 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210901/7f9f4e81/attachment.bin>


More information about the llvm-commits mailing list