[Mlir-commits] [mlir] 38f8945 - [MLIR][Presburger] Fix stale pivot in Smith normal form (#189789)

llvmlistbot at llvm.org llvmlistbot at llvm.org
Fri Apr 3 23:18:03 PDT 2026


Author: Yue Huang
Date: 2026-04-03T23:17:57-07:00
New Revision: 38f89453620eade48d8486483a0ccebfff446f80

URL: https://github.com/llvm/llvm-project/commit/38f89453620eade48d8486483a0ccebfff446f80
DIFF: https://github.com/llvm/llvm-project/commit/38f89453620eade48d8486483a0ccebfff446f80.diff

LOG: [MLIR][Presburger] Fix stale pivot in Smith normal form (#189789)

The pivot used to fix divisibility in Smith normal form is stale. This
will not affect correctness, but can lower efficiency since the outer
loop will be executed more times.

Thanks for @benquike of discovering this.

Added: 
    

Modified: 
    mlir/lib/Analysis/Presburger/Matrix.cpp

Removed: 
    


################################################################################
diff  --git a/mlir/lib/Analysis/Presburger/Matrix.cpp b/mlir/lib/Analysis/Presburger/Matrix.cpp
index 6ea04543146b7..94e9eb5792dab 100644
--- a/mlir/lib/Analysis/Presburger/Matrix.cpp
+++ b/mlir/lib/Analysis/Presburger/Matrix.cpp
@@ -653,8 +653,6 @@ IntMatrix::computeSmithNormalForm() const {
         u.negateRow(i);
       }
 
-      DynamicAPInt pivot = d(i, i);
-
       // Clear other entries in row i and column i with Euclid's algorithm.
       for (unsigned r = i + 1; r < numRows; ++r) {
         while (d(r, i) != 0) {
@@ -684,7 +682,7 @@ IntMatrix::computeSmithNormalForm() const {
         }
       }
 
-      if (auto row = findNonMultipleRow(d, i + 1, pivot)) {
+      if (auto row = findNonMultipleRow(d, i + 1, d(i, i))) {
         // Add the row (r) to row i. This brings d(r, c) into the i-th row,
         // creating a new value at d(i, c) that will be used to reduce the
         // pivot size.


        


More information about the Mlir-commits mailing list