[llvm] [LV] Add initial legality checks for ee loops with stores (PR #145663)

David Sherwood via llvm-commits llvm-commits at lists.llvm.org
Tue Jul 29 04:17:54 PDT 2025


================
@@ -1207,8 +1209,42 @@ bool LoopVectorizationLegality::canVectorizeMemory() {
     });
   }
 
-  if (!LAI->canVectorizeMemory())
-    return canVectorizeIndirectUnsafeDependences();
+  if (LAI->canVectorizeMemory()) {
+    // FIXME: Remove or reduce this restriction. We're in a bit of an odd spot
+    //        since we're (potentially) doing the load out of its normal order
+    //        in the loop and that may throw off dependency checking.
+    //        A forward dependency should be fine, but a backwards dep may not
+    //        be even if LAA thinks it is due to performing the load for the
+    //        vector iteration i+1 in vector iteration i.
+    if (CriticalEELoad) {
+      const MemoryDepChecker &DepChecker = LAI->getDepChecker();
+      const auto *Deps = DepChecker.getDependences();
+
+      if (any_of(*Deps, [&](const MemoryDepChecker::Dependence &Dep) {
+            return (Dep.getDestination(DepChecker) == *CriticalEELoad ||
+                    Dep.getSource(DepChecker) == *CriticalEELoad);
+          })) {
+        // Refine language a little? This currently only applies when a store
+        // is present in the early exit loop.
+        reportVectorizationFailure(
+            "No dependencies allowed for early exit condition load",
----------------
david-arm wrote:

It might be clearer if you change this to `for critical early exit condition in loop with stores`

https://github.com/llvm/llvm-project/pull/145663


More information about the llvm-commits mailing list