Commit Graph

4002 Commits

Author SHA1 Message Date
Drew T e7679b51ff docs(phase-32): T4b hand pass — row (c) func_80039308 PLATEAU at 4 (§501-O phantom-slot census for a leaf; ledger row); 🛑 CHECKPOINT refreshed for the pause: (a) PROVED · (b) BANKED commit:4001 · (c) PLATEAU 4 · (d) NEXT (sibling search first), then T4b close and T5
- (c): cnt's slot is spill_stack_slot[23] (evicted from $s7), so the phantom @0x8 must be an initial-loop no-traffic slot; every producer refuted on dump facts (leaf: no save area; LO spilled after GR and products alternate to GR_REGS — C3 measured; no unallocated single-block equiv pseudo; expand-time locals precede; 13 lh single-use, no lb). Rows 49/50 = two move_movables hoists in body order.
- row (d) read only (rtu DIFF 13 re-verified); brief + step 0 (§501-N banked-sibling search on its symbol set) in the checkpoint
- no src/ change in this commit; fleet R22 owed at the T4b close (last check-all 218/218 before the (b) bank)
2026-09-06 12:31:08 -06:00
Drew T 3e90db193f docs(phase-32): T4b hand pass — row (b) harvest: cookbook §501-N (port the banked sibling's spelling; the asm-label u32 array alias unlocks cse's OT base binding), accelerators (13), NOTES + 7 measured variants; ledger 4 open; bank.sh session trailer from $CLAUDE_SESSION
- func_800CF408 banked in commit:4001 (rtu MATCH 178/178 in the real TU; make build BINARY=md_MAIN_007 -j8 rc 0; sha 2ff702b6… == config/check.md_MAIN_007.sha)
- post-bank: twin_rescan 3 open / 0 newly free; verbatim_check --strict 5==5; backlog render 4 open (row pruned)
- CURRENT_PHASE.md: S84 log entry + checkpoint refreshed (rows (c)(d) next; fleet R22 owed at the T4b close)
2026-09-06 12:08:11 -06:00
Drew T 8fa12bc226 feat(phase-32): T4b hand pass — md_MAIN_007:func_800CF408 (178 ins) BANKED byte-identical: the banked sibling func_800CD92C's spelling ported (libgpu P_TAG shape, u32 array view of the OT symbol via the fleet's asm-label alias); zero pins, zero asm bodies (S84)
- func_800CF408: draft .run/P32/t4c/bank/func_800CF408.c (hand agent, agent MATCH re-verified by coordinator rtu_match in the real TU)
- one build for the same-TU batch: make build BINARY=md_MAIN_007 -j8 rc 0; sha1 2ff702b605ab5cfc18474c464c4c07e5f8ffd48c == config/check.md_MAIN_007.sha (BYTE-IDENTICAL)
- src/md_MAIN_007/md_MAIN_007.c: 0 INCLUDE_ASM left
2026-09-06 12:06:00 -06:00
Drew T b6fd3fff28 docs(phase-32): T4b hand pass — func_80032A74 PROVED at 1 by producer census (§501-M); ghost_census.py + cc1_dumps.sh repair; backlog tie-break repair
- main:func_80032A74 (422 ins, closeness 1): the residual is ONE reload-time slot at sp+0x48 (u16 draft = 422/422 code, DIFF 22 frame
  rows; s16 draft = DIFF 1 at idx 244 lh vs lhu). Every post-parameter slot producer enumerated from gcc-2.7.2 (reload1.c:658 ghost
  alter_reg / caller-save.c:249 area / reload1.c:879 invalid-equiv / reload1.c:3499 spill_stack_slot) and refuted on the bytes: combine's
  newi2pat ghosts re-derive a narrow load and the site is lhu (no lb, no double load); a save area without sw/lw needs sched.c:4962
  staleness and no register-only insn shares a block with a call; $t0 holds no pseudo; LO mult results retry into GR_REGS. Verdict
  PROVED at 1 (pin kept with the verdict; ledger WALL-PROVED).
- NEW mechanism measured: local-alloc.c optimize_reg_copy_2 (tmp = x; tmp op= c; x = tmp) mints a ghost with stale refs, but after
  regclass -> GR_REGS, allocated, no slot (P13/P14). 18 isolated reproducers, 0 draft variants; cookbook §501-M; accelerators (12).
- tools/ghost_census.py (new): ghosts in a .lreg dump with their class (ST_REGS => slot). tools/cc1_dumps.sh: prints the .frame line,
  ins count, spill lines and the census; the under-counting standalone-(use) grep is gone. SETUP rows (R21).
- tools/backlog.py: load_best kept the EARLIEST record at equal closeness (docstring said latest) — the S84 row never rendered; fixed.
- CURRENT_PHASE.md: S84 log + refreshed 🛑 checkpoint (rows (b)(c)(d) next, then T5). No src/config/carve change; fleet check-all
  218/218 rc 0 at the S84 preflight.
2026-09-06 11:44:40 -06:00
Drew T bfeef0c3a1 docs(phase-32): backlog ledger rows from the T4b close (render-time pruning of the banked rows) 2026-09-05 23:56:32 -06:00
Drew T f1f3346cdf docs(phase-32): T4b close — make tools-health OK quoted in the 🛑 checkpoint; log kept 2026-09-05 23:56:17 -06:00
Drew T efdb4c12a2 docs(phase-32): 🛑 CHECKPOINT — T4b first pass complete (11 of 15 banked, 4 carried with hand-crack briefs; Drew: hand-crack next session, no agents); fleet R22 218/218 at 23:36; make report instr 100.0% / distinct 100.0% (90,982/90,984) / fn 100.00% / 4 stubs; census 4 / 1,607 ins 2026-09-05 23:52:36 -06:00
Drew T fcec654163 docs(phase-32): cookbook §501-L — when two dials share a slot they couple (func_800CF408's floater cure vs the qty_compare contest; the decoupling lever) 2026-09-05 23:34:08 -06:00
Drew T 77b63f0bb5 docs(phase-32): T4b — func_800CF408 49 -> 3 NEAR, zero pins (Fable, 499k tokens): §501-H closers; residual = §501-H's floater mechanism coupled to the $t2/$t3 qty_compare contest; backlog row with the decoupling lever; all 15 first-pass rows complete (11 MATCH / 4 NEAR) 2026-09-05 23:33:33 -06:00
Drew T 90b2425ee0 docs(phase-32): cookbook §501-J (a proved tree wall is not an RTL wall — §474's floor built at RTL level via EXPAND_SUM, func_80011380) + §501-K (sched2's /s-store exemption and a pseudo's own slot vs a hand pad, func_800CF6D0); checkpoint §1b: 11 banked, 1 in flight, 1 pin left 2026-09-05 23:23:31 -06:00
Drew T 6f2731f0db docs(phase-32): T4b (11) ledger — func_800CF6D0 banked, backlog re-rendered, the Fable draft + report + verdict kept 2026-09-05 23:22:56 -06:00
Drew T 228928dbec feat(phase-32): T4b (11) — md_MAIN_007: func_800CF6D0 (249 ins) BANKED byte-identical 2ff702b6 — the 137-row plateau falls with zero pins: the QI/HI store split was sched2's true_dependence exemption for /s varying stores (cast field stores restore it), ob assigned before block 1 wins the $t2/$t3 flow ref-count tie, and the folded-sum pseudo's own 4-byte slot IS the 0x18 frame (Fable agent)
- func_800CF6D0: draft .run/P32/t5x/fable/func_800CF6D0.c (fable agent, agent MATCH re-verified by coordinator rtu_match in the real TU)
- one build for the same-TU batch: make build BINARY=md_MAIN_007 -j8 rc 0; sha1 2ff702b605ab5cfc18474c464c4c07e5f8ffd48c == config/check.md_MAIN_007.sha (BYTE-IDENTICAL)
- src/md_MAIN_007/md_MAIN_007.c: 1 INCLUDE_ASM left
2026-09-05 23:22:46 -06:00
Drew T 444e8ab4b5 docs(phase-32): T4b (10) ledger — func_80011380 unpinned (1 wall remains: func_80032A74), backlog re-rendered, the Fable draft + report + verdict kept 2026-09-05 23:22:09 -06:00
Drew T 35fa116741 feat(phase-32): T4b (10) — main: func_80011380 (192 ins, boot -O0) BANKED byte-identical 143dbb89 via gate_main — the §474 "PROVED C-level floor" falls: a proved TREE wall is not an RTL wall — (D_80074784 * 2 + 1) * 2 - 2 keeps MULT(PLUS(MULT(i,2),1),2) past fold and the expander's distributive law rebuilds the nested multiply (Fable agent)
- pinned since S76/S79 as PROVED (§474: fold-const.c:882 split_tree merges MULT(MULT(i,2),2) in every C spelling; the two escapes
  each cost one instruction — stupid.c adjacency / expand_decl use-brackets); 20 spellings + statement-expression + register
  temp forms measured; the S83 hand pass measured four block-scoped forms at 193/131
- the mechanism (dumps + source): split_tree only decomposes MULT/PLUS/MINUS and never distributes MULT over PLUS, so
  MULT(PLUS(MULT(i,2),1),2) survives fold; expr.c:5368's EXPAND_SUM distributive law returns (plus (mult (mult X 2) 2) 2);
  both_summands (expr.c:5248) + plus_constant cancel the +2 against the -2 into the bare symbol; memory_address -> force_operand
  expands the two expand_mult copy;sll pairs adjacent (expmed.c:2227/2244) with no note or variable, so stupid.c's born+2
  rule 2-colours v1/a0 exactly as the target and expand_binop's late copy_to_mode_reg(sym) gives la $a0 / addu / lbu 0()
- ruled out from source: a hard-reg pin + shift outer form (191, LENGTH-DRIFT — a REG index makes (plus sym reg) a legitimate
  MIPS address so la/addu vanish: the target's la;addu;lbu shape REQUIRES the index to reach memory_address as a MULT rtx),
  COMPOUND_EXPR shield (fold distributes), SAVE_EXPR via ?:, COND shields, builtin pseudo-constants, pin+MULT
- draft .run/P32/t5x/fable/func_80011380.c; report .run/P32/t5x/reports/func_80011380.md; coordinator rtu_match MATCH 192/192
  in src/boot.c (--o0); gate_main slate_11380: BANKED, 143dbb89 BYTE-IDENTICAL; all 15 jal callees + data-symbol counts equal
- main open 3 -> 2 (func_80032A74 pinned NEAR 1; func_80039308 NEAR 4)
2026-09-05 23:21:54 -06:00
Drew T 395333f233 docs(phase-32): decision-log P32 S83 T4b (R31) — the final-15 directive: hand pass 0 banks, Fable agents 9 of 12 (six former walls), costs and outages; accelerators (10) Fable on the compiler-internals class, (11) attribute the residual to a pass before sweeping 2026-09-05 23:16:50 -06:00
Drew T d7d484abab docs(phase-32): T4b — Drew: no second round this session; close order after the three in-flight rows (R22, report, census, decision-log, accelerators, checkpoint) 2026-09-05 23:14:51 -06:00
Drew T 5e8e22a93c docs(phase-32): 🛑 checkpoint §1b — T4b state: 9 banked (commits listed), 3 NEAR improved with next levers, 3 agents in flight, queue empty; fleet R22 pending before any close 2026-09-05 19:26:57 -06:00
Drew T 9189a7caed docs(phase-32): T4b — func_80039308 17 -> 4 NEAR (Fable, 655k tokens): the alias block + rows 390/391 closed; residual = a phantom 8-byte spill slot at sp+8 (reload's $s7 spill register) + the hoisted constant's preheader order; corrected law: equal-priority load/store ties go to the store via potential_hazard; backlog row + draft + report kept 2026-09-05 19:26:19 -06:00
Drew T da90d3fc28 docs(phase-32): cookbook §501-I — manufacturing §172 producer-2 orphans (an s16 read from memory at each use), the shared-scratch store dependence, the laundered first-statement address (func_8017DC80); T4b row (9 banked) 2026-09-05 19:19:42 -06:00
Drew T d753c44172 docs(phase-32): T4b (9) ledger — func_8017DC80 banked (ov_SC07_002), backlog re-rendered, the Fable draft + report + verdict kept; queue updated 2026-09-05 19:19:06 -06:00
Drew T 825da37bc0 feat(phase-32): T4b (9) — ov_SC07_002: func_8017DC80 (346 ins) BANKED byte-identical — the historic -33 LENGTH wall's last 46 rows: two combine USE-orphans from reading the s16 mode from memory at each use (§172 producer 2), ONE scratch variable carrying the len byte and the tpage word (the sb's anti-dependence), and a laundered first-statement arg = &D_800AF648 (Fable agent)
- func_8017DC80: draft .run/P32/t5x/fable/func_8017DC80.c (fable agent, agent MATCH re-verified by coordinator rtu_match in the real TU)
- one build for the same-TU batch: make build BINARY=ov_SC07_002 -j8 rc 0; sha1 fad71342019704d1dd6ec25f2f3934c97e322624 == config/check.ov_SC07_002.sha (BYTE-IDENTICAL)
- src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c: 2 INCLUDE_ASM left
2026-09-05 19:18:45 -06:00
Drew T 99b65ef94a docs(phase-32): T4b — func_80185810 35 -> 13 NEAR (Fable, 471k tokens): 3 of 4 windows closed (P_TAG bitfield qty priorities, sched1 flush_pending_lists load order, hard-reg dests not boosted); residual = the cl second-set fence; backlog row + draft + report kept 2026-09-05 19:09:36 -06:00
Drew T 066a2f1cce docs(phase-32): cookbook §501-H — large constants are unboosted floaters; the prologue weave is decided by which ready-list stalls eat them (func_800CD92C, zero pins); T4b row (8 banked) 2026-09-05 18:55:38 -06:00
Drew T 511afcf75c docs(phase-32): T4b (8) ledger — func_800CD92C banked (md_MAIN_009 100% C), backlog re-rendered, the Fable draft + report + verdict kept; queue updated 2026-09-05 18:55:02 -06:00
Drew T 4a9a67c59e feat(phase-32): T4b (8) — md_MAIN_009: func_800CD92C (247 ins) BANKED byte-identical d270f695 — the prologue-weave NEAR falls with ZERO pins: m24 wins $t1 by flow ref count (the P_TAG bitfield's foldable re-mask), and the tpage constants float to the top because a multi-set tag load (bitfield RMW shape) fills the RMW latency stalls instead of being birthing-boosted (Fable agent); md_MAIN_009 is 100% C
- func_800CD92C: draft .run/P32/t5x/fable/func_800CD92C.c (fable agent, agent MATCH re-verified by coordinator rtu_match in the real TU)
- one build for the same-TU batch: make build BINARY=md_MAIN_009 -j8 rc 0; sha1 d270f695b793b5c03db159b7aabcc066daa87eda == config/check.md_MAIN_009.sha (BYTE-IDENTICAL)
- src/md_MAIN_009/md_MAIN_009.c: 0 INCLUDE_ASM left
2026-09-05 18:54:50 -06:00
Drew T d7561f2680 docs(phase-32): cookbook §501-G — three passes, three dials (sched1 birthing boost / a phantom USE nop in sched2's model / a local-alloc tie broken by the P_TAG bitfield's flow ref count; func_800CF3E8); T4b row (7 banked, 1 near-proved) 2026-09-05 18:43:53 -06:00
Drew T 5d8b8478fa docs(phase-32): T4b (7) ledger — func_800CF3E8 banked (md_MAIN_003 100% C), backlog re-rendered, the Fable draft + report + verdict kept; queue updated 2026-09-05 18:43:11 -06:00
Drew T cb871087ec feat(phase-32): T4b (7) — md_MAIN_003: func_800CF3E8 (469 ins) BANKED byte-identical — the 27-off alias basin falls: a second live set of the loaded tag kills sched1's birthing boost, the phantom ot-USE that filled the load-delay slot only in the scheduler's model is removed, and the OT link spelled as libgpu's P_TAG bitfield lifts m24's flow ref count so it wins $a2 in local-alloc (Fable agent)
- func_800CF3E8: draft .run/P32/t5x/fable/func_800CF3E8.c (fable agent, agent MATCH re-verified by coordinator rtu_match in the real TU)
- one build for the same-TU batch: make build BINARY=md_MAIN_003 -j8 rc 0; sha1 dd1b32ecf1103c6f7cf1943d25546a3046e17b14 == config/check.md_MAIN_003.sha (BYTE-IDENTICAL)
- src/md_MAIN_003/md_MAIN_003.c: 0 INCLUDE_ASM left
2026-09-05 18:43:03 -06:00
Drew T 3c6d20991f docs(phase-32): T4b — func_80032A74 stays NEAR 1 (Fable, 402k tokens): the 0x48 slot is a GHOST pseudo (combine.c:2306-2313), the caller-save-area hypothesis REFUTED with citations, the only memory-value ghost species is the lh SIGN_EXTEND split; pin annotated, backlog row, draft + report kept 2026-09-05 18:35:27 -06:00
Drew T ce4cdaf750 docs(phase-32): cookbook §501-F — split the CSE quantity when loop.c proves the hoist split unreachable (hard-reg dividend copy + hoisted sign; func_801834A4); T4b row (6 banked) 2026-09-05 18:26:11 -06:00
Drew T 1081b02b66 docs(phase-32): T4b (6) ledger — func_801834A4 unpinned (2 walls remain), backlog re-rendered, the Fable draft + report + verdict kept; queue updated 2026-09-05 18:25:29 -06:00
Drew T ff86e25729 feat(phase-32): T4b (6) — ov_SC03_105: func_801834A4 (106 ins) BANKED byte-identical — a pinned WALL falls: a CSE-quantity split hoists only the division's sign correction (sign = half >> 31 at the loop top; the divide reads a hard-register copy so its mult is not a movable; expand_divmod's sra is CSE'd into sign) (Fable agent)
- func_801834A4: draft .run/P32/t5x/fable/func_801834A4.c (fable agent, agent MATCH re-verified by coordinator rtu_match in the real TU)
- one build for the same-TU batch: make build BINARY=ov_SC03_105 -j8 rc 0; sha1 d305ff6da199b52d0d44023766643a8b661ed524 == config/check.ov_SC03_105.sha (BYTE-IDENTICAL)
- src/ov_SC03_105/ov_SC03_105_jr_80181C84.c: 2 INCLUDE_ASM left
2026-09-05 18:25:13 -06:00
Drew T 78613864e4 docs(phase-32): cookbook §501-E — a register pin forbids that register to every retried allocno (regs_ever_live → bad_spill_regs → retry_global_alloc; func_80020DA4); T4b row (5 banked) 2026-09-05 18:16:51 -06:00
Drew T 9564314095 docs(phase-32): T4b (5) ledger — func_80020DA4 unpinned (3 walls remain), backlog 11 open, the Fable draft + report + verdict kept; resume queue (3-at-a-time) tracked 2026-09-05 18:16:50 -06:00
Drew T b47bc2ea0b feat(phase-32): T4b (5) — main: func_80020DA4 (100 ins) BANKED byte-identical 143dbb89 via gate_main — a pinned WALL falls: the $6 pin on e0 FORBADE $a2 at reload's retry_global_alloc (regs_ever_live seeds bad_spill_regs), so the product took $t0; unpinned + two zero-byte launders steer local-alloc's qty_compare to the target's allocation (Fable agent)
- pinned since S79 as "mflo destination $t0 vs $a2 (REGALLOC-PERM), pinning regresses to 79"; 5 attempts 51->20->14->8->2 +
  permuter_ils null (S80); T4 re-probed DIFF 2; the S83 hand pass measured the variable-reuse form at 80
- mechanism (dumps + source): the mult results are GLOBAL allocnos (mulsi3_internal '=l', mips.md:848; 'pref LO_REG');
  global.c parks m3/m8/m13 in LO, reload spills LO ("Spilling reg 65") and retries via retry_global_alloc (reload1.c:3497)
  with losers = forbidden_regs, seeded from bad_spill_regs = regs_explicitly_used = regs_ever_live at reload entry
  (reload1.c:486, 3651-3660, 709) — the S76 `register s32 e0 __asm__("$6")` made $a2 ever-live, so m13's retry could not
  take it and first-fit gave $t0 ("Register 102 now in 8")
- fix: unpin e0; `__asm__("" : "=r"(e1) : "0"(e1))` immediately before `dst[6] = -e1` (e1's qty 6666 -> 8750, allocated
  before e0's 7894, holds $v1, e0's first fit drops to $a2) + `__asm__("" : "=r"(p1) : "0"(p1))` between p1's andi and sll
  (undoes the global-allocno tie the first launder created; the $t6/$t7/$t8 rotation). Ladder 2 (pinned) -> 37 (unpinned)
  -> 15 -> 6 -> MATCH; a byte-identical alternate launders addr1 after its addu
- draft .run/P32/t5x/fable/func_80020DA4.c; report .run/P32/t5x/reports/func_80020DA4.md; coordinator rtu_match MATCH
  100/100 in src/800.c; gate_main slate_20DA4: BANKED, 143dbb89 BYTE-IDENTICAL
- main open 4 -> 3 (2 pinned walls + func_80039308 NEAR)
2026-09-05 18:16:01 -06:00
Drew T ad62b693a1 docs(phase-32): cookbook §501-D — one value-returning call makes the call a birthing insn (reg_n_sets[$v0]==1 → sched1 max priority → the def above the jal); a second $v0 set via the callee's real return type (func_8017DF28); T4b row (4 banked) 2026-09-05 13:29:17 -06:00
Drew T 32ff170bf3 docs(phase-32): T4b (4) ledger — func_8017DF28 unpinned (4 walls remain), backlog re-rendered, the Fable draft + report + verdict kept; bank.sh takes SPLIT for _jr_ TUs and prints rtu's tail when no verdict line appears 2026-09-05 13:28:35 -06:00
Drew T b31084300f feat(phase-32): T4b (4) — ov_SC06_022: func_8017DF28 (119 ins) BANKED byte-identical — a pinned WALL falls: one value-returning call made reg_n_sets[$v0]==1 and sched1's birthing boost scheduled it above the &mtx def (reorg then filled the jal slot); a second $v0 set via RotMatrixY's real pointer-returning type puts the def after the call and reorg fills the bnez slot (Fable agent)
- func_8017DF28: draft .run/P32/t5x/fable/func_8017DF28.c (fable agent, agent MATCH re-verified by coordinator rtu_match in the real TU)
- one build for the same-TU batch: make build BINARY=ov_SC06_022 -j8 rc 0; sha1 2a7d7d4e2fe2f87a83a065686731c7942b3c70ef == config/check.ov_SC06_022.sha (BYTE-IDENTICAL)
- src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c: 3 INCLUDE_ASM left
2026-09-05 13:28:24 -06:00
Drew T 1f024f8e4b docs(phase-32): cookbook §501-C — the dying-input suggestion vs the birthing boost (func_800CD674); backlog 13 open; bank.sh DRAFT_DIR + R43 hardening; T4b row (3 banked) 2026-09-05 13:26:52 -06:00
Drew T b13e824f76 feat(phase-32): T4b (3) — md_MAIN_009: func_800CD674 (174 ins) BANKED byte-identical d270f695 — the $a3<->$t1 REGALLOC-PERM plateau falls: prim 4 gets a fresh single-death masked-p (local-alloc's dying-input suggestion needs a pseudo BORN at the and) and prim 3's copy gets a trailing zero-byte asm set that defeats sched1's birthing boost (Fable agent). CORRECTION: commits commit:3962 and commit:3963 claimed this bank before it happened — bank.sh had been called without the function name, then with the wrong draft dir; both times it refused or built the unchanged tree
- func_800CD674: draft .run/P32/t5x/fable/func_800CD674.c (fable agent, agent MATCH re-verified by coordinator rtu_match in the real TU)
- one build for the same-TU batch: make build BINARY=md_MAIN_009 -j8 rc 0; sha1 d270f695b793b5c03db159b7aabcc066daa87eda == config/check.md_MAIN_009.sha (BYTE-IDENTICAL)
- src/md_MAIN_009/md_MAIN_009.c: 1 INCLUDE_ASM left
2026-09-05 13:25:57 -06:00
Drew T 3a9c946d8d docs(phase-32): T4b (3) ledger — backlog re-rendered after the real func_800CD674 bank; bank.sh refuses an empty function list and propagates a failed commit (R43 — it had built the unchanged tree and exited 0) 2026-09-05 13:25:30 -06:00
Drew T 779b55a497 docs(phase-32): T4b (3) ledger — func_800CD674 banked (backlog 13 open), the Fable draft + report + verdict kept; bank.sh's verbatim check now refuses only instruction-bearing asm (zero-byte fences/launders pass) 2026-09-05 13:24:05 -06:00
Drew T 2d0957ffb1 docs(phase-32): cookbook §501-B — do not merge case tails in C (cross-jump merges post-alloc; a C-level merge deletes the reference that decides allocno order — func_80039DEC); T4b row 2026-09-05 13:21:10 -06:00
Drew T d913bca9b7 docs(phase-32): T4b (2) ledger — func_80039DEC unpinned (5 walls remain), backlog re-rendered, the Fable draft + report + verdict kept (R20) 2026-09-05 13:20:36 -06:00
Drew T e8c2b6baa0 feat(phase-32): T4b (2) — main: func_80039DEC (74 ins) BANKED byte-identical 143dbb89 via gate_main — a pinned WALL falls: the natural switch with DUPLICATED case tails (cross-jump merges them post-reload), so a2's raw copy keeps 4 refs and wins $a3 (Fable agent)
- pinned since S79 as "the $a3<->$t0 swap of the two K&R raw-preserve parameter copies is fixed by ARGUMENT POSITION" —
  3 attempts + permuter_ils 9->2 (S80); T4 re-probed DIFF 2 in a sandbox TU; the S83 hand pass hypothesised a local pseudo
  in $a3 (global.c find_reg pass-1 local_reg_n_refs) — REFUTED by the agent: that check is only in the best_reg<0 retry
- the real mechanism (global.c:587-608 allocno_compare, pri = floor_log2(n_refs)*n_refs/live_length; find_reg hands the
  lowest free reg to whichever parm copy is allocated FIRST): every prior draft merged the 0x14/0x28 tails at C level
  (goto L_merge + a `kind` temp), deleting one `sb a2` use, so a2-raw had 3 refs/45 (pri 666) and lost $a3 to a1-raw
  (3 refs/26, pri 1153). Writing the 3-case `switch (a2)` with the tails DUPLICATED (the original's tails are merged by
  jump.c cross-jump AFTER allocation) gives a2-raw 4 refs/41 (floor_log2(4)=2 -> pri 1951) -> allocated first -> $a3; a
  block-scope `u8 *p` per case; no pins, no fences, no do-while (dumps .run/c294/dumps_t5x_9DEC_sw2: `73 in 8  75 in 7`)
- the permuter's closeness-2 draft was R63-unsound (`tmp` uninitialised on the default path — its pseudo took $a3)
- draft .run/P32/t5x/fable/func_80039DEC.c; report .run/P32/t5x/reports/func_80039DEC.md; coordinator rtu_match MATCH 74/74 in
  src/800_c.c (the no-proto TU decl from commit:3953 admits the K&R definition); gate_main slate_39DEC: BANKED, 143dbb89 BYTE-IDENTICAL
- main open 5 -> 4 (3 pinned walls + func_80039308 NEAR)
2026-09-05 13:20:25 -06:00
Drew T ec5572c5fb docs(phase-32): cookbook §501 — a lever that measures worse may be a cascade (func_800391D4: the explicit promotion flipped loop.c's insn_count threshold; pads 7→9 closed it); accelerators (9); T4b row 2026-09-05 13:16:50 -06:00
Drew T 177f4a7dfd docs(phase-32): T4b (1) ledger — func_800391D4 unpinned (config/wave_exclude.txt 6 kept / 1 dropped by exclude_audit), backlog re-rendered (15 open), the Fable draft + report + verdict kept (R20) 2026-09-05 13:15:53 -06:00
Drew T 1e54e88a81 feat(phase-32): T4b (1) — main: func_800391D4 (75 ins) BANKED byte-identical 143dbb89 via gate_main — a pinned WALL falls: the sign-extend must be preheader SOURCE code, and the loop.c insn_count knife-edge re-padded (Fable agent)
- pinned since S79 as "move_movables splices hoisted invariants after preheader flow code, so off's init cannot follow arg1's
  hoisted sign-extend from C" — 4 prior attempts + S79 Sonnet (64→3) + permuter_ils null (S80); T4 re-probed DIFF 3 in a
  sandbox TU; the S83 hand pass measured the explicit promotion at 18 and stopped
- the Fable agent read the .loop dump: with `a1v = arg1;` written BEFORE `off = 0;` the extend IS emitted first (T1 of the
  hand-pass NOTES) — the 18 was a CASCADE: removing the two extend insns from the body dropped the loop's insn_count 59→57,
  flipping loop.c:1631's desirability test (threshold 58 ≥ 57) so the D_800C6DD0 address got hoisted (+2 preheader insns and a
  register cascade). Nine `__asm__("")` pads instead of seven restore insn_count 59 → "not desirable" → the target's preheader
  tail `sll/sra $a1; move $t0,$zero`. Kept: the `$7` pin on i (a hard reg is not a biv, loop.c:3572) and the [][1] table type
- draft .run/P32/t5x/fable/func_800391D4.c; report .run/P32/t5x/reports/func_800391D4.md; coordinator rtu_match MATCH 75/75 in
  src/800_c.c; gate_main slate_391D4: BANKED, 143dbb89f34491258bbc27810d0a12ec8b43a8dd BYTE-IDENTICAL (.run/P32/t4b/gate/gate_391D4.log)
- main open 6 -> 5 (4 pinned walls + func_80039308 NEAR)
2026-09-05 13:15:20 -06:00
Drew T f85b589c3f docs(phase-32): 🛑 checkpoint — T4b in flight: 15 Fable agents launched ~13:05 MDT from .run/P32/t5x (BRIEF + packs + the hand-pass NOTES); recovery route via agent_verdicts over this session's a*.output; T5 follows T4b 2026-09-05 12:59:41 -06:00
Drew T 34268e3b8e docs(phase-32): T4b hand pass — all 15 rows hand-analysed against the compiler; 22 spellings measured (all regressions), 0 banks; every blocker refined to a named mechanism + untried lever in .run/P32/t4b/<fn>/NOTES.md; Fable brief + targets + packs staged
- Drew's directive (2026-09-05): nothing but the original hand-asm and the PsyQ libs may remain; hand-crack each row and
  name the blocker before spawning Fable agents. CURRENT_PHASE.md T4b row records the pass.
- func_80032A74: the missing 8 frame bytes = §172 producer 3, a TRANSIENT caller-save area — reload1.c's loop runs
  setup_save_areas BEFORE spill_hard_reg in the same iteration (source-read), the draft already spills $t0 at iteration 1;
  needs a rematerialisable call-crossing pseudo with 4*calls < weighted refs (regs.h:165); the lhu variant is byte-exact in all
  422 instructions except the 22 frame-offset rows (HYPOTHESIS.md)
- func_80020DA4 (reuse lo0: 80), func_800CD674 (prim-4 temp forms: 31/44), func_800391D4 (giv / early promotion / order: 11–69),
  func_800CD92C (constant birth position: no effect on pinned hard regs), func_80011380 (block-scoped register temp: 193/131),
  func_80039308 (the TU's [][1] spelling: 517/81) — each NOTES.md carries the measurement and the next lever
- func_8017DF28: the target's `addiu $s2,$sp,0x10` in the bnez slot is the branch-target's first insn (reorg); the block-move
  address pseudo must DIE at the copy. func_801834A4: sign-hoist vs const-hoist thresholds (S71 proof) + the mulsidi3 +2.
  func_80039DEC: global.c find_reg's first pass avoids regs used by local pseudos — find the draft's local in $a3.
- .run/P32/t5x/BRIEF.md (the Fable contract: instruments incl. cc1_dumps/gcc source/permuter --j 2, laws, output JSON),
  targets.json (15, sub = TU basename), packs regenerated; .gitignore allowlists for .run/P32/t4b and .run/P32/t5x
2026-09-05 12:55:49 -06:00