Skip to content

Commit a02164d

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

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

mlir/lib/Transforms/Utils/DialectConversion.cpp

Lines changed: 4 additions & 4 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);

0 commit comments

Comments
 (0)