@@ -2356,6 +2356,31 @@ OperationLegalizer::legalizeWithFold(Operation *op,
2356
2356
return success ();
2357
2357
}
2358
2358
2359
+ // / Report a fatal error indicating that newly produced or modified IR could
2360
+ // / not be legalized.
2361
+ static void
2362
+ reportNewIrLegalizationFatalError (const Pattern &pattern,
2363
+ const SetVector<Operation *> &newOps,
2364
+ const SetVector<Operation *> &modifiedOps,
2365
+ const SetVector<Block *> &insertedBlocks) {
2366
+ auto newOpNames = llvm::map_range (
2367
+ newOps, [](Operation *op) { return op->getName ().getStringRef (); });
2368
+ auto modifiedOpNames = llvm::map_range (
2369
+ modifiedOps, [](Operation *op) { return op->getName ().getStringRef (); });
2370
+ StringRef detachedBlockStr = " (detached block)" ;
2371
+ auto insertedBlockNames = llvm::map_range (insertedBlocks, [&](Block *block) {
2372
+ if (block->getParentOp ())
2373
+ return block->getParentOp ()->getName ().getStringRef ();
2374
+ return detachedBlockStr;
2375
+ });
2376
+ llvm::report_fatal_error (
2377
+ " pattern '" + pattern.getDebugName () +
2378
+ " ' produced IR that could not be legalized. " + " new ops: {" +
2379
+ llvm::join (newOpNames, " , " ) + " }, " + " modified ops: {" +
2380
+ llvm::join (modifiedOpNames, " , " ) + " }, " + " inserted block into ops: {" +
2381
+ llvm::join (insertedBlockNames, " , " ) + " }" );
2382
+ }
2383
+
2359
2384
LogicalResult
2360
2385
OperationLegalizer::legalizeWithPattern (Operation *op,
2361
2386
ConversionPatternRewriter &rewriter) {
@@ -2444,8 +2469,8 @@ OperationLegalizer::legalizeWithPattern(Operation *op,
2444
2469
appliedPatterns.erase (&pattern);
2445
2470
if (failed (result)) {
2446
2471
if (!rewriterImpl.config .allowPatternRollback )
2447
- llvm::report_fatal_error ( " pattern ' " + pattern. getDebugName () +
2448
- " ' produced IR that could not be legalized " );
2472
+ reportNewIrLegalizationFatalError ( pattern, newOps, modifiedOps,
2473
+ insertedBlocks );
2449
2474
rewriterImpl.resetState (curState, pattern.getDebugName ());
2450
2475
}
2451
2476
if (config.listener )
0 commit comments