Files
BFM-decomp/cookbook/C0097.md
T

2.5 KiB
Raw Blame History

§86 — Pinned-exemplar templatability is a PER-FAMILY property, not a per-member rate; and the §42e pin guard is now over-conservative (Phase 29 SESSION-20)

The guard refuses a class that largely works

family_sweep's §42e guard skips any family whose exemplar carries register __asm__ pins. Measured on the zero-crack pool: of 1,083 candidate members in the top 8 FREE families, 680 (63%) were refused BEFORE any gate ran. Re-run with --allow-pins (letting the byte-gate arbitrate, G3/P9): 268 of 680 banked, and ZERO cc1 crashes across hundreds of pinned compiles. That confirms the guard's original motivation is gone: the SIGABRT it protects against was Phase 27's extract_unit macro-drop, not a compiler limit (§42e-CORRECTION). The guard is now protecting against a bug that no longer exists.

THE LAW: all-or-nothing PER FAMILY

The headline "37%" from a 19-member sample was an ARTEFACT OF MIXING FAMILIES. The real distribution:

exemplar members banked
func_801749C8 137 137 (100%)
func_8014C6F4 137 137 (100%)
func_80133AB0 136 4
func_8014CF04 137 0
func_80143D28 136 0

Two families at 100%, three at ~1%. Whether a pinned exemplar templates is a property of the FAMILY (does its pin set survive symbol substitution into a sibling TU?), not a per-member lottery. This matches SESSION-19's func_8017A4AC, which banked ×134 with pins — a whole family, not a fraction.

⇒ THE PROCEDURE (do this, not a blanket sweep)

for each pinned family:
    probe ONE member  ->  banks?  yes: sweep the whole family
                                  no : SKIP IT ENTIRELY

Cost measured: the blanket sweep spent ~412 futile gate cycles (≈60% of the run) grinding three families that were never going to bank. The 1-member probe reduces that to 5 probes + 2 sweeps. A sample that straddles families reports their AVERAGE and hides the bimodality — sample per-family, never per-pool. (Counterpart to §80: a measurement is scoped to what it was taken over.)

Why the two live families differ from the three dead ones — the open question

Not yet diagnosed. The likely axis is whether the pinned registers are caller-saved across a jal (§74's corrupting form) in the sibling's register pressure, versus pins that only fix a local allocno. Diagnose before extending --allow-pins fleet-wide — the byte-gate makes a wrong guess free, but a wrong PROCEDURE costs a sweep.