[all-commits] [llvm/llvm-project] 36a8a3: [mlir] Avoid rewriting unreachable blocks in the g...

Vijay Kandiah via All-commits all-commits at lists.llvm.org
Fri Sep 25 03:17:30 PDT 2026


  Branch: refs/heads/users/mamini/greedy-rewrite-reachability
  Home:   https://github.com/llvm/llvm-project
  Commit: 36a8a38fb576fbca3fde6602b547b94932c88a0d
      https://github.com/llvm/llvm-project/commit/36a8a38fb576fbca3fde6602b547b94932c88a0d
  Author: Vijay Kandiah <vkandiah at nvidia.com>
  Date:   2026-09-25 (Fri, 25 Sep 2026)

  Changed paths:
    M mlir/include/mlir/Transforms/GreedyPatternRewriteDriver.h
    M mlir/lib/Transforms/Utils/GreedyPatternRewriteDriver.cpp
    M mlir/test/Transforms/canonicalize-dce.mlir
    A mlir/test/Transforms/greedy-cfg-reachability.mlir
    M mlir/test/Transforms/test-strict-pattern-driver.mlir
    M mlir/test/lib/Dialect/Test/TestPatterns.cpp

  Log Message:
  -----------
  [mlir] Avoid rewriting unreachable blocks in the greedy driver

A rewrite can disconnect a block after the iteration's initial CFG sweep.
Track reachability through rewriter notifications and skip worklist operations
in unreachable blocks until the next iteration removes them.

Cache reachability per region. Compare the final successors of changed blocks
after each rewrite, preserving the cache for successor-equivalent changes and
block merges that keep surviving blocks reachable. Recompute for other CFG
changes. This avoids repeated full CFG scans during branch canonicalization.

Single-block regions return before cache lookup or CFG traversal. In the same
Release build, canonicalizing 32,000 sibling single-block regions took 22.8 ms
versus 21.9 ms with the parent driver. With 16,000 regions containing folds,
the times were 35.7 ms and 34.3 ms, respectively. Nesting to 256 levels
showed no measurable difference.

A synthetic CFG chain with 4,000 blocks folds a conditional branch with
identical successors in each block. With region simplification disabled,
median CanonicalizerPass time fell from 223.7 ms with the previous reachability
implementation to 5.0 ms with this update; the parent driver took 2.5 ms in
the same Release build. Across 500, 1,000, 2,000, and 4,000 blocks, this
update took 0.6, 1.2, 2.5, and 5.0 ms. This fixture intentionally stresses
branch folding and does not represent application workloads.

Cover inserted and redirected blocks, blocks connected before rewrite
completion, nested regions, and explicit op-list behavior.

Assisted-by: Codex



To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications


More information about the All-commits mailing list