mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-09-26 21:36:06 -04:00
9d78fc4085
- the move: narrow every local in the counter's def-use chain together — the counter, its +/-1 temp and the copy-back — and do it for BOTH chains at once. Four instructions were MISSING, not miscoloured, three of them the moves the $0 pin was faking. insert_regs (cse.c:1029-1032, early bail :1018-1020) puts two pseudos in one equivalence class only when their MODES match, so an all-int copy-back is collapsed and swept, while the narrowed one is a truncation: no equivalence, the wide temp stays live and reaches reload as the move the target has. The fourth instruction is strength_reduce minting a shift giv from a wide counter whose every use is a cast; a HImode pseudo cannot be that giv. delever --propagate: 127 of 127 sibling(s) banked, 0 refused. 26,202 -> the census below. - R20 narrow_chains: the agent PROVED the joint form is necessary, and the generator reproduces it. Single declarations scored 45/72/51/24, each chain alone 43, both chains together 0 — every intermediate worse than the search's own best of 11, so a beam over R12's one-declaration width moves cannot reach the answer from either side. Seven runs and 4,811 compiles stalled at 11; R20 offers six candidates and the right one is a single compile. - known-true check: run on b3's pre-bank text, R20's joint signed candidate scores 0 (MATCH) and its single-chain candidates score 43 and 51 — the agent's own hand-measured numbers, reproduced by the tool. - chains are built conservatively from the body's text (two locals linked when one is assigned from the other, through a cast or a +/- constant), and only whole components are offered, so the partial narrowings the measurement showed are always worse are never generated. Selftest: the chain is found whole, an unlinked local is not pulled in, and a body with no linked pair offers nothing.