[Mlir-commits] [mlir] [mlir][Transforms] Fix crash in dialect conversion (PR #82783)
Matthias Springer
llvmlistbot at llvm.org
Fri Feb 23 08:14:38 PST 2024
https://github.com/matthias-springer created https://github.com/llvm/llvm-project/pull/82783
This is a follow-up to #82333. It possible that the target block of a `BlockTypeConversionRewrite` is detached, so the `MLIRContext` cannot be taken from the block.
>From a02164d6d0fe78f9825f84a80111fea7510d543c Mon Sep 17 00:00:00 2001
From: Matthias Springer <springerm at google.com>
Date: Fri, 23 Feb 2024 16:12:11 +0000
Subject: [PATCH] [mlir][Transforms] Fix crash in dialect conversion
This is a follow-up to #82333. It possible that the target block of a
`BlockTypeConversionRewrite` is detached, so the `MLIRContext` cannot be
taken from the block.
---
mlir/lib/Transforms/Utils/DialectConversion.cpp | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/mlir/lib/Transforms/Utils/DialectConversion.cpp b/mlir/lib/Transforms/Utils/DialectConversion.cpp
index d015bd52901233..843eb5ef9bad47 100644
--- a/mlir/lib/Transforms/Utils/DialectConversion.cpp
+++ b/mlir/lib/Transforms/Utils/DialectConversion.cpp
@@ -1034,15 +1034,15 @@ void BlockTypeConversionRewrite::rollback() {
LogicalResult BlockTypeConversionRewrite::materializeLiveConversions(
function_ref<Operation *(Value)> findLiveUser) {
- auto builder = OpBuilder::atBlockBegin(block, /*listener=*/&rewriterImpl);
-
// Process the remapping for each of the original arguments.
for (auto it : llvm::enumerate(origBlock->getArguments())) {
- OpBuilder::InsertionGuard g(builder);
+ BlockArgument origArg = it.value();
+ // Note: `block` may be detached, so OpBuilder::atBlockBegin cannot be used.
+ OpBuilder builder(it.value().getContext(), /*listener=*/&rewriterImpl);
+ builder.setInsertionPointToStart(block);
// If the type of this argument changed and the argument is still live, we
// need to materialize a conversion.
- BlockArgument origArg = it.value();
if (rewriterImpl.mapping.lookupOrNull(origArg, origArg.getType()))
continue;
Operation *liveUser = findLiveUser(origArg);
More information about the Mlir-commits
mailing list