Xilinx/mlir-aie - Open Source PR Review Scorecard

A close-to-metal Python API for programming AMD Ryzen™ AI NPUs (AI Engines), built on an open-source MLIR-based compiler toolchain.

C-Rank Grade: A (Welcoming) - 64/100

External PR Merge Rate: 14%

Response Time: 2h

First Timer Success: 17%

Frequently Asked Questions

Is Xilinx/mlir-aie welcoming to first-time open-source contributors?

Xilinx/mlir-aie has a recorded first-timer success rate of 16.7%. Repositories ranked A typically provide actionable feedback during code reviews and actively nurture new community contributors.

How fast can I expect code review feedback on my pull request?

Maintainers in Xilinx/mlir-aie respond to incoming external pull requests in approximately 1.8 hours on average. Keeping PRs focused on single tasks and ensuring tests pass helps maintainers review faster.

What does the 64.4 C-Rank™ score (A Tier) represent?

The C-Rank™ system evaluates GitHub projects on a 0–100 scale using real data: PR merge rates, review turnaround time, active maintainer presence, and first-time contributor success. A score of 64.4 places Xilinx/mlir-aie in the A tier.

What is the external contributor pull request merge rate for Xilinx/mlir-aie?

The external contributor pull request merge rate for Xilinx/mlir-aie is 13.5%, based on public PR activity from non-core contributors.

Are there Good First Issues available in Xilinx/mlir-aie?

Xilinx/mlir-aie currently has 25 active issue(s) tagged with beginner-friendly labels like "good first issue", "beginner", or "up-for-grabs".

Xilinx
Xilinx/mlir-aieA•Welcoming701
GitHub
Back to Explorer
Xilinx

Xilinx/mlir-aie

701
Active (30d)A•Welcoming(64/100)C

A close-to-metal Python API for programming AMD Ryzen™ AI NPUs (AI Engines), built on an open-source MLIR-based compiler toolchain.

GitHub
Compare••
Jump to:

AI Maintainer Review Guidelines

Review Persona

Active Open-Source Maintainer

Warmth Score
7.8/10
Patience Score
8.2/10
Nitpick Rate
20%

Active maintainer team in Xilinx/mlir-aie welcoming community pull requests and bug fixes.

Top PR Submission Do's

  • •Ensure code complies with repository style conventions
  • •Keep PRs focused and well-documented

Top PR Friction Pitfalls (Don'ts)

  • •Do not submit unlinked PRs without context
  • •Do not break existing automated test suites
Response Velocity
1 hours
Standard maintainer review cycle

Average Response Latency

Tracks hours until a maintainer leaves a review, comment, or PR response.

Merge Efficiency
13.5%
Selective PR acceptance rate

External Acceptance Rate

Percentage of community pull requests successfully merged into main.

First-Timer Success
16.7%
Accepts new contributor PRs

First PR Conversion

Rate at which developers submitting their first repository PR succeed.

Active Maintainers
11 core
Highly collaborative maintainer core
Diagnostic Health HUD
13.5%
Merge Gauge
16.7%
1st-Timer
Community Vibe39/100

Embed C-Rank Badge

Show contributors that your repository actively reviews and merges external pull requests.

GetMerged C-Rank badge for Xilinx/mlir-aie
[![GetMerged C-Rank](https://getmerged.abhishekco.de/api/badge/Xilinx/mlir-aie)](https://getmerged.abhishekco.de/Xilinx/mlir-aie?utm_source=github&utm_medium=badge)

Active Good First Issues (5)

View on GitHub

Summary The memory-module lock trace events on AIE2/AIE2P (LOCK_SEL0..7_ACQ_EQ, LOCK_SEL0..7_ACQ_GE, LOCK_SEL0..7_EQUAL_TO_VALUE and LOCK_0..7_REL) do not refer to fixed lock IDs. Each one reports the lock chosen by selection slot n, which is the Locks_Event_Selection_n register. None of the trace paths in mlir-aie write those registers today: the aie.trace dialect (trace.event, trace.reg, trace.combo_event, trace.edge_event); aie.utils.trace.configure_trace; IRON's Program.enable_trace. All eight slots keep their reset value. Its lock-select field is 0, so every LOCK_SELn_* and LOCK_n_REL event reports lock 0. A trace that asks for LOCK_SEL2_ACQ_GE looks plausible but shows lock 0's activity. This matters most when you are hunting a lock stall. CoreEvent.LOCK_STALL tells you the core stalled. The per-lock memory-module events would tell you which ObjectFifo, but right now they cannot. Registers The registers are identical in aie-rt xaie2pgbl_params.h and in mlir-aie lib/Dialect/AIE/

📅 Opened Oct 5, 2026💬 0 comments
Quality: 90/100Contribute

One note from asm analysis: IRON's range_ casts to index: 64-bit counters on the core, two registers and a carry each. aie2p is not friendly with 64-bit integers, and as result, it produces larger program code, and adds more register pressure. The workaround from user side exists: use custom function with scf.for from 0 to stop (an int or an i32 value) with i32 bounds; yields the i32 induction variable def range32(stop: object) -> Iterator[object]: c0, c1 = arith.constant(T.i32(), 0), arith.constant(T.i32(), 1) stop = arith.constant(T.i32(), stop) if isinstance(stop, int) else stop if isinstance(stop.type, IndexType): stop = index.casts(T.i32(), stop) for_op = scf.ForOp(c0, stop, c1) with InsertionPoint(for_op.body): yield for_op.induction_variable scf.yield_([]) However, I wonder, it can be improved on mlir-aie side? The simplest solution is add dtype= parameter to _range and let user to decide, but maybe there is something smarter than this

📅 Opened Oct 5, 2026💬 1 comment
Quality: 90/100Contribute

#3440 fixed the legal start-column set for virtualized NPU partitions by adding a free physicalColumns(AIEDevice) function in SidecarFiles.h, consumed only by aiecc's makePartitionJson. From that thread (#3440 (comment)): Yes, I think something exactly like that in the TargetModel would make a lot of sense. For now, just fixing the value in aiecc is good too, just wanted to check I'm not missing a historic reason why it is the way it is. Proposal, to fold the per-device switch into TargetModel itself so other call sites (placement, partitioning) can share it instead of re-deriving the array width: /// Width of the physical array this (possibly virtualized) device is carved from. /// Defaults to columns(), which is correct for any device that is the whole array. virtual int physicalColumns() const { return columns(); } /// First physical column at which a partition may be anchored. Column 0 on the /// NPUs has no shim tile, so nothing can be fed there. virtual int firstPlaceableColum

📅 Opened Sep 14, 2026💬 1 comment
Quality: 65/100Contribute

What happened? Many aie_kernels loops take their element count as a runtime argument and then hand the compiler an AIE_LOOP_MIN_ITERATION_COUNT(n) to get it pipelined. Peano predefines __AIECC__, so that macro expands to a real #pragma clang loop min_iteration_count(n) — a promise the compiler is entitled to schedule against, not a check. Build the kernel at a size below n and the pipelined loop runs past the tile. The factory already knows the tile size at build time and already passes -DBIT_WIDTH=... per config. If the size travelled the same way, the loop bound would be a compile-time constant, LLVM would derive the exact trip count itself, and the promise — along with the whole hazard class — would be unnecessary. Measured on Phoenix (aie2), passthrough, 2048×int32, median core cycles: variant cycles 4-iteration tile promise to violate runtime count + min_iteration_count(6) (today) 269 hangs yes (UB) runtime count, pragma removed 1164 ok none compile-time constant

📅 Opened Sep 11, 2026💬 0 comments
Quality: 90/100Contribute

Summary XRTTensor creates host BOs with group_id=0 (default in python/utils/hostruntime/xrtruntime/tensor.py:79), but amdxdna kernels declare a per-argument memory group (kernel.group_id(3+i) from kernels.json). Running with group-0 BOs against kernels that declare non-zero groups yields silently wrong results (ERT reports ERT_CMD_STATE_COMPLETED, the NPU never touches the data buffers). At large shapes this also wedges the NPU (IO_PAGE_FAULTs + aie2_set_cmd_timeout in dmesg) until a PCI remove/rescan. mlir-aie's own C++ tests bind every host BO with the kernel's declared group (test/npu-xrt/many_buffers/test.cpp: xrt::bo(device, size, XRT_BO_FLAGS_HOST_ONLY, kernel.group_id(3 + p*2))); the Python runtime never does. Environment Ryzen AI MAX+ 395 (Strix Halo), XDNA2 NPU (8 col x 4 row), amdxdna driver, XRT 2.21.75 mlir-aie from devel (iron-venv), IRON GEMM operator with dtype_in="i8" Reproduction (silent garbage) # INT8 GEMM 1024x512x1024, 8 cols, tile 64; kernel.group_id(3..5) == 0x

📅 Opened Aug 31, 2026💬 0 comments
Quality: 50/100Contribute
Looking for more C beginner tasks?Explore C GFI

Contributor Community Vibe Feedback

Rate what actually matters after opening a pull request here.

Have you contributed to this repo?

Rate your first-hand PR experience (review speed, maintainer responsiveness, and onboarding ease) to help other contributors.

3 ratings required
Maintainer helpfulness
Review speed
Beginner friendliness

Contributor Compatibility & Review Speed Analysis for Xilinx/mlir-aie

When evaluating whether to contribute to Xilinx/mlir-aie, response velocity and maintainer engagement are crucial. GetMerged continuously tracks pull request trajectories, first-comment latency, and code review rounds to help developers avoid submitting pull requests to backlogged repositories.

Currently, maintainers of Xilinx/mlir-aie acknowledge new external contributions in approximately 1 hours. Out of all submitted pull requests from non-core authors in the last 180-day window, 13.5% were successfully merged into the primary branch.

Frequently Asked Questions - Contributing to Xilinx/mlir-aie

01

Is Xilinx/mlir-aie welcoming to first-time open-source contributors?

Xilinx/mlir-aie has a recorded first-timer success rate of 16.7%. Repositories ranked Welcoming typically provide actionable feedback during code reviews and actively nurture new community contributors.

02

How fast can I expect code review feedback on my pull request?

The initial maintainer response time averages ~1 hours. Keeping PRs scoped to single concerns and ensuring CI checks succeed will optimize review turnaround.

03

What does the 64.4 C-Rank™ score represent?

The C-Rank™ index scores repositories on a 0 to 100 scale using an objective formula: external PR merge rates, initial response speed, active maintainer count, and first-time contributor retention. A score of 64.4 places Xilinx/mlir-aie in the Welcoming tier.

04

What is the external contributor pull request merge rate for Xilinx/mlir-aie?

The external pull request merge rate is 13.5%. GetMerged isolates non-core community contributions so external developers get an accurate benchmark of PR acceptance probability.

05

Are there beginner Good First Issues open in Xilinx/mlir-aie?

Yes, Xilinx/mlir-aie currently has 25 active issue(s) tagged with beginner-friendly labels. You can inspect these directly from the repository issues tab.

GetMerged C-Rank™ Indexing Standard

All metrics displayed for Xilinx/mlir-aie are automatically retrieved via the public GitHub API and recalculated daily. Insider pull requests submitted by repository owners or organization members are excluded from merge rate calculations to preserve objective external contributor statistics.