@@ -2302,6 +2302,37 @@ OperationLegalizer::legalizeWithFold(Operation *op,
2302
2302
return success ();
2303
2303
}
2304
2304
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
+
2305
2336
LogicalResult
2306
2337
OperationLegalizer::legalizeWithPattern (Operation *op,
2307
2338
ConversionPatternRewriter &rewriter) {
@@ -2389,8 +2420,8 @@ OperationLegalizer::legalizeWithPattern(Operation *op,
2389
2420
appliedPatterns.erase (&pattern);
2390
2421
if (failed (result)) {
2391
2422
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 );
2394
2425
rewriterImpl.resetState (curState, pattern.getDebugName ());
2395
2426
}
2396
2427
if (config.listener )
0 commit comments