[llvm-branch-commits] [llvm] [Delinearization] Add validation for large size arrays (PR #169902)

Ryotaro Kasuga via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Fri Nov 28 08:48:42 PST 2025


================
@@ -755,6 +769,43 @@ bool llvm::validateDelinearizationResult(ScalarEvolution &SE,
     if (!isKnownLessThan(&SE, Subscript, Size))
       return false;
   }
+
+  // The offset computation is as follows:
+  //
+  //   Offset = I_n +
+  //            S_n * I_{n-1} +
+  //            ... +
+  //            (S_2 * ... * S_n) * I_1
+  //
+  // Regarding this as a function from (I_1, I_2, ..., I_n) to integers, it
+  // must be injective. To guarantee it, the above calculation must not
+  // overflow. Since we have already checked that 0 <= I_k < S_k for k = 2..n,
+  // the minimum and maximum values occur in the following cases:
+  //
+  //   Min = [I_1][0]...[0] = S_2 * ... * S_n * I_1
----------------
kasuga-fj wrote:

Because DA appears to allow the outermost subscript to be negative, e.g., https://github.com/llvm/llvm-project/blob/318236da1feb7e6a5030252e02853e6ed54b39ac/llvm/test/Analysis/DependenceAnalysis/Propagating.ll#L310-L314. That said, I don't know if this is important or not.

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


More information about the llvm-branch-commits mailing list