[Mlir-commits] [mlir] 58db2aa - [mlir] Check greedy rewrite fingerprints and changed flag (#232576)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Fri Oct 16 20:53:59 PDT 2026
Author: Hideto Ueno
Date: 2026-10-16T20:53:53-07:00
New Revision: 58db2aa2198321fd4c5989fbd1fc33aa2d165f4b
URL: https://github.com/llvm/llvm-project/commit/58db2aa2198321fd4c5989fbd1fc33aa2d165f4b
DIFF: https://github.com/llvm/llvm-project/commit/58db2aa2198321fd4c5989fbd1fc33aa2d165f4b.diff
LOG: [mlir] Check greedy rewrite fingerprints and changed flag (#232576)
Under EXPENSIVE_CHECKS, compare operation fingerprints before and after
greedy rewriting. If the IR changes but the driver reports no change,
emit a fatal error.
Assisted-by: gpt 6.1 sol
Added:
Modified:
mlir/lib/Transforms/Utils/GreedyPatternRewriteDriver.cpp
Removed:
################################################################################
diff --git a/mlir/lib/Transforms/Utils/GreedyPatternRewriteDriver.cpp b/mlir/lib/Transforms/Utils/GreedyPatternRewriteDriver.cpp
index de800cb14af9c..adc571061b7f7 100644
--- a/mlir/lib/Transforms/Utils/GreedyPatternRewriteDriver.cpp
+++ b/mlir/lib/Transforms/Utils/GreedyPatternRewriteDriver.cpp
@@ -954,10 +954,23 @@ mlir::applyPatternsGreedily(Region ®ion,
"greedy pattern rewriter input IR failed to verify");
#endif // MLIR_ENABLE_EXPENSIVE_PATTERN_API_CHECKS
+#ifdef EXPENSIVE_CHECKS
+ OperationFingerPrint before(config.getScope()->getParentOp());
+#endif // EXPENSIVE_CHECKS
+ bool rewriteChanged = false;
+
// Start the pattern driver.
RegionPatternRewriteDriver driver(region.getContext(), patterns, config,
region);
- LogicalResult converged = std::move(driver).simplify(changed);
+ LogicalResult converged = std::move(driver).simplify(&rewriteChanged);
+#ifdef EXPENSIVE_CHECKS
+ if (rewriteChanged !=
+ (before != OperationFingerPrint(config.getScope()->getParentOp())))
+ llvm::report_fatal_error(
+ "greedy pattern rewriter changed flag does not match the IR");
+#endif // EXPENSIVE_CHECKS
+ if (changed)
+ *changed = rewriteChanged;
if (failed(converged))
LDBG() << "The pattern rewrite did not converge after scanning "
<< config.getMaxIterations() << " times";
@@ -1084,12 +1097,28 @@ LogicalResult mlir::applyOpPatternsGreedily(
"greedy pattern rewriter input IR failed to verify");
#endif // MLIR_ENABLE_EXPENSIVE_PATTERN_API_CHECKS
+#ifdef EXPENSIVE_CHECKS
+ std::optional<OperationFingerPrint> before;
+ if (config.getScope())
+ before.emplace(config.getScope()->getParentOp());
+#endif // EXPENSIVE_CHECKS
+ bool rewriteChanged = false;
+
// Start the pattern driver.
llvm::SmallDenseSet<Operation *, 4> surviving;
MultiOpPatternRewriteDriver driver(ops.front()->getContext(), patterns,
config, ops,
allErased ? &surviving : nullptr);
- LogicalResult converged = std::move(driver).simplify(ops, changed);
+ LogicalResult converged = std::move(driver).simplify(ops, &rewriteChanged);
+#ifdef EXPENSIVE_CHECKS
+ if (before &&
+ rewriteChanged !=
+ (*before != OperationFingerPrint(config.getScope()->getParentOp())))
+ llvm::report_fatal_error(
+ "greedy pattern rewriter changed flag does not match the IR");
+#endif // EXPENSIVE_CHECKS
+ if (changed)
+ *changed = rewriteChanged;
if (allErased)
*allErased = surviving.empty();
if (failed(converged))
More information about the Mlir-commits
mailing list