Skip to content

Commit 5840aa9

Browse files
[mlir][Transforms] Fix crash in dialect conversion (#82783)
This is a follow-up to #82333. It is possible that the target block of a `BlockTypeConversionRewrite` is detached, so the `MLIRContext` cannot be taken from the block.
1 parent 55bc048 commit 5840aa9

File tree

1 file changed

+5
-5
lines changed

1 file changed

+5
-5
lines changed

mlir/lib/Transforms/Utils/DialectConversion.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1034,15 +1034,15 @@ void BlockTypeConversionRewrite::rollback() {
10341034

10351035
LogicalResult BlockTypeConversionRewrite::materializeLiveConversions(
10361036
function_ref<Operation *(Value)> findLiveUser) {
1037-
auto builder = OpBuilder::atBlockBegin(block, /*listener=*/&rewriterImpl);
1038-
10391037
// Process the remapping for each of the original arguments.
10401038
for (auto it : llvm::enumerate(origBlock->getArguments())) {
1041-
OpBuilder::InsertionGuard g(builder);
1039+
BlockArgument origArg = it.value();
1040+
// Note: `block` may be detached, so OpBuilder::atBlockBegin cannot be used.
1041+
OpBuilder builder(it.value().getContext(), /*listener=*/&rewriterImpl);
1042+
builder.setInsertionPointToStart(block);
10421043

10431044
// If the type of this argument changed and the argument is still live, we
10441045
// need to materialize a conversion.
1045-
BlockArgument origArg = it.value();
10461046
if (rewriterImpl.mapping.lookupOrNull(origArg, origArg.getType()))
10471047
continue;
10481048
Operation *liveUser = findLiveUser(origArg);
@@ -1321,7 +1321,7 @@ LogicalResult ConversionPatternRewriterImpl::convertNonEntryRegionTypes(
13211321
Block *ConversionPatternRewriterImpl::applySignatureConversion(
13221322
Block *block, const TypeConverter *converter,
13231323
TypeConverter::SignatureConversion &signatureConversion) {
1324-
MLIRContext *ctx = block->getParentOp()->getContext();
1324+
MLIRContext *ctx = eraseRewriter.getContext();
13251325

13261326
// If no arguments are being changed or added, there is nothing to do.
13271327
unsigned origArgCount = block->getNumArguments();

0 commit comments

Comments
 (0)