Skip to content

Bump mlir-aie to 1.4.4.dev18 and llvm-aie to 2026091401 - #2003

Open
erwei-xilinx wants to merge 1 commit into
mainfrom
bump-mlir-aie-1.4.4
Open

erwei-xilinx wants to merge 1 commit into
mainfrom
bump-mlir-aie-1.4.4

Conversation

@erwei-xilinx

Copy link
Copy Markdown
Collaborator

The pin has sat at 10767b50 (2026-09-03) while mlir-aie moved on. This takes it to f5196d8 — the newest released wheel, 1.4.4.dev18, 2026-09-18 — and moves llvm-aie with it, as the comment beside that pin asks (2026090201+a36c62b92026091401+a5d028e8, from mlir-aie's own utils/peano-requirements.txt).

LLVM does not move. mlir-aie at f5196d8 still pins LLVM_PROJECT_COMMIT 56bcc187 / DATETIME 2026080106, exactly what utils/clone-llvm.sh already carries. So this is a pure mlir-aie + llvm-aie step, four lines across four files.

MLIR_PYTHON_EXTRAS_SHORTHASH is left alone on purpose — nothing in the tree reads it.

Validation

No AIR source changes were needed. Built against the new wheel:

  • check-air-mlir 539 passed / 0 failed (7 expected-fail, 11 unsupported)
  • check-air-cpp 1/1
  • both designs on the memtile chain-lock path — programming_examples/fused_decode and fused_decode_ple — compile clean

One behaviour change worth naming

mlir-aie #3702 ("Avoid sharing a stream-switch arbiter between packet flows that can deadlock", merged 2026-09-10) lands in this range, and it interacts with the open gemma4-e2b decode hang.

It diagnoses that hang precisely. Run its pathfinder over gemma4's device region and it reports the hazard at tile (2, 0), and again at (2, 1) and (2, 2):

at tile (2, 0), packet flow 12 shares arbiter 1 with packet flow 29,
  which it can deadlock against; no independent arbiter is free

It cannot repair it: column 2 is oversubscribed — 9 masters against 6 arbiters — so the pass takes its documented "no independent arbiter is free" fallback, keeps the assignment and warns.

What it does do is reshuffle. At (2, 0) the four projection-gather flows were paired arb1={W0,W2}, arb2={W1,W3}; now it is arb1={W0, pkt12} and arb2={W1,W2,W3}. The gather's lock chain runs W0 → W1 → W2 → W3, so one 3-way hazard has more ways to close a cycle than two 2-way ones — and it measures that way on an NPU2 Krackan:

toolchain default pmode turbo
pinned (1.4.3.dev55) 3–7 / 20 4 / 20
bumped (1.4.4.dev18) 0 / 20 0 / 20

0 of 60 dispatches across both power modes, against a 15–35% pass rate before. That path is already --expect-fail at every context in gemma4_e2b_q4nx/run_npu2_sweep.lit and is tracked separately, so no gate changes state — but a reviewer weighing this bump should know it moves an open defect the wrong way, and that what it buys in exchange is a compile-time warning naming the tile instead of a silent hang.

I'd still take the bump: the regression is confined to an already-failing path, and the diagnostics are the thing that makes that path fixable. Happy to hold it if you'd rather land the gemma4 fix first.

🤖 Generated with Claude Code

The pin has been at 10767b50 (2026-09-03) while mlir-aie moved on; this takes
it to f5196d8, the newest released wheel (1.4.4.dev18, 2026-09-18).  llvm-aie
follows mlir-aie's own utils/peano-requirements.txt, as the comment beside it
asks: 2026090201+a36c62b9 -> 2026091401+a5d028e8.

LLVM does not move.  mlir-aie at f5196d8 still pins LLVM_PROJECT_COMMIT
56bcc187 / DATETIME 2026080106, exactly what utils/clone-llvm.sh already
carries, so this is a pure mlir-aie + llvm-aie step.

No AIR source changes are needed.  Built against the new wheel:
check-air-mlir 539 passed / 0 failed (7 expected-fail, 11 unsupported),
check-air-cpp 1/1, and both designs that use the memtile chain-lock path
(programming_examples/fused_decode and fused_decode_ple) compile clean.

MLIR_PYTHON_EXTRAS_SHORTHASH is deliberately left alone: nothing in the tree
reads it, so moving it would be churn rather than a bump.

One thing this pulls in is worth naming, because it changes what a
known-failing design does.  mlir-aie #3702 ("Avoid sharing a stream-switch
arbiter between packet flows that can deadlock", merged 2026-09-10) lands in
this range.  It diagnoses gemma4-e2b's decode hang precisely -- run its
pathfinder over that device and it reports the hazard at tile (2, 0) and again
at (2, 1) and (2, 2) -- but it cannot repair it: column 2 is oversubscribed, 9
masters against 6 arbiters, so the pass takes its "no independent arbiter is
free" fallback, keeps the assignment and warns.

What it does do is reshuffle.  At (2, 0) the old router paired the four
projection-gather flows as arb1={W0,W2}, arb2={W1,W3}; the new one gives
arb1={W0, pkt12} and stacks arb2={W1,W2,W3}.  Since the gather's lock chain
runs W0 -> W1 -> W2 -> W3, one 3-way hazard on arb2 has more ways to close a
cycle than two 2-way ones, and it measures that way on an NPU2 Krackan: the
pinned toolchain passes 3-7 of 20 dispatches at default power and 4 of 20 at
turbo, the bumped one 0 of 60 across both.  That path is already
--expect-fail at every context in gemma4_e2b_q4nx/run_npu2_sweep.lit and is
tracked separately, so no gate changes state here -- but a reviewer weighing
this bump should know it moves an open defect the wrong way, and that the
diagnostics it adds in exchange name the tile.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Copilot AI lite review requested due to automatic review settings September 19, 2026 04:43

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🔵 Needs a closer look

The bump changes stream-switch behavior on an already-failing gemma4 path, warranting final human review.

Review effort: Lite
Findings: None

What changed in this PR

Updates MLIR-AIE and LLVM-AIE pins for local builds and CI while keeping LLVM unchanged.

Changes:

  • Bumps MLIR-AIE to 1.4.4.dev18.
  • Updates LLVM-AIE to 2026091401.
  • Synchronizes build scripts and CI workflows.
File Description
utils/​clone-mlir-aie.sh Updates MLIR-AIE source and wheel pins.
utils/​build-mlir-air-using-wheels.sh Updates the LLVM-AIE wheel pin.
.github/​workflows/​nightlyPerfBenchmark.yml Aligns nightly benchmarking with the new dependency.
.github/​workflows/​buildAndTestRyzenAI.yml Aligns Ryzen AI CI with the new dependency.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants