Skip to content

[MLIR][Presburger] Fix stale pivot in Smith normal form#189789

Merged
superty merged 1 commit into
llvm:mainfrom
AdUhTkJm:main
Apr 4, 2026
Merged

[MLIR][Presburger] Fix stale pivot in Smith normal form#189789
superty merged 1 commit into
llvm:mainfrom
AdUhTkJm:main

Conversation

@AdUhTkJm
Copy link
Copy Markdown
Contributor

@AdUhTkJm AdUhTkJm commented Apr 1, 2026

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.

@llvmbot
Copy link
Copy Markdown
Member

llvmbot commented Apr 1, 2026

@llvm/pr-subscribers-mlir-presburger

Author: Yue Huang (AdUhTkJm)

Changes

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.


Full diff: https://github.com/llvm/llvm-project/pull/189789.diff

1 Files Affected:

  • (modified) mlir/lib/Analysis/Presburger/Matrix.cpp (+1-3)
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.

@llvmbot
Copy link
Copy Markdown
Member

llvmbot commented Apr 1, 2026

@llvm/pr-subscribers-mlir

Author: Yue Huang (AdUhTkJm)

Changes

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.


Full diff: https://github.com/llvm/llvm-project/pull/189789.diff

1 Files Affected:

  • (modified) mlir/lib/Analysis/Presburger/Matrix.cpp (+1-3)
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.

@superty superty merged commit 38f8945 into llvm:main Apr 4, 2026
13 checks passed
@superty
Copy link
Copy Markdown
Member

superty commented Apr 4, 2026

Thanks for looking into it!

zwu-2025 pushed a commit to zwu-2025/llvm-project that referenced this pull request May 17, 2026
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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants