Skip to content

fix(rocke): never give two values the same name - #14846

Open
cgmillette wants to merge 5 commits into
developfrom
users/cgmillette/rocke/ssa-name-separator
Open

cgmillette wants to merge 5 commits into
developfrom
users/cgmillette/rocke/ssa-name-separator

Conversation

@cgmillette

@cgmillette cgmillette commented Nov 1, 2026 •

Copy link
Copy Markdown
Contributor

The bug

Both engines named every value the builder makes %<hint><n>: the op's name hint, then the
builder's counter. When the hint ends in digits, the hint and the counter run together:

value hint counter old name
16-wide zero vector cz16 5 %cz165
1-wide zero vector cz1 65 %cz165

The kernel then defines %cz165 twice. The C++ engine refuses to read the IR back
("SSA id '%cz165' redefined") and the LLVM module is invalid. Even when nothing clashes the
names mislead: %c4 holds 64 and %cz425 cannot be split by eye.

The fix

Both engines now always put _ between the hint and the counter: %cz16_5, %cz1_65,
%c_4. The counter is always the digits after the last _, and it never repeats inside one
builder, so two builder names are equal only when their hints and their counters are both
equal. That closes the bug by construction; nothing has to remember which names were issued.

The rule, in both engines with the same error texts:

  • A builder name is %<hint>_<n>. A hint that is empty or starts with a digit is refused.
  • A name the author picks (kernel parameter, loop induction variable, loop-carried value) is
    refused when it is not an identifier or ends in _ and digits, the form builder names take,
    so an author name can never spell a builder name.
  • Such a name is also refused when it is a C++20 keyword or an alternative operator token
    (for, int, and, ...): the HIP lowering prints these names unchanged, as C++
    identifiers, so a parameter named for lowered to int for. A builder name always ends in
    _ and digits, so it is never a keyword. Other names the HIP output already uses (its type
    names such as uint32_t, builtins such as threadIdx, names C++ reserves such as __x)
    are not refused.

The names that broke the second rule are renamed, in both engines where both build them:

where old new
attention kernels' QQ-bias stride parameter qq_bias_stride_0 qq_bias_stride0 (the host keyword is unchanged; the gfx950 unified attention packs of the hipDNN kernel ingestor match kernel argument names against the builder's, so their signatures use the new name too)
fused epilogue residual parameters residual_<i>, residual_mul_<i> residual<i>, residual_mul<i>
fused MoE fp8 loop names (and its example levels) kg_0, g_out_0_1, dg_d0_1 kg_m0, g_out_m0_n1, dg_d_m0_n1
direct convolution loop-carried values rg_y0_3, dwt_acc0_3, sp_acc_2, dww_y0_3, dwm_y0_3, dfw_y0_3, dgs_tail_acc_3 ..._i3, sp_acc_kh2
conv wgrad loop-carried values acc1_3, a1_3, r1_0 acc1_i3, a1_i3, r1_m0
gfx950 dense attention rescale loop ro0_2, rl_2 ro0_rs2, rl_rs2
gfx942 dense attention sliding-window wave-skip loop wo<dt>_<tag> wo<dt>_t<tag>
MLA prefill accumulators (now built in kernels/mla/_mla_body.py) acc0_3, rs000_3 acc0_t3, rs000_t3
attention backward dQ range loops dq_ki_0 dq_ki0
two gfx1151 attention builders m0_1, acc0_2 m0_r1, acc0_d2
packed depthwise direct convolution loop-carried values dwp_acc_<f>_<k>, dwp_tail_<i>, dwtp_acc<ph>_<i>, dwtp_x<ph>_r<t>_<c>, dwtp_w<ph>_<i> dwp_acc_<f>_k<k>, dwp_tail_i<i>, dwtp_acc<ph>_i<i>, dwtp_x<ph>_r<t>_c<c>, dwtp_w<ph>_i<i>
depthwise direct convolution dgrad stream loop-carried values dgs_tail_acc_<i>, dgp_acc_<f>_<k>, dgp_tail_<i> dgs_tail_acc_i<i>, dgp_acc_<f>_k<k>, dgp_tail_i<i>

The portable-IR roller names a loop-carry fan's iter-args itself when the Python names are
not <prefix><lane> (a 2-D acc_m<i>_n0 fan, say). It named them __fa<fan>_<lane>, which the
C replay now refuses as a loop-carried name; it now names them __fa<fan>_l<lane>.

Every kernel the byte-identity check, the representative golden, the library convolution tests
and the library attention tests build was first built with the rule logged rather than enforced:
no other name breaks it. On the current develop the rule is enforced in both engines, and every
kernel byte identity (all four flavors), the platform suite and the library smoke build passes it.

Why _, and why not the alternatives

  • . is ruled out. The HIP lowering prints value names as C identifiers (int add.1 does
    not compile), and the LLVM lowering already names its own temporaries <hint>.<n>, sharing
    some hints with the builder, so %splat.7 could be defined twice. With _, builder names
    never contain . and lowering temporaries always do.
  • - breaks the HIP lowering the same way; $ makes LLVM quote the name.
  • Skip on clash (remember every issued name and bump the counter past a taken one) changes
    no IR today, but keeps the misleading names, needs a per-builder set of every name for the
    builder's whole life (and a binary ABI bump for the C++ builder struct), and leaves author
    names unchecked. The separator needs no state and no ABI change.
  • _ only after a digit-final hint still changes almost every kernel (digit-final hints such
    as cz16, av8, acc32 are in nearly all of them) and leaves two naming rules.

