[Mlir-commits] [mlir] [mlir][ArmSME] Fix invalid rewriter API usage (PR #76123)
Matthias Springer
llvmlistbot at llvm.org
Wed Dec 20 21:06:46 PST 2023
https://github.com/matthias-springer created https://github.com/llvm/llvm-project/pull/76123
When operations are modified in-place, the rewriter must be notified. This commit fixes `mlir/test/Conversion/ArmSMEToLLVM/unsupported.mlir` and `mlir/test/Dialect/ArmSME/vector-ops-to-llvm.mlir` when running with `MLIR_ENABLE_EXPENSIVE_PATTERN_API_CHECKS` enabled.
>From 71c4058fd181444422e0cd6aea308a0025c0e08b Mon Sep 17 00:00:00 2001
From: Matthias Springer <springerm at google.com>
Date: Thu, 21 Dec 2023 14:05:41 +0900
Subject: [PATCH] [mlir][ArmSME] Fix invalid rewriter API usage
When operations are modified in-place, the rewriter must be notified. This commit fixes `mlir/test/Conversion/ArmSMEToLLVM/unsupported.mlir` and `mlir/test/Dialect/ArmSME/vector-ops-to-llvm.mlir` when running with `MLIR_ENABLE_EXPENSIVE_PATTERN_API_CHECKS` enabled.
---
mlir/lib/Dialect/ArmSME/Transforms/TileAllocation.cpp | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/mlir/lib/Dialect/ArmSME/Transforms/TileAllocation.cpp b/mlir/lib/Dialect/ArmSME/Transforms/TileAllocation.cpp
index 597846e31e218e..8aa51f352f822d 100644
--- a/mlir/lib/Dialect/ArmSME/Transforms/TileAllocation.cpp
+++ b/mlir/lib/Dialect/ArmSME/Transforms/TileAllocation.cpp
@@ -223,8 +223,10 @@ struct AssignTileIDsPattern
if (failed(tileId))
return tileOp.emitError("ran out of SME virtual tiles!");
- func->setDiscardableAttr(kTilesInUseAttr,
- rewriter.getI32IntegerAttr((unsigned)tilesInUse));
+ rewriter.updateRootInPlace(func, [&]() {
+ func->setDiscardableAttr(
+ kTilesInUseAttr, rewriter.getI32IntegerAttr((unsigned)tilesInUse));
+ });
// Find all the ops that (transitively) depend on this tile.
SetVector<Operation *> dependantOps;
@@ -245,14 +247,15 @@ struct AssignTileIDsPattern
// scf.if, and moving the contents of %tileA or %tileB to result tile (based
// on the %some_cond).
auto tileIDAttr = rewriter.getI32IntegerAttr(*tileId);
- tileOp.setTileId(tileIDAttr);
+ rewriter.updateRootInPlace(tileOp, [&]() { tileOp.setTileId(tileIDAttr); });
for (auto *op : dependantOps) {
if (auto tileOp = llvm::dyn_cast<ArmSMETileOpInterface>(op)) {
auto currentTileId = tileOp.getTileId();
if (currentTileId && unsigned(currentTileId.getInt()) != tileId)
return tileOp.emitOpError(
"already assigned different SME virtual tile!");
- tileOp.setTileId(tileIDAttr);
+ rewriter.updateRootInPlace(tileOp,
+ [&]() { tileOp.setTileId(tileIDAttr); });
}
}
More information about the Mlir-commits
mailing list