[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 &region,
         "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