[Mlir-commits] [mlir] [MLIR][SparseTensor] Fix fingerprint changes in SparseFuncAssembler (PR #188958)

llvmlistbot at llvm.org llvmlistbot at llvm.org
Fri Mar 27 03:48:59 PDT 2026


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-mlir

Author: Mehdi Amini (joker-eph)

<details>
<summary>Changes</summary>

SparseFuncAssembler::matchAndRewrite was calling funcOp.setName(), funcOp.setPrivate(), and funcOp->removeAttr() directly without notifying the rewriter, causing "operation fingerprint changed" errors under MLIR_ENABLE_EXPENSIVE_PATTERN_API_CHECKS.

Wrap all in-place funcOp mutations with rewriter.modifyOpInPlace.

Assisted-by: Claude Code

Fix a failure present with MLIR_ENABLE_EXPENSIVE_PATTERN_API_CHECKS=ON.

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


1 Files Affected:

- (modified) mlir/lib/Dialect/SparseTensor/Transforms/SparseAssembler.cpp (+7-3) 


``````````diff
diff --git a/mlir/lib/Dialect/SparseTensor/Transforms/SparseAssembler.cpp b/mlir/lib/Dialect/SparseTensor/Transforms/SparseAssembler.cpp
index 0a8f29cd0b417..4428339b38c5d 100644
--- a/mlir/lib/Dialect/SparseTensor/Transforms/SparseAssembler.cpp
+++ b/mlir/lib/Dialect/SparseTensor/Transforms/SparseAssembler.cpp
@@ -193,8 +193,10 @@ struct SparseFuncAssembler : public OpRewritePattern<func::FuncOp> {
     // Modify the original method into an internal, private method.
     auto orgName = funcOp.getName();
     std::string wrapper = llvm::formatv("_internal_{0}", orgName).str();
-    funcOp.setName(wrapper);
-    funcOp.setPrivate();
+    rewriter.modifyOpInPlace(funcOp, [&]() {
+      funcOp.setName(wrapper);
+      funcOp.setPrivate();
+    });
 
     // Start the new public wrapper method with original name.
     Location loc = funcOp.getLoc();
@@ -235,7 +237,9 @@ struct SparseFuncAssembler : public OpRewritePattern<func::FuncOp> {
             LLVM::LLVMDialect::getEmitCWrapperAttrName())) {
       func->setAttr(LLVM::LLVMDialect::getEmitCWrapperAttrName(),
                     UnitAttr::get(context));
-      funcOp->removeAttr(LLVM::LLVMDialect::getEmitCWrapperAttrName());
+      rewriter.modifyOpInPlace(funcOp, [&]() {
+        funcOp->removeAttr(LLVM::LLVMDialect::getEmitCWrapperAttrName());
+      });
     }
     return success();
   }

``````````

</details>


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


More information about the Mlir-commits mailing list