Skip to content

docs(shader): restore the measured-on provenance for the f64 denormal rule - #15648

Open
brumskysb wants to merge 1 commit into
boykopovar:mainfrom
brumskysb:fix/fma-provenance
Open

brumskysb wants to merge 1 commit into
boykopovar:mainfrom
brumskysb:fix/fma-provenance

Conversation

@brumskysb

Copy link
Copy Markdown

What

Restores the provenance on the v_fma_f64 and v_div_fmas_f64 denormals entry, which
my own earlier PR (#15161) trimmed down to a bare (gfx1101):

- follow the `FLOAT_MODE` f16/f64 denormal field (gfx1101);
+ follow the `FLOAT_MODE` f16/f64 denormal field, as measured on RDNA3 (gfx1101, RX 7700 XT);

Why it matters more than it looks: this file's value is that a reader can tell what was
measured from what was inferred, and an ISA name hanging off a rule does neither. (gfx1101)
does not say the rule was measured at all, and it does not say on which part. The restored clause
says both. The same PR also dropped with the hardware oracle; that one stays out for length, and
the row counts that follow in the entry — 3,000 rows per condition on gfx1035, 300 random biased
triples — carry the same evidence.

No behaviour changes, and no measured number changes. One line, one span.

Length was not raised to buy the space. The restored clause costs 34 characters and the
entry had 17 to spare, so 17 come from compression — applied only to phrases I added in #15161,
where meaning is preserved exactly:

was now saves
flushes in modes 0 and 1 and is kept in 2 and 3 flushes in 0 and 1, kept in 2 and 3 12
a product that rounds up to 2^-1022 a product rounding up to 2^-1022 3
with an unbounded exponent with unbounded exponent 3
is kept in every mode is kept in all four 2

983 + 34 − 20 = 997 characters, under the 1,000 limit, so no debt-length warning appears.

The cost is headroom: this leaves 3 characters, where #15161 had left 17. Any future edit to
this entry will have to trim first. Putting the provenance back was worth that, but it should be
on the record rather than discovered later by whoever edits next.

Tested

No measurement in this PR: it restores a condition the original measurement recorded and that a
length trim removed. Nothing in it is a new claim, so there is nothing new to test.

What was checked:

  • The five measured facts in the entry are unchanged: the operand flush on bit 0, the result flush
    on bit 1, the 2^-1022 rounding product, the exact tie's behaviour per mode, and the VCC scale
    on v_div_fmas_f64.
  • check_entry_edit.py confirms the edit is confined to this one entry and that every dropped
    span is declared (field (gfx1101);, an, that rounds, every mode, modes, 1 and is).
  • tools/check_conventions.py --base origin/main reports no debt-length finding for this entry.
  • No other open PR edits this entry.

Checklist

  • Based on current main; no other open PR implements the same functions
  • One topic per PR; follow-ups go in a new PR
  • No comments in code except technical debt
  • Unimplemented paths throw (NotImplemented_nid_no_patch); silent stubs are listed under Silent stubs in their library's technical debt file
  • No notes, investigation .md files or images added to the repository (attach them to this PR)
  • New third-party code is a submodule built from source
  • Generic behaviour, not specific to one title
  • Depends on: none
  • Fixes: none
  • Unblocks: none
  • GPUs tested: n/a (docs only; no measurement in this PR)
  • AI-assisted: yes

@github-actions github-actions Bot added the docs label Nov 3, 2026

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

@brumskysb thanks, the restored clause matches the original. 9ae19f9711 added the entry with "follow the FLOAT_MODE f16/f64 denormal field as measured on RDNA3 (gfx1101, Radeon RX 7700 XT) with the hardware oracle", and fa87e7a722 (merged in #15161) cut that to "(gfx1101)". The four rewordings keep their meaning: the entry still says "denorm16 0..3" before "kept in all four", and "flushes in 0 and 1, kept in 2 and 3" refers to those same modes.

What I checked on head 5be660736d:

  • the edited entry (docs/dev/debt/shader.md:136) is 998 characters by my count, under the 1,000 limit. That's one more than your 997, which leaves 2 to spare;
  • tools/check_conventions.py --base upstream/main: all checks passed, and every relative link in the changed file resolves;
  • tools/pr_overlap.py --branch: no open PR shares lines. It couldn't compare 12 PRs that conflict with main and touch docs/dev/debt/shader.md (#9335, #9387, #9748, #10233, #11483, #12548, #13486, #14212, #14217, #14218, #14853, #14871). None of their diffs edits this entry.

Approving.

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.

2 participants