Skip to content

Commit c53c18e

Browse files
[mlir][Transforms] More detailed error message when new IR cannot be legalized
1 parent dace67e commit c53c18e

File tree

1 file changed

+33
-2
lines changed

1 file changed

+33
-2
lines changed

mlir/lib/Transforms/Utils/DialectConversion.cpp

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2302,6 +2302,37 @@ OperationLegalizer::legalizeWithFold(Operation *op,
23022302
return success();
23032303
}
23042304

2305+
/// Report a fatal error indicating that newly produced or modified IR could
2306+
/// not be legalized.
2307+
static void
2308+
reportNewIrLegalizationFatalError(const Pattern &pattern,
2309+
const SetVector<Operation *> &newOps,
2310+
const SetVector<Operation *> &modifiedOps,
2311+
const SetVector<Block *> &insertedBlocks) {
2312+
StringRef detachedBlockStr = "(detached block)";
2313+
std::string newOpNames = llvm::join(
2314+
llvm::map_range(
2315+
newOps, [](Operation *op) { return op->getName().getStringRef(); }),
2316+
", ");
2317+
std::string modifiedOpNames = llvm::join(
2318+
llvm::map_range(
2319+
newOps, [](Operation *op) { return op->getName().getStringRef(); }),
2320+
", ");
2321+
std::string insertedBlockNames = llvm::join(
2322+
llvm::map_range(insertedBlocks,
2323+
[&](Block *block) {
2324+
if (block->getParentOp())
2325+
return block->getParentOp()->getName().getStringRef();
2326+
return detachedBlockStr;
2327+
}),
2328+
", ");
2329+
llvm::report_fatal_error(
2330+
"pattern '" + pattern.getDebugName() +
2331+
"' produced IR that could not be legalized. " + "new ops: {" +
2332+
newOpNames + "}, " + "modified ops: {" + modifiedOpNames + "}, " +
2333+
"inserted block into ops: {" + insertedBlockNames + "}");
2334+
}
2335+
23052336
LogicalResult
23062337
OperationLegalizer::legalizeWithPattern(Operation *op,
23072338
ConversionPatternRewriter &rewriter) {
@@ -2389,8 +2420,8 @@ OperationLegalizer::legalizeWithPattern(Operation *op,
23892420
appliedPatterns.erase(&pattern);
23902421
if (failed(result)) {
23912422
if (!rewriterImpl.config.allowPatternRollback)
2392-
llvm::report_fatal_error("pattern '" + pattern.getDebugName() +
2393-
"' produced IR that could not be legalized");
2423+
reportNewIrLegalizationFatalError(pattern, newOps, modifiedOps,
2424+
insertedBlocks);
23942425
rewriterImpl.resetState(curState, pattern.getDebugName());
23952426
}
23962427
if (config.listener)

0 commit comments

Comments
 (0)