[Mlir-commits] [mlir] f22d588 - [mlir] Dialect Conversion: Fix expensive pattern check in no-rollback mode (#166576)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Mon Nov 10 04:45:35 PST 2025
Author: Tim Noack
Date: 2025-11-10T12:45:31Z
New Revision: f22d5884b2847c575b83b067c1c6b69f224f0854
URL: https://github.com/llvm/llvm-project/commit/f22d5884b2847c575b83b067c1c6b69f224f0854
DIFF: https://github.com/llvm/llvm-project/commit/f22d5884b2847c575b83b067c1c6b69f224f0854.diff
LOG: [mlir] Dialect Conversion: Fix expensive pattern check in no-rollback mode (#166576)
Fixes a bug causing every conversion to fail fatally with "expected
pattern to replace the root operation or modify it in place" when
`MLIR_ENABLE_EXPENSIVE_PATTERN_API_CHECKS` is enabled and pattern
rollback is disabled.
When `allowPatternRollback` is disabled, the rewriter does not keep
track of the rewrites it performs and can therefore not use that list to
check whether the root op was replaced or updated in place.
Added:
Modified:
mlir/lib/Transforms/Utils/DialectConversion.cpp
Removed:
################################################################################
diff --git a/mlir/lib/Transforms/Utils/DialectConversion.cpp b/mlir/lib/Transforms/Utils/DialectConversion.cpp
index f8c38fadbd229..9945a711d5c74 100644
--- a/mlir/lib/Transforms/Utils/DialectConversion.cpp
+++ b/mlir/lib/Transforms/Utils/DialectConversion.cpp
@@ -2856,17 +2856,19 @@ LogicalResult OperationLegalizer::legalizePatternResult(
assert(impl.pendingRootUpdates.empty() && "dangling root updates");
#if MLIR_ENABLE_EXPENSIVE_PATTERN_API_CHECKS
- // Check that the root was either replaced or updated in place.
- auto newRewrites = llvm::drop_begin(impl.rewrites, curState.numRewrites);
- auto replacedRoot = [&] {
- return hasRewrite<ReplaceOperationRewrite>(newRewrites, op);
- };
- auto updatedRootInPlace = [&] {
- return hasRewrite<ModifyOperationRewrite>(newRewrites, op);
- };
- if (!replacedRoot() && !updatedRootInPlace())
- llvm::report_fatal_error(
- "expected pattern to replace the root operation or modify it in place");
+ if (impl.config.allowPatternRollback) {
+ // Check that the root was either replaced or updated in place.
+ auto newRewrites = llvm::drop_begin(impl.rewrites, curState.numRewrites);
+ auto replacedRoot = [&] {
+ return hasRewrite<ReplaceOperationRewrite>(newRewrites, op);
+ };
+ auto updatedRootInPlace = [&] {
+ return hasRewrite<ModifyOperationRewrite>(newRewrites, op);
+ };
+ if (!replacedRoot() && !updatedRootInPlace())
+ llvm::report_fatal_error("expected pattern to replace the root operation "
+ "or modify it in place");
+ }
#endif // MLIR_ENABLE_EXPENSIVE_PATTERN_API_CHECKS
// Legalize each of the actions registered during application.
More information about the Mlir-commits
mailing list