Re-bless scope

The IR of almost every kernel changes, in value names only. Each artifact is re-blessed with its
own tool, or, where it has none, by the procedure its test checks, and only the entries it already
has are changed (nothing added or removed). Run on develop without this change, every
one of these tools reproduces develop's committed file byte for byte, so each change below comes
from this PR alone.

artifact tool entries changed
platform/tests/golden/rocke_representative_ir_sha256/ (all 39 family shards) rocke_ir_parity_harness.py --write platform/tests/golden/rocke_representative_ir_sha256 llvm20 349/349, llvm22 349/349, llvm23 395/395, llvm24 395/395; no shard added or removed, and each shard's cases, expected failures, aliases and schema are otherwise unchanged (the per-case byte counts grow with the names)
library/tests/golden/attention_bwd_ir_sha256.json its test's --write 3096/3096 (llvm20 / llvm22 / llvm23)
attention_dense_bwd_ir_sha256.json its test's --write (python -m tests.test_attention_dense_bwd_ir --write) 376/376 (four flavors)
attention_dense_gfx942_ir_sha256.json its test's --write 204/204 (four flavors)
attention_strided_kv_ir_sha256.json its test's procedure 42/42 (llvm20 / llvm22 / llvm23)
dsa_indexer_ir_sha256.json its test's --write 40/40 (four flavors)
gdn_decode_gfx950_ir_sha256.json its test's --write 1172/1172 (four flavors)
kda_gfx942_ir_sha256.json its test's --write 20/20 (four flavors)
kda_gfx950_ir_sha256.json its test's --write 80/80 (four flavors)
mla_prefill_gfx942_ir_sha256.json its test's --write 38/38 (four flavors; its llvm20 expected failures unchanged)
tests/core: the four scaled-MMA golden tables (gfx950_scaled_mfma and three WMMA tables) and the NVFP4 GEMM table, llvm23 each test's procedure 50/50, 40/40, 36/36, 6/6, 4/4
tiling demo IR snapshot (test_demo_ir_snapshot.py) the file's own regeneration helper 23/23
tensor_transforms emit goldens (emit_conv, emit_rebase, emit_two_inputs, emit_xor) printed IR 93/95, 7/9, 21/23, 18/20 lines; each new file with the _ separator removed again is develop's file
differential golden llvm_gfx_all.json, ll section run_diff.py --python-only --record-golden, keeping only the entries the golden already has llvm20 1577/1606, llvm22 1577/1606, llvm23 1715/1744, llvm24 2012/2041 (the unchanged entries are conv_abi, barrier_fence, target_intrinsics and two configurations of a newer WMMA target's lowering family at every flavor, whose IR names no builder value)
differential golden, ir_canonical section run_diff.py --python-only --mode ir --canonical --record-golden, same 6/1725 (all six fused_moe_e2e entries, whose kernel's loop names are renamed)

The emitted LLVM IR of every representative case (349 at llvm20 and llvm22, 395 at llvm23 and
llvm24) was compared with develop's after renaming every value, and every LDS name in an
alias-scope string, to its order of first use: identical in all of them, so the change is value
names only. Also re-blessed: the tests
that pin value names (test_mx_scale_decode in both engines, future_intrinsic_lowering.cpp, the
the newer target's cluster / prefetch / TDM tests, test_lds_alias_scopes, test_lowbit_loop_types,
test_mma_operand_register_type, test_unsigned_int_ops, test_global_ptr_offset,
test_scf_if_else_results, test_optimization_barrier in both engines, the DPP checks in test_rocke.py, and the library tests that name the
QQ-bias stride parameter: test_attention_builds, test_attention_unified_lse).

The C++ text-IR reader reads the new names (every both-engine test round-trips through it);
test_xf32_bf16x3_lowering.cpp keeps its hand-written IR, which does not come from the builder.

Tests

tests/core/test_value_names.py and tests/core/test_value_names.cpp build the cz16 / cz1
pair and check the names, that both engines lower the kernel to the same LLVM IR with every name
defined once, and every refusal with its exact text, keywords included. The Python test also
checks that the two engines' keyword tables hold the same words.
rocke_value_names is in the quick and ffm-quick lists of the provider CTest categories, and
tests/test_cxx_test_categories.py fails if any installed C++ test has no tier or gets different
tiers from the others (tests that had no tier before this check are listed by name in that file).
It configures the platform and reads the installed CTest file the build writes, so it also sees
tests whose names a CMake loop builds; the two portable IR tests it found
(rocke_portable_ir_dom_decoders, rocke_portable_ir_recipe_vm_replay) join the quick and
ffm-quick lists.
tests/portable_ir/test_recipe_roller.py::test_standalone_cli_replays_a_fan_with_synthetic_lane_names
rolls a fan the roller has to name itself, replays it through the standalone C replay at sampled
and held-out lane counts, and checks the roller's names are in the output and that the LLVM IR
matches Python's once value names are renumbered; it fails on the old __fa<fan>_<lane> names.

For other open PRs

Every PR that touches an IR golden, a library golden, the differential golden or a test that
pins a value name must regenerate it on rebase after this lands (with the same tools as above;
for the representative golden, --write <shard dir> --only <family> re-blesses just that PR's
families);
a kernel that declares a parameter, induction variable or loop-carried value ending in _ and
digits must rename it.

Gate (run on this branch on develop c6bca3b; it now sits on 3ab1173, which changes nothing under dnn-providers)

check result
pre-commit, whole PR diff pass
byte identity, llvm20 / llvm22 / llvm23 / llvm24 GREEN / GREEN / GREEN / GREEN
ctest all pass (one skips on this host)
platform suite (tests and python/rocke/tests), both engines strict 11326 pass, 5 fail; the same 5 fail on develop with the same setup
every re-blessed golden, regenerated on develop reproduces develop's committed file
representative golden --check, differential golden --check-golden (ll at four flavors and ir_canonical) OK
library suite (every file under library/tests) no failure that develop does not also have: about 275 fail on this host on both trees, all in the attention backward compile tests, whose test workers die when this host's compiler library rejects an LLVM option; which tests are hit varies per run, and this branch's extra failures fail the same way on develop

Not run: GPU execution (names do not reach the code object), and the hipDNN kernel-ingestor gtests, which need the provider build (they check the renamed argument name against the packs' own lists).

ISSUE ID : AICK-2799

🤖 Generated with Claude Code

@cgmillette
cgmillette requested review from a team as code owners November 1, 2026 22:16
@github-actions github-actions Bot added documentation project: hip-kernel-provider rocke-lib: attention Touches rocKE library attention/FMHA kernels rocke: platform Touches rocKE platform labels Nov 1, 2026
@therock-pr-bot

therock-pr-bot Bot commented Nov 1, 2026 •

Copy link
Copy Markdown

✅ All Checks Passed — Ready for Review

Check Status Details
📝 PR Description ✅ Pass —
⛔ Forbidden Files ✅ Pass —
🧪 Unit Test ✅ Pass —
🔎 pre-commit ✅ Pass —
🚫 Draft PR 🔜 To Be Enabled —
🚩 Feature Flag 🔜 To Be Enabled —
📊 Code Coverage 🔜 To Be Enabled —
🤖 therock-pr-bot ✅ Pass —

🎉 All checks passed! This PR is ready for review.

📖 Need help? See the Policy FAQ for details on every check and how to fix failures.

🙋 Wish to Override Policy?

@therock-pr-bot

therock-pr-bot Bot commented Nov 1, 2026 •

Copy link
Copy Markdown

🎉 All checks passed! This PR is ready for review.

@cgmillette

Copy link
Copy Markdown
Contributor Author

Automated review: Model - qwen3.6:35b-a3b-coding-mtp-q4_K_M, effort: max

PR #14846 — never give two values the same name (cgmillette, AICK-2799) — 🟡 First-round: C++ test not in CI

Prior item Status
Reviewers 🟢 None yet
• no reviews or threads, only the policy bot
Claim: cz16/cz1 names clash on develop 🟢 Confirmed
• develop: %cz165 twice; module invalid, C++ read-back refuses (ran)
• latent: no clash in 9,910 in-tree modules (ran)
• not covered: default-named loops still share %k0, develop too (ran)
Claim: re-bless changes names only 🟢 Confirmed
• 13,345 entries in 50 goldens: same tokens, one-to-one renames (ran)
• no symbol renamed; body's counts match; byte identity GREEN both trees (ran)
Claim: names do not reach the code object 🟢 Mostly
• 7 kernels built on both trees: .text identical (ran)
• qq_bias_stride0 rename changes only the arg-name metadata (ran)
• every kernel's IR changes: comgr disk cache recompiles once (read)
Bots / CI 🟢 Green on re-run
• attempt 1: gfx94X hipkernelprovider 2/2 — golden-sha timeout (14733); re-run ✓
• red Multi-Arch CI Summary: first run, cancelled by a label re-trigger
• 53 ✓; nothing running
Our checks 🟢 Clean
• merge vs 61b3ac0e: clean (ran); develop +3 since, none rocKE
• build + ctest 35 ✓ / 1 skip; byte identity GREEN ×4; goldens PASS (ran)
• tests 316 + 516 ✓, 4 ✗ also fail on develop (14807); compile, rules 1–3: nothing new (ran)
# Sev file:line Finding
N1 🟡 ROCKE_ENGINE_test_categories_external.yaml:62, :107; tests/cmake/CoreTests.cmake:387 New rocke_value_names ctest has no tier entry, so CI never runs it
• impact: C++ refusals untested in CI; the Python both-engine case skips there
• fix: add it to the quick and ffm-quick lists

Utility: 🟢 Positive — closes a latent duplicate-name bug; all re-blessed IR is names-only.


Legend: 🔴 blocking · 🟠 should-fix · 🟡 minor nit · 🟢 info/good · ⚪ retracted

First-round review: first pass by a local qwen3.6 model, verified by the orchestrator (Claude Opus 5.5). Checks: merge with develop, build + ctest, byte identity, goldens, collision repro on both trees, names-only audit of every re-blessed entry, code-object compare, CI at head. Flags whether a closer look is needed; not an approval or rejection.

@shumway shumway 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.

This touches a lot of files, and it looks like we have a good window to merge this.

It seems like this convention could be abstracted, so that we don't have to make changes across all files, but I'm OK with this large-scale change. In the future, let's consider design improvements to go hand in hand with large scale changes, with this idea that future PRs won't have to be this large and conflict-prone.

@cgmillette

Copy link
Copy Markdown
Contributor Author

Thanks, agreed. Filed as a follow-up (AICK-2909): one naming policy per engine that owns the hint, separator and counter, and goldens that hash a canonical form (values renumbered in order of first use, as the differential harness's canonical section already does), so a future naming change is a one-place edit and re-records no golden. This PR stays as is and lands at a quiet moment to limit the rebases it causes.

@CongMa13 CongMa13 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.

One new issue is called out inline.

I agree with the following existing feedback:

  • The new rocke_value_names CTest is missing from tiered CI — cgmillette, comment #6566925563.

@cgmillette
cgmillette requested a review from a team as a code owner November 3, 2026 05:00
@cgmillette

Copy link
Copy Markdown
Contributor Author

Review follow-up:

  • N1 (rocke_value_names had no CTest tier; raised in the automated review and by @CongMa13): fixed in ed1e980. rocke_value_names is now in the quick and ffm-quick lists of ROCKE_ENGINE_test_categories_external.yaml. The same commit adds tests/test_cxx_test_categories.py, which runs the shared category parser over every installed C++ test registered in tests/cmake and fails if one has no tier or gets different tiers from the others. It fails on the previous commit and passes now. Tests registered before this check that still have no tier are listed by name in that file; the check also fails if one of them gets a tier or is removed and is still listed.
  • Residual parameter names (inline thread on ir.py): already handled in 6ff2c2c; answered in the thread and resolved.

The branch currently conflicts with develop (one kernel file and several goldens); I will rebase and re-bless those goldens with the tools listed in the description in a separate step.

@cgmillette

Copy link
Copy Markdown
Contributor Author

Automated review: Model - qwen3.6:35b-a3b-coding-mtp-q4_K_M, effort: max

PR #14846 — never give two values the same name (cgmillette, AICK-2799) — 🟠 Follow-up: N1 fixed; rebase needed

Prior item Status
Our 11-02 N1: rocke_value_names ctest in no CI tier 🟢 FIXED ed1e9802
• YAML :63, :109: same labels as rocke_mx_scale_decode, standard included (ran)
• TheRock's -L ^standard$ shards will now select it (read)
• correction: hipDNN superbuilds already ran it; only TheRock's shards did not
shumway (11-02) APPROVED 🟢 APPROVED 6ff2c2c3
• older head; still counts on develop
• ed1e9802 since: tier entry and tests only
• still needed: a rocke-lib code owner (library files) (read)
CongMa13 (11-02) residual epilogue tests 🟢 Answered
• already residual0, residual_mul0 at 6ff2c2c3; thread resolved
• both pass at head (ran); no residual_<n> left (read)
Develop conflicts: 6 files 🟠 OPEN: rebase needed
• causes: 13652 (5 goldens); 14626 moved MLA names to _mla_body.py
• MLA: 14626's hunks alone refuse acc0_0; port renames to _mla_body.py:418, :627 (ran)
• re-bless clean merges too: attention_dense_gfx942 (13205), shard conv_winograd_fwd_rt (14791) (ran)
Bots / CI 🟡 No CI at head
• conflicting PR: no pull_request workflows ran
• 3 ✓ · 1 cancelled (superseded policy-bot run)
• full CI runs after the rebase
Our checks 🟠 Conflicts
• merge vs cee1e23b: 6 files conflict; build, byte identity skipped (ran)
• head: 743 ✓ / 253 skip; tier check ✓, fails on 6ff2c2c3's YAML (ran)
• scratch merge, MLA ported: no refusals; canonical IR as develop's but 6 renames (ran)
Code quality 🟡 Minor
• N2: tier check runs in no CI lane, misses 2 ctests (ran)
• naming rule: one home per engine; follow-up ticket deferral sound (read)
• label helper: one conftest fixture serves both tests (read)
# Sev file:line Finding
N2 🟡 tests/conftest.py:72, tests/test_cxx_test_categories.py:46, tests/cmake/PortableIrTests.cmake:28 New tier check runs in no CI lane and misses two ctests
• impact: installed tree skips it (no YAML); rocke_portable_ir_* untiered, unlisted (ran)
• fix: check installed CTestTestfile.cmake's last LABELS; tier or list both

Utility: 🟢 Positive — ends a latent name clash; its C++ test joins tiered CI.


Legend: 🔴 blocking · 🟠 should-fix · 🟡 minor nit · 🟢 info/good · ⚪ retracted

Follow-up review: first pass by a local qwen3.6 model, verified by the orchestrator (Claude Opus 5.5). Checks: merge with develop and each conflict's cause; scratch merge with the MLA port (MLA tests, representative, library and differential goldens, develop's changed tests); tier check at head, on the old YAML and in the installed layout; CI lane logs; code quality. Flags whether a closer look is needed; not an approval or rejection.

@CongMa13 CongMa13 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.

One new issue is noted inline.

I agree with the following existing comments:

  • Tier-check coverage omits loop-generated tests — cgmillette, comment #6604923588. The check runs through the quick rocke_pytest entry, but its literal-name scan skips two loop-generated C++ test targets.
  • Resolve develop merge conflicts — cgmillette, comment #6595870040. GitHub still reports the current head as conflicting with the base branch.

@cgmillette

Copy link
Copy Markdown
Contributor Author

Rebased on develop and addressed the open feedback:

  • Rebase: develop moved the MLA prefill accumulator names into kernels/mla/_mla_body.py, so this PR's renames (acc<m>_t<t>, rs<tag>_t<t>) now live there. Every golden was re-recorded from the resolved code with its own tool, never merged by hand. Each tool, run on develop without this change, reproduces develop's committed file byte for byte, and every representative case's LLVM IR matches develop's once value names are renumbered, so every golden change comes from the new names alone. The description's re-bless table has the new counts.
  • C++ keywords (@CongMa13, inline on ir.py): both engines now refuse keyword names; answered in the thread.
  • N2, the tier check missed loop-registered tests: the check now configures the platform and reads the installed CTest file the build writes, so it sees every installed C++ test. It found rocke_portable_ir_dom_decoders and rocke_portable_ir_recipe_vm_replay, which now join the quick and ffm-quick lists. The installed test tree has neither the category YAML nor the CMake sources, so the check still runs only from a source tree.

Byte identity is GREEN at all four flavors; the platform and library suites show no failure that develop does not also have.

@cgmillette
cgmillette force-pushed the users/cgmillette/rocke/ssa-name-separator branch from ed1e980 to c8d8552 Compare November 3, 2026 22:07
@cgmillette

Copy link
Copy Markdown
Contributor Author

Targeted to merge in wave 6. Do not rebase / merge till then.

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.

🟡 Changes recommended

The new naming rules break replay of legacy and roller-generated artifacts, while unresolved collisions between declared names and lowering-generated names can still produce invalid LLVM or HIP code.

4 open issues
What changed in this PR

This PR prevents ambiguous SSA value names in rocKE’s Python and C++ builders, updating dependent kernels, tests, and IR baselines to use the new naming convention.

Changes:

  • Separates builder hints from counters and validates author-chosen identifiers.
  • Renames affected kernel parameters and loop values, keeping runtime argument mappings aligned.
  • Adds naming regression tests and CTest-category checks, and refreshes name-sensitive assertions and goldens.
File Description
dnn-providers/​hip-kernel-provider/​rocke/​platform/​tests/​test_rocke.py Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​tests/​test_gpu_references.py Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​tests/​test_cxx_test_categories.py Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​tests/​golden/​rocke_representative_ir_sha256/​nontemporal.json Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​tests/​golden/​rocke_representative_ir_sha256/​grouped_gemm.json Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​tests/​golden/​rocke_representative_ir_sha256/​fused_moe.json Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​tests/​golden/​rocke_representative_ir_sha256/​conv_winograd_gemm_wmma.json Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​tests/​golden/​rocke_representative_ir_sha256/​conv_winograd_fused_1d_wmma.json Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​tests/​golden/​rocke_representative_ir_sha256/​conv_wgrad_two_stage.json Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​tests/​golden/​rocke_representative_ir_sha256/​conv_wgrad_reduce.json Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​tests/​golden/​rocke_representative_ir_sha256/​conv_fwd_split_k_reduce.json Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​tests/​golden/​rocke_representative_ir_sha256/​conv_direct_fwd_wmma.json Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​tests/​golden/​rocke_representative_ir_sha256/​conv_direct_fwd_smallk_wmma.json Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​tests/​golden/​rocke_representative_ir_sha256/​conv_direct_fwd_smallc_wmma.json Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​tests/​golden/​rocke_representative_ir_sha256/​conv_dgrad_smallc_wmma.json Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​tests/​golden/​rocke_representative_ir_sha256/​conv_dgrad_patch_wmma.json Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​tests/​golden/​rocke_representative_ir_sha256/​attention_d256.json Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​tests/​golden/​rocke_representative_ir_sha256/​attention_d128_swa.json Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​tests/​core/​test_value_names.py Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​tests/​core/​test_unsigned_int_ops.py Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​tests/​core/​test_scf_if_else_results.py Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​tests/​core/​test_mx_scale_decode.py Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​tests/​core/​test_mx_scale_decode.cpp Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​tests/​core/​test_mma_operand_register_type.py Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​tests/​core/​test_lowbit_loop_types.py Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​tests/​core/​test_lds_alias_scopes.py Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​tests/​core/​test_global_ptr_offset.py Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​tests/​core/​test_gfx1250_tdm.py Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​tests/​core/​test_gfx1250_prefetch_users.py Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​tests/​core/​test_gfx1250_cluster.py Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​tests/​core/​gfx1250_scaled_wmma_llvm23.json Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​tests/​core/​future_intrinsic_lowering.cpp Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​tests/​conftest.py Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​tests/​cmake/​CoreTests.cmake Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​python/​rocke/​tests/​helpers/​tiling/​test_demo_ir_snapshot.py Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​python/​rocke/​tests/​helpers/​tiling/​tensor_transforms/​golden/​emit_xor.txt Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​python/​rocke/​tests/​helpers/​tiling/​tensor_transforms/​golden/​emit_two_inputs.txt Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​python/​rocke/​tests/​helpers/​tiling/​tensor_transforms/​golden/​emit_rebase.txt Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​python/​rocke/​instances/​common/​moe_fused_mega_fp8.py Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​python/​rocke/​helpers/​fusion_lowering.py Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​python/​rocke/​helpers/​fuse.py Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​python/​rocke/​examples/​gfx950/​fused_mega_moe/​levels/​level_09_iglp.py Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​python/​rocke/​examples/​gfx950/​fused_mega_moe/​levels/​level_08_dtla.py Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​python/​rocke/​examples/​gfx950/​fused_mega_moe/​levels/​level_07_k128.py Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​python/​rocke/​examples/​gfx950/​fused_mega_moe/​levels/​level_05_gateup_interleave.py Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​python/​rocke/​examples/​gfx950/​fused_mega_moe/​levels/​level_04_mtile_fix.py Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​python/​rocke/​examples/​gfx950/​fused_mega_moe/​levels/​level_03_down_pipeline.py Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​python/​rocke/​examples/​gfx950/​fused_mega_moe/​levels/​level_02_fusequant.py Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​python/​rocke/​examples/​gfx950/​fused_mega_moe/​levels/​level_01_tilem16.py Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​python/​rocke/​examples/​gfx950/​fused_mega_moe/​levels/​level_00_baseline.py Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​python/​rocke/​core/​ir.py Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​dsl_docs/​ir_lowering/​ir_model.md Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​cpp/​instances/​gfx950/​attention_tiled_3d_segment_prologue.cpp Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​cpp/​instances/​gfx950/​attention_tiled_2d_public_entry_glue.cpp Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​cpp/​instances/​gfx950/​attention_tiled_2d_ctx_prologue.cpp Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​cpp/​instances/​gfx942/​attention_tiled_3d_gfx942_attn_tiled_3d_segment_setup.cpp Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​cpp/​instances/​gfx942/​attention_tiled_2d_ctx_prologue.cpp Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​cpp/​instances/​common/​moe_fused_mega_fp8_stage1_gateup.cpp Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​cpp/​instances/​common/​moe_fused_mega_fp8_glue.cpp Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​cpp/​instances/​common/​conv_direct_wgrad_tiled.cpp Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​cpp/​instances/​common/​conv_direct_grouped_build_generic.cpp Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​cpp/​instances/​common/​conv_direct_grouped_build_depthwise_tiled.cpp Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​cpp/​instances/​common/​conv_direct_grouped_build_depthwise_spatial.cpp Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​cpp/​instances/​common/​conv_direct_grouped_build_depthwise_packed.cpp Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​cpp/​instances/​common/​conv_direct_grouped_build_depthwise_dgrad_win.cpp Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​cpp/​instances/​common/​conv_direct_grouped_build_depthwise_dgrad_stream.cpp Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​cpp/​instances/​common/​conv_direct_dw_wgrad_mfma.cpp Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​cpp/​include/​rocke/​ir_internal.h Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​cpp/​include/​rocke/​instance_gfx950_attention_tiled_3d_internal.h Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​cpp/​include/​rocke/​instance_gfx942_attention_tiled_3d_internal.h Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​cpp/​core/​ir/​ir_flow.cpp Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​platform/​cpp/​core/​ir/​core_builder.cpp Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​library/​tests/​test_attention_unified_lse.py Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​library/​tests/​test_attention_unified_2d_lse_ir.py Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​library/​tests/​test_attention_tiled_3d_running_max.py Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​library/​tests/​test_attention_builds.py Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​library/​tests/​golden/​kda_gfx942_ir_sha256.json Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​library/​kernels/​mla/​_mla_body.py Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​library/​kernels/​gfx950/​attention_tiled_3d.py Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​library/​kernels/​gfx950/​attention_tiled_2d.py Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​library/​kernels/​gfx950/​attention_dense.py Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​library/​kernels/​gfx942/​attention_tiled_3d.py Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​library/​kernels/​gfx942/​attention_tiled_2d.py Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​library/​kernels/​gfx942/​attention_dense.py Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​library/​kernels/​gfx1250/​attention_tiled_3d.py Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​library/​kernels/​gfx1250/​attention_tiled_2d.py Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​library/​kernels/​common/​conv_direct_wgrad_tiled.py Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​library/​kernels/​common/​conv_direct_grouped.py Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​library/​kernels/​common/​conv_direct_dw_wgrad_mfma.py Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​library/​kernels/​common/​attention_unified.py Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​library/​kernels/​common/​attention_dense_bwd_dq.py Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​library/​kernels/​common/​attention_bwd_dq.py Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​library/​builders/​gfx1250/​attention/​tiled_2d_verify.py Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​library/​builders/​gfx1151/​attention/​fmha_singlewave.py Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​rocke/​library/​builders/​gfx1151/​attention/​fmha_regblocked.py Updated as part of this pull request.
dnn-providers/​hip-kernel-provider/​ROCKE_ENGINE_test_categories_external.yaml Updated as part of this pull request.

Review effort: Max

cgmillette and others added 5 commits November 4, 2026 12:39
The builder named each value "%<hint><n>": the op's name hint followed
by the builder's counter. When a hint ended in digits the two ran
together. The 16-wide zero vector made as value 5 (hint "cz16") and the
1-wide zero vector made as value 65 (hint "cz1") were both "%cz165", and
the lowered module defined that name twice.

Both engines now put "_" between the hint and the counter: "%cz16_5" and
"%cz1_65". The counter is always the digits after the last "_", so two
builder names are equal only when their hints and their counters are
equal. The separator is "_" because the HIP lowering prints value names
as C identifiers, and because the LLVM lowering names its own
temporaries "<hint>.<n>", so the two kinds of name cannot meet.

Names the author picks (kernel parameters, loop induction variables and
loop-carried values) are refused when they end in "_" and digits, the
form builder names now take, or when they are not identifiers. A name
hint that is empty or starts with a digit is refused too. Both engines
give the same messages. The names that broke the rule are renamed, in
both engines where both build them: the attention parameter
qq_bias_stride_0 (now qq_bias_stride0), the fused epilogue's residual
parameters (now residual<i> and residual_mul<i>), and loop names in the
direct convolution kernels, the fused MoE fp8 kernel and its example
levels, dense attention on gfx942 and gfx950, MLA prefill, the attention
backward dQ kernels and two gfx1151 attention builders. The gfx950
unified attention packs of the hipDNN kernel ingestor compare their
kernel argument names with the builder's, so they use the new
qq_bias_stride0 too.

The IR of almost every kernel changes, in its value names only. This
re-blesses, each with its own tool or by the procedure its test checks:
the representative IR golden (every family shard, at every flavor), the
library IR goldens, the tiling demo snapshots and transform emit
goldens, the scaled-MMA and NVFP4 hash tables in tests/core, the tests that pin
value names, and every entry the differential golden already has, at
every flavor and in the canonical section (where only the fused MoE
end-to-end entries change, since they carry the renamed loop names).

tests/core/test_value_names.py and .cpp check the separator with the
cz16 / cz1 pair and every refusal, in both engines.

Co-Authored-By: Claude <noreply@anthropic.com>
Add rocke_value_names to the quick and ffm-quick lists in the provider
CTest categories, so tiered CI selects it like the other installed C++
unit tests.

Add a check that every installed C++ test registered in tests/cmake gets
the same provider tier labels, so a new test cannot silently drop out of
tiered CI again. Tests registered before this check that still have no
tier are listed by name; the check also fails if one of them is tiered
or removed without leaving the list. The code that labels CTest names
through the shared category parser moves into a conftest fixture used by
both this check and the reference-label check.

Co-Authored-By: Claude <noreply@anthropic.com>
The HIP lowering prints the names an author picks (kernel parameters,
loop induction variables and loop-carried values) unchanged, as C++
identifiers, so a parameter named "for" lowered to "int for", which does
not compile. Both engines now refuse such a name when it is a C++20
keyword or an alternative operator token ("and", "not", ...), with the
same message. Builder names always end in "_" and digits, so they are
never keywords.

tests/core/test_value_names.py and .cpp check the refusal for a
parameter, an induction variable and a loop-carried value in both
engines, and that a name that only starts with a keyword is accepted.
The Python test also checks that the two engines' keyword tables hold
the same words.

Co-Authored-By: Claude <noreply@anthropic.com>
The tier check read test names from tests/cmake by pattern, so it missed
the two portable IR tests, whose names a CMake loop builds. It now
configures the platform and reads the C++ tests from the installed CTest
file the build writes, so it sees every test the build installs.

The two portable IR tests, rocke_portable_ir_dom_decoders and
rocke_portable_ir_recipe_vm_replay, join the quick and ffm-quick lists
in the provider CTest categories like the other installed C++ tests.

Co-Authored-By: Claude <noreply@anthropic.com>
When a loop-carry fan's Python names are not "<prefix><lane>" (a 2-D
"acc_m<i>_n0" fan, say), the portable-IR roller names the fan's iter-args
itself, as "__fa<fan>_<lane>". Those names reach the builder as
loop-carried value names, and a name ending in "_" and digits is refused
there, so the C replay of such a recipe failed. The roller now names them
"__fa<fan>_l<lane>".

A new test rolls such a fan, replays it through the standalone C replay
at sampled and held-out lane counts, and checks the result matches
Python's LLVM IR once value names are renumbered. The renumbering helper
the parity driver already used is now public so the test can share it.

Co-Authored-By: Claude <noreply@anthropic.com>
@cgmillette
cgmillette force-pushed the users/cgmillette/rocke/ssa-name-separator branch from c8d8552 to 581e472 Compare November 4, 2026 17:42
@cgmillette

Copy link
Copy Markdown
Contributor Author

Rebased on develop and addressed the open feedback:

  • Rebase: develop moved the guarded depthwise loop into a shared C++ helper and added new depthwise convolution and NVFP4 GEMM kernels, so this PR's _i<i> loop names now live in that helper and in the new Python twin (dfw_y<y>_i<i>). Develop's new hipDNN kernel-ingestor packs for gfx950 unified attention check kernel argument names against the builder's, so they now use qq_bias_stride0, and develop's new optimization-barrier tests name their parameters value<i>. Every golden was reset to develop's copy and re-recorded from the resolved code with its own tool. Each tool, run on develop, reproduces develop's committed file byte for byte, and every representative case's LLVM IR matches develop's once value names are renumbered, at all four LLVM flavors. The description's re-bless table has the new counts.
  • Copilot, roller names: confirmed and fixed in a new commit. The roller now names the loop-carry fans it has to name itself __fa<fan>_l<lane>; a new test replays such a fan through the standalone C replay and failed with the reported error before the fix.
  • Copilot, the other three threads: answered inline. They describe name clashes that already exist on develop or a compatibility case with no deployed artifacts; none is changed by this push.

Byte identity is GREEN at all four flavors; ctest passes; the platform and library suites show no failure that develop does not also have.

@CongMa13 CongMa13 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.

No new issues found. I agree with the following existing comments:

  • Legacy portable-IR recipes can be rejected after an engine upgrade — Copilot, thread PRRT_kwDOOej8qc6zYsQ_, comment #4461936586. The portable-IR documentation describes persisted bundles as readable by older reader levels, but this change makes the current reader reject some names those recipes can contain.
  • A shared-memory declaration can collide with an accepted parameter — Copilot, thread PRRT_kwDOOej8qc6zYsSk, comment #4461936742. A parameter named smem_1_storage can collide with the storage declaration generated from %smem_1 by both HIP lowerers.
  • Two caller-selected values can still receive the same SSA name — Copilot, thread PRRT_kwDOOej8qc6zYsS1, comment #4461936765. A parameter and a default loop induction variable can both be named k0.
  • Resolve the develop merge conflict — cgmillette, comment #6595870040. GitHub currently reports mergeable_state=dirty.

@cgmillette

Copy link
Copy Markdown
Contributor Author

Automated review: Model - qwen3.6:35b-a3b-coding-mtp-q4_K_M, effort: high

PR #14846 — never give two values the same name (cgmillette, AICK-2799) — 🟠 Follow-up: 29 conflicts; rebase needed

Prior item Status
Our 11-03: develop conflicts (6 files) 🟠 OPEN: now 29 files
• 15024 causes 23 (tiled attention, both engines, gfx950 packs); 14811, 14448: ir.py, conftest.py, tiling goldens (ran)
• ir.py: keep develop's _refuse_taken_loop_names beside the PR's checks
• wave-6 rebase: re-record every golden from develop's copy, never hand-merge; 4 more merge clean but out of date (ran)
Our 11-03 N2: tier check in no CI lane, misses 2 ctests 🟡 OPEN
• half fixed 849214ee: both rocke_portable_ir_* ctests tiered; check passes at head (ran)
• still skips in the installed tree, so no CI lane runs it (ran)
• fix: read the installed CTest file's labels (ctest --show-only=json-v1); no YAML needed
shumway (11-02) APPROVED 🟢 APPROVED 6ff2c2c3
• older head; still counts on develop
• not covered: keyword refusal 173770eb, roller fix 581e4728, two rebases
• review still required (read)
CongMa13 (11-03) C++ keywords as names 🟢 FIXED 173770eb
• both engines refuse them, same message (read)
• test_value_names.py 24 ✓ at head; C++ ctest not built here (ran)
Copilot (11-04) roller names refused by C replay 🟢 FIXED 581e4728
• iter-args now __fa<fan>_l<lane>; new replay test passes (ran)
• same test fails with the fix reverted (ran)
Copilot (11-04) older recipes refused 🟡 DEFERRED
• author: "no recipe or bundle is committed"
• sound for now; the follow-up names no ticket
Copilot (11-04) smem name collision 🟡 DEFERRED AICK-2983
• same clash exists on develop (author's example) (read)
• sound: the root fix renames author names in HIP output
Copilot (11-04) two author names equal 🟡 DEFERRED AICK-3029
• sound; needs a declared-name set in both engines
• develop's 14811 now refuses nested loop names reused (read)
CongMa13 (11-06) review at head 🟢 No new issues
• agrees Copilot's 3 deferred items and the conflict stay open
Bots / CI 🟡 Red, not the PR's
• fails: 4 math-libs stages, hipCCL configure (libhipcxx), develop's 14976
• run's merge ref predates the revert 15089; attempt 2 reused it (read)
• 47 skipped, so no rocKE shard ran; hipDNN superbuild ✓; 23 ✓, 1 cancelled
• merge: dirty; the rebase push runs CI afresh
Our checks 🟠 Conflicts
• merge vs 1702865a: 29 files; build, goldens, byte identity skipped (ran)
• head: 1312 ✓ / 572 skip; value names, roller, tier check ✓ (ran)
• merge tree: 6 old qq_bias_stride_0 names merge clean (N3) (ran)
• rules 1–3: clean; 4 text-I/O hits read ASCII-only files (ran)
Code quality 🟡 Minor
• N4: keyword list in two hand-written copies; parity check skips in CI (ran)
• N2: tier check sees loop-built ctests; still no CI lane (ran)
• rebase renames match in both engines; roller test reuses helpers (read)
# Sev file:line Finding
N3 🟠 kernels/gfx942/attention_tiled_2d.py:6068, packs/Gfx942AttentionUnified3dArguments.hpp:260 Develop's new code keeps qq_bias_stride_0 where git merges cleanly
• impact: 15024's two gfx942 2D params are refused; 14259's gfx942 3D pack checks argument names, so its signature no longer matches the kernel
• fix: rename all 6: attention_tiled_2d.py:6068, :6393; Gfx942AttentionUnified3dArguments.hpp:260; TestGfx942AttentionUnified3dSignature.cpp:78; gen_gfx942_attention_unified_3d_arguments.py:230; test_attention_tiled_runtime_shape_numeric.py:388
N4 🟡 core/ir.py:467, cpp/core/ir/core_builder.cpp:245 C++ keyword list kept in two hand-written tables
• impact: their parity test reads the C++ source and skips installed, so CI never compares them (ran)
• fix: one Python source; generate the C++ table, as arch_domain_table.inc is

Utility: 🟢 Positive — closes a latent SSA name clash in both engines; rebase pending.


Legend: 🔴 blocking · 🟠 should-fix · 🟡 minor nit · 🟢 info/good · ⚪ retracted

Follow-up review: first pass by qwen3.6 (local), verified by the orchestrator (Claude Opus 5.5). Checks: merge with develop and each conflict's cause; old names left outside the conflicts; goldens develop changed since the base; the delta's tests at head (value names, roller with its fix reverted, tier check); CI logs; code quality. Flags whether a closer look is needed; not an approval or rejection.

This branch has not been deployed

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

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants