chore(phase-25): T0 — refresh sigs/surveys, regen worklist+backlog, fix sig_image h_norm doc

- housekeeping: deleted stale root gccdump.lreg (gcc default -da RTL dump, dumpbase
  "gccdump"; a one-off RTL-inspection run at root CWD, NOT a committed tool). Practice:
  RTL dumps go to a .run/ CWD or -dumpbase .run/gccdump (R12)
- make sig-overlays (134 sigs); worklist.py --refresh -> build_fuel_manifest + backlog
  render: docs/worklist.md + docs/backlog.md regenerated (stale Jun-26 ranking killed;
  the banked whale func_80144B9C dropped from backlog, P9)
- fix tools/sig_image.py docstring: h_norm is the live norm_stream normalizer, not a
  "T5 placeholder" (R21/R30)
- CURRENT_PHASE.md: Phase-25 plan-of-record + T0 frontier survey (R14): h_norm 2,764
  multi-member families / 11.1 MB; 46% of large solo monsters (3,989/8,670) are family
  members; reach-134 h_exact warm-up = 130 classes / 4.11 MB
This commit is contained in:
Drew T
2026-07-08 01:02:58 -06:00
parent 9194d27760
commit 41e454ec1f
4 changed files with 3016 additions and 3045 deletions
+2796 -2797
View File
File diff suppressed because it is too large Load Diff
+144 -243
View File
@@ -2,284 +2,185 @@
> Generated by `tools/worklist.py` from `.run/fuel_manifest.json` + `.run/backlog.jsonl`. Ranked by **byte-weighted gain** `gain_ins = reach × nins` (fleet instructions made byte-identical once matched **and** propagated ×134 — the decomp.dev-comparable metric the giants move, NOT function-count). `%rem` = share of ALL remaining gain; `cum%` = running total (shows how few giants capture most of it). `close` = backlog match_one mismatch count (lower = nearer; blank = not yet attempted). Byte-gate (harvest_verify) is the sole arbiter (G3/P9).
**Live stubs:** 441 · **total remaining gain:** 1,715,960 ins (6,863,840 bytes ×-fleet)
**Live stubs:** 130 · **total remaining gain:** 339,070 ins (1,356,280 bytes ×-fleet)
## Idiom-class summary (the groups)
| class | count | gain_ins | % of remaining |
|-------|------:|---------:|---------------:|
| GIANT | 20 | 603,268 | 35.2% |
| STRUCT | 89 | 44,240 | 2.6% |
| PINS | 38 | 94,641 | 5.5% |
| WAVE | 251 | 887,007 | 51.7% |
| O0 | 9 | 4,750 | 0.3% |
| O1 | 1 | 4,556 | 0.3% |
| STUB | 33 | 77,498 | 4.5% |
| GIANT | 1 | 26,532 | 7.8% |
| STRUCT | 20 | 30,501 | 9.0% |
| PINS | 8 | 24,438 | 7.2% |
| WAVE | 80 | 227,714 | 67.2% |
| O0 | 9 | 4,750 | 1.4% |
| STUB | 12 | 25,135 | 7.4% |
## Top 40 remaining gains (all classes)
| # | name | class | reach | nins | gain_ins | %rem | cum% | cached | region | close | where it stuck | best draft |
|--:|------|-------|------:|-----:|---------:|-----:|-----:|--------|--------|------:|----------------|------------|
| 1 | func_80144B9C | GIANT | 134 | 770 | 103180 | 6.01 | 6.0 | Y | main | | -O0 cluster fn (prologue 21F0A003, fp-frame, all locals spilled+reloaded, load-delay nops). match_one compile… | `.run/backlog_drafts/func_80144B9C.c` |
| 2 | func_80132784 | GIANT | 134 | 400 | 53600 | 3.12 | 9.1 | Y | a | 40 | HARD-DEFER (R14, byte-evidenced): hoist-vs-remat (else-branch s1m&0xFEFFFFFF + index rematerialized in v0/v1 … | `.run/backlog_drafts/func_80132784.c` |
| 3 | func_8014EE14 | GIANT | 134 | 248 | 33232 | 1.94 | 11.1 | Y | main | 6 | §20 store-vs-load tie-break (x2 loops); frame/regalloc/control-flow/constants byte-exact; no pins/asm -> perm… | `.run/backlog_drafts/func_8014EE14.c` |
| 4 | func_80148094 | GIANT | 134 | 213 | 28542 | 1.66 | 12.7 | Y | main | 107 | ~39/213 residual (LCS), all in the sVar1>=0x201 clamp blocks: $v0/$v1 mflo regalloc swap + coupled branch-pol… | `.run/backlog_drafts/func_80148094.c` |
| 5 | func_801372B0 | GIANT | 134 | 207 | 27738 | 1.62 | 14.4 | Y | a | | won't compile standalone (loose-typing / missing decl) | |
| 6 | func_8013A530 | GIANT | 134 | 204 | 27336 | 1.59 | 15.9 | Y | a | | won't compile standalone (loose-typing / missing decl) | |
| 7 | func_801412A8 | GIANT | 134 | 198 | 26532 | 1.55 | 17.5 | Y | main | 154 | 154-mismatch near-miss (198/198 ins, structure+branches exact). Two irreducible gcc residuals: (1) HEAD: held… | `.run/backlog_drafts/func_801412A8.c` |
| 8 | func_801571C4 | GIANT | 134 | 198 | 26532 | 1.55 | 19.0 | Y | main | 24 | body byte-perfect + 9 callee-reg maps + frame 0x60; residual = prologue schedule order + local_40/38 slot swa… | `.run/backlog_drafts/func_801571C4.c` |
| 9 | func_80129CF8 | GIANT | 134 | 191 | 25594 | 1.49 | 20.5 | Y | a | | won't compile standalone (loose-typing / missing decl) | |
| 10 | func_8012D098 | GIANT | 134 | 189 | 25326 | 1.48 | 22.0 | Y | a | | won't compile standalone (loose-typing / missing decl) | |
| 11 | func_8013AF20 | GIANT | 134 | 185 | 24790 | 1.44 | 23.5 | Y | a | | won't compile standalone (loose-typing / missing decl) | |
| 12 | func_8014EA4C | GIANT | 134 | 183 | 24522 | 1.43 | 24.9 | Y | main | 6 | raw close=6: D_801150D8=0 store between a0/a1 loads + abs($v1 move vs in-place negu) pressure-locked by buf[1… | `.run/drafts-giants/func_8014EA4C.c` |
| 13 | func_801392FC | GIANT | 134 | 182 | 24388 | 1.42 | 26.3 | Y | a | | won't compile standalone (loose-typing / missing decl) | |
| 14 | func_8012EC04 | GIANT | 134 | 178 | 23852 | 1.39 | 27.7 | Y | a | | won't compile standalone (loose-typing / missing decl) | |
| 15 | func_8014F74C | GIANT | 134 | 174 | 23316 | 1.36 | 29.0 | Y | main | 0 | none — MATCH (174 ins). Last mile: §5a volatile barrier blocked gcc jump-threading | `.run/backlog_drafts/func_8014F74C.c` |
| 16 | func_80178004 | GIANT | 134 | 165 | 22110 | 1.29 | 30.3 | Y | main | 0 | none — MATCH (full register pins per sibling func_80177EA4; running-ptr $s2 to stop unroll-rebase; | `.run/backlog_drafts/func_80178004.c` |
| 17 | func_80138ED0 | GIANT | 134 | 159 | 21306 | 1.24 | 31.6 | Y | a | | won't compile standalone (loose-typing / missing decl) | |
| 18 | func_80144090 | GIANT | 134 | 154 | 20636 | 1.20 | 32.8 | Y | main | 25 | raw close=25: caller-saved temp-reg coalescing in final ring-vertex block (iVar4 mflo->$a3 vs $v0; subu reuse… | `.run/drafts-giants/func_80144090.c` |
| 19 | func_80176D94 | GIANT | 134 | 152 | 20368 | 1.19 | 34.0 | Y | main | 63 | 63/152 — frame+prologue+4 calls+2x(801783D0/801777BC) MATCH (pins $s0=uVar2/$s2=param_2 + CSE-break barrier);… | `.run/backlog_drafts/func_80176D94.c` |
| 20 | func_801770E0 | GIANT | 134 | 152 | 20368 | 1.19 | 35.2 | Y | main | 53 | callee-saved regalloc EXACT (param_2->$s2, iVar6->$s1, uVar5/spill->$s0, consts 3/0xB8/0xFF->$s5/$s4/$s3). | `.run/backlog_drafts/func_801770E0.c` |
| 21 | func_80155800 | WAVE | 134 | 145 | 19430 | 1.13 | 36.3 | Y | main | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80155800.c` |
| 22 | func_8014E048 | WAVE | 134 | 143 | 19162 | 1.12 | 37.4 | Y | main | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8014E048.c` |
| 23 | func_8014F4C0 | WAVE | 134 | 141 | 18894 | 1.10 | 38.5 | Y | main | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8014F4C0.c` |
| 24 | func_8014ADE0 | WAVE | 134 | 139 | 18626 | 1.09 | 39.6 | Y | main | 19 | 16 ins off — all compiler-internal ties: (1) 0xAAA8 const lands $v0 vs target $v1; | `.run/backlog_drafts/func_8014ADE0.c` |
| 25 | func_80137DD4 | STRUCT | 134 | 129 | 17286 | 1.01 | 40.6 | Y | a | 107 | regalloc fully matches (frame -0x30; s4/s3/s5=params, s2=mask, s1=ptr w/ in-place +0x24 reuse, s0=acc+reused … | `.run/backlog_drafts/func_80137DD4.c` |
| 26 | func_80174CB0 | WAVE | 134 | 123 | 16482 | 0.96 | 41.6 | Y | main | 0 | close=0 match_one MATCH but its anon typedef is named 'Buf' which COLLIDES with the existing 'Buf' (s16 h[8],… | `.run/backlog_drafts/func_80174CB0.c` |
| 27 | func_80167540 | WAVE | 134 | 117 | 15678 | 0.91 | 42.5 | Y | main | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80167540.c` |
| 28 | func_801325B8 | WAVE | 134 | 113 | 15142 | 0.88 | 43.4 | Y | a | 4 | 4/113 — prologue save-order of the $s0(cur/p3) vs $s5(p1) pair; gcc emits | `.run/backlog_drafts/func_801325B8.c` |
| 29 | func_801330E0 | STUB | 134 | 110 | 14740 | 0.86 | 44.2 | Y | a | 79 | none — MATCH (110/110 words byte-identical via objcopy raw .text, reloc-masked on jal+%hi/%lo(D_800AF648)). m… | `.run/backlog_drafts/func_801330E0.c` |
| 30 | func_8014DD8C | WAVE | 134 | 108 | 14472 | 0.84 | 45.1 | Y | main | 83 | WAVE: 83 mismatch | `.run/backlog_drafts/func_8014DD8C.c` |
| 31 | func_8014E284 | WAVE | 134 | 108 | 14472 | 0.84 | 45.9 | Y | main | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8014E284.c` |
| 32 | func_8012CC88 | WAVE | 134 | 105 | 14070 | 0.82 | 46.7 | Y | a | 0 | none — MATCH (105 ins, relocation-masked) | `.run/backlog_drafts/func_8012CC88.c` |
| 33 | func_80169228 | WAVE | 134 | 105 | 14070 | 0.82 | 47.5 | Y | main | 0 | none — MATCH (105 ins, relocation-masked). Key levers: arg0/p pinned $s1/$s0, | `.run/backlog_drafts/func_80169228.c` |
| 34 | func_80167714 | WAVE | 134 | 104 | 13936 | 0.81 | 48.4 | Y | main | 0 | none — MATCH (104 ins) | `.run/backlog_drafts/func_80167714.c` |
| 35 | func_801463A0 | WAVE | 134 | 101 | 13534 | 0.79 | 49.1 | Y | main | 0 | none — MATCH (101 ins, match_one); real symbol names; misaligned 8B copy + s16 stores + masked B9C last | `.run/backlog_drafts/func_801463A0.c` |
| 36 | func_80177940 | WAVE | 134 | 101 | 13534 | 0.79 | 49.9 | Y | main | 65 | prologue+setup (35 ins) byte-match exactly; loop body diverges on gcc loop-invariant hoist ORDERING (schedule… | `.run/backlog_drafts/func_80177940.c` |
| 37 | func_801387B8 | WAVE | 134 | 100 | 13400 | 0.78 | 50.7 | Y | a | 50 | the two scanned bytes land in $a0/$a1 not $a1/$a2 (gcc-2.7.2 grabs the freed incoming-arg $a0 for the first l… | `.run/backlog_drafts/func_801387B8.c` |
| 38 | func_801379FC | WAVE | 134 | 97 | 12998 | 0.76 | 51.5 | Y | a | 0 | none — MATCH (match_one 97/97) | `.run/backlog_drafts/func_801379FC.c` |
| 39 | func_8014CD80 | WAVE | 134 | 97 | 12998 | 0.76 | 52.2 | Y | main | | none — MATCH (97 ins). iVar3 pinned to $v1 (register __asm__("$3")) so | `.run/backlog_drafts/func_8014CD80.c` |
| 40 | func_8014FE60 | WAVE | 134 | 95 | 12730 | 0.74 | 53.0 | Y | main | 20 | none — MATCH (permuter closed the final bothzero-block regalloc/schedule residual: moving `a = in[2]` before … | `.run/backlog_drafts/func_8014FE60.c` |
| 1 | func_801412A8 | GIANT | 134 | 198 | 26532 | 7.82 | 7.8 | Y | main | 110 | 110 mismatch (count-exact 198/198). S11 LUID(x)alloc: register-assignment permutation + prim2 store-schedule.… | `.run/backlog_drafts/func_801412A8.c` |
| 2 | func_80137DD4 | STRUCT | 134 | 129 | 17286 | 5.10 | 12.9 | Y | a | 107 | regalloc fully matches (frame -0x30; s4/s3/s5=params, s2=mask, s1=ptr w/ in-place +0x24 reuse, s0=acc+reused … | `.run/backlog_drafts/func_80137DD4.c` |
| 3 | func_801325B8 | WAVE | 134 | 113 | 15142 | 4.47 | 17.4 | Y | a | 4 | 4/113 — prologue save-order of the $s0(cur/p3) vs $s5(p1) pair; gcc emits | `.run/backlog_drafts/func_801325B8.c` |
| 4 | func_801330E0 | STUB | 134 | 110 | 14740 | 4.35 | 21.7 | Y | a | 79 | none — MATCH (110/110 words byte-identical via objcopy raw .text, reloc-masked on jal+%hi/%lo(D_800AF648)). m… | `.run/backlog_drafts/func_801330E0.c` |
| 5 | func_8012CC88 | WAVE | 134 | 105 | 14070 | 4.15 | 25.9 | Y | a | 0 | none — MATCH (105 ins, relocation-masked) | `.run/backlog_drafts/func_8012CC88.c` |
| 6 | func_801387B8 | WAVE | 134 | 100 | 13400 | 3.95 | 29.8 | Y | a | 50 | the two scanned bytes land in $a0/$a1 not $a1/$a2 (gcc-2.7.2 grabs the freed incoming-arg $a0 for the first l… | `.run/backlog_drafts/func_801387B8.c` |
| 7 | func_801379FC | WAVE | 134 | 97 | 12998 | 3.83 | 33.7 | Y | a | 0 | none — MATCH (match_one 97/97) | `.run/backlog_drafts/func_801379FC.c` |
| 8 | func_8012B4B8 | WAVE | 134 | 84 | 11256 | 3.32 | 37.0 | Y | a | 0 | none — MATCH | `.run/backlog_drafts/func_8012B4B8.c` |
| 9 | func_8012E138 | WAVE | 134 | 81 | 10854 | 3.20 | 40.2 | Y | a | 0 | none — MATCH (81/81 ins, match_one proxy); reloaded ptr pinned to $a0 | `.run/backlog_drafts/func_8012E138.c` |
| 10 | func_8012A1BC | WAVE | 134 | 78 | 10452 | 3.08 | 43.3 | Y | a | 42 | 42/78 — block-copy bytes correct (char[8] => lwl/lwr/swl/swr); residual is gcc's load-hoist split. Target hoi… | `.run/backlog_drafts/func_8012A1BC.c` |
| 11 | func_80137178 | WAVE | 134 | 78 | 10452 | 3.08 | 46.4 | Y | a | 15 | reg values all correct; prologue independent-addiu order + lazy sw placement differ | `.run/backlog_drafts/func_80137178.c` |
| 12 | func_8012E014 | WAVE | 134 | 73 | 9782 | 2.88 | 49.2 | Y | a | 0 | none — MATCH (expected; straightforward struct-field + global-copy body) | `.run/backlog_drafts/func_8012E014.c` |
| 13 | func_80132F40 | STRUCT | 134 | 72 | 9648 | 2.85 | 52.1 | Y | a | | gcc gives src (sp+0x10) a 5th saved reg ($s3, frame 0x38 not 0x40); target rematerializes | `.run/backlog_drafts/func_80132F40.c` |
| 14 | func_80130C08 | WAVE | 134 | 65 | 8710 | 2.57 | 54.7 | Y | a | 5 | tail shares one jal func_80131CA8 between the a1=5 and a1=0x38 arms via `j .L80130CEC` with a DUPLICATED `mov… | `.run/backlog_drafts/func_80130C08.c` |
| 15 | func_80133298 | WAVE | 134 | 65 | 8710 | 2.57 | 57.2 | Y | a | 0 | none — MATCH (65 ins, relocation-masked) | `.run/backlog_drafts/func_80133298.c` |
| 16 | func_80140D68 | WAVE | 134 | 65 | 8710 | 2.57 | 59.8 | Y | main | 5 | 5-ins near-miss — gcc hoists `lui 0xff00` (the 0xFF000000 mask) one slot too early in the first AddPrim block… | `.run/backlog_drafts/func_80140D68.c` |
| 17 | func_80136F3C | WAVE | 134 | 61 | 8174 | 2.41 | 62.2 | Y | a | 10 | 10/61 — regalloc EXACT (param-copy + corner register-pins). residual = gcc list-scheduler permutation of the … | `.run/backlog_drafts/func_80136F3C.c` |
| 18 | func_8012A328 | WAVE | 134 | 60 | 8040 | 2.37 | 64.6 | Y | a | 0 | none — MATCH (60 ins, relocation-masked) | `.run/backlog_drafts/func_8012A328.c` |
| 19 | func_80130650 | WAVE | 134 | 60 | 8040 | 2.37 | 66.9 | Y | a | | none — MATCH (60 ins). ((void (*)(void))func_801319E0)() called with NO arg in the >=0x10 branch (target jal+… | `.run/backlog_drafts/func_80130650.c` |
| 20 | func_80138DE0 | WAVE | 134 | 60 | 8040 | 2.37 | 69.3 | Y | a | 0 | none — MATCH (60 ins) | `.run/backlog_drafts/func_80138DE0.c` |
| 21 | func_8012B77C | WAVE | 134 | 58 | 7772 | 2.29 | 71.6 | Y | a | 33 | gcc instruction-scheduler load-ordering + 1st-ratan2 delay-slot fill differ (s2 subtraction lands early inste… | `.run/backlog_drafts/func_8012B77C.c` |
| 22 | func_8012F49C | WAVE | 134 | 51 | 6834 | 2.02 | 73.6 | Y | a | 29 | gcc CSEs the two &D_800AF648 into one call-crossing pseudo and allocates it the | `.run/backlog_drafts/func_8012F49C.c` |
| 23 | func_801376E8 | WAVE | 134 | 51 | 6834 | 2.02 | 75.6 | Y | a | 0 | none — MATCH (51 ins). 3 levers: (1) adjacent-field array u16 D_80126A14[] for A14/A16 | `.run/backlog_drafts/func_801376E8.c` |
| 24 | func_80136DFC | PINS | 134 | 50 | 6700 | 1.98 | 77.6 | Y | a | 0 | none — MATCH | `.run/backlog_drafts/func_80136DFC.c` |
| 25 | func_80129C40 | PINS | 134 | 46 | 6164 | 1.82 | 79.4 | Y | a | 0 | none — MATCH (array-of-struct %lo-fold for the two 3-element 0xA4-stride bases) | `.run/backlog_drafts/func_80129C40.c` |
| 26 | func_80130A18 | WAVE | 134 | 43 | 5762 | 1.70 | 81.1 | Y | a | | none — MATCH (two separate Vec3s locals give the 8-byte-spaced sp+0x10/sp+0x18 blocks) | `.run/backlog_drafts/func_80130A18.c` |
| 27 | func_80131D68 | WAVE | 134 | 38 | 5092 | 1.50 | 82.6 | Y | a | 0 | return value held in $v0 per-path (no $s1 frame); using explicit returns | `.run/backlog_drafts/func_80131D68.c` |
| 28 | func_80131A34 | PINS | 134 | 37 | 4958 | 1.46 | 84.1 | Y | a | 3 | 3-off — (a) prologue saves $ra before $s0 (target: $s0 then $ra) and (b) return-0 path reuses $a1's proven-ze… | `.run/backlog_drafts/func_80131A34.c` |
| 29 | func_8012F40C | WAVE | 134 | 36 | 4824 | 1.42 | 85.5 | Y | a | 0 | none — MATCH (address rematerialized per call via caller-saved $a0 pin) | `.run/backlog_drafts/func_8012F40C.c` |
| 30 | func_8012A6D0 | STUB | 134 | 34 | 4556 | 1.34 | 86.9 | Y | a | 0 | none — MATCH (sum order p[2]^2 + p[0]^2, then ratan2(p1[1]-p2[1], (s16)dist)) | `.run/backlog_drafts/func_8012A6D0.c` |
| 31 | func_80144B14 | WAVE | 134 | 34 | 4556 | 1.34 | 88.2 | Y | main | 31 | none — MATCH (34 ins). Two stack structs (s16[3] each) passed by addr to | `.run/backlog_drafts/func_80144B14.c` |
| 32 | func_8012EFB8 | STUB | 134 | 32 | 4288 | 1.26 | 89.5 | Y | a | 11 | none — MATCH (32 ins, byte-verified via objdump -dz; match_one's default objdump elides the 2 consecutive rtp… | `.run/backlog_drafts/func_8012EFB8.c` |
| 33 | func_8012F274 | WAVE | 134 | 29 | 3886 | 1.15 | 90.6 | Y | a | 0 | none — MATCH (29 ins, match_one byte-clean via relocation-masked pipeline) | `.run/backlog_drafts/func_8012F274.c` |
| 34 | func_80131CF4 | WAVE | 134 | 29 | 3886 | 1.15 | 91.8 | Y | a | 15 | 15 mismatches cascade from a 2-instruction gap — target reloads *param_1 (lw v0,0(a0)) into v0 before the loo… | `.run/backlog_drafts/func_80131CF4.c` |
| 35 | func_80141B90 | PINS | 134 | 29 | 3886 | 1.15 | 92.9 | Y | main | 24 | none — MATCH (29 ins); array-of-int %lo-fold + call + u16 if-block; volatile-double reserves the target's 8-b… | `.run/backlog_drafts/func_80141B90.c` |
| 36 | func_8013C08C | O0 | 134 | 27 | 3618 | 1.07 | 94.0 | Y | o0 | | | |
| 37 | func_80137614 | WAVE | 134 | 26 | 3484 | 1.03 | 95.0 | Y | a | 0 | none — MATCH (sibling func_8013767C pattern; all 3 params live across the call) | `.run/backlog_drafts/func_80137614.c` |
| 38 | func_8012A598 | WAVE | 134 | 24 | 3216 | 0.95 | 96.0 | Y | a | 0 | none — MATCH (24 ins, relocation-masked) | `.run/backlog_drafts/func_8012A598.c` |
| 39 | func_80131CA8 | PINS | 134 | 19 | 2546 | 0.75 | 96.7 | Y | a | 0 | none — MATCH (call-through-fnptr dispatcher: explicit return 1/return 0) | `.run/backlog_drafts/func_80131CA8.c` |
| 40 | func_8013F350 | STRUCT | 1 | 490 | 490 | 0.14 | 96.8 | Y | main | | | |
## GIANT hand-decomp queue — 20 fns, 35.2% of all remaining gain
## GIANT hand-decomp queue — 1 fns, 7.8% of all remaining gain
| # | name | class | reach | nins | gain_ins | %rem | cached | region | close | where it stuck | best draft |
|--:|------|-------|------:|-----:|---------:|-----:|--------|--------|------:|----------------|------------|
| 1 | func_80144B9C | GIANT | 134 | 770 | 103180 | 6.01 | Y | main | | -O0 cluster fn (prologue 21F0A003, fp-frame, all locals spilled+reloaded, load-delay nops). match_one compile… | `.run/backlog_drafts/func_80144B9C.c` |
| 2 | func_80132784 | GIANT | 134 | 400 | 53600 | 3.12 | Y | a | 40 | HARD-DEFER (R14, byte-evidenced): hoist-vs-remat (else-branch s1m&0xFEFFFFFF + index rematerialized in v0/v1 … | `.run/backlog_drafts/func_80132784.c` |
| 3 | func_8014EE14 | GIANT | 134 | 248 | 33232 | 1.94 | Y | main | 6 | §20 store-vs-load tie-break (x2 loops); frame/regalloc/control-flow/constants byte-exact; no pins/asm -> perm… | `.run/backlog_drafts/func_8014EE14.c` |
| 4 | func_80148094 | GIANT | 134 | 213 | 28542 | 1.66 | Y | main | 107 | ~39/213 residual (LCS), all in the sVar1>=0x201 clamp blocks: $v0/$v1 mflo regalloc swap + coupled branch-pol… | `.run/backlog_drafts/func_80148094.c` |
| 5 | func_801372B0 | GIANT | 134 | 207 | 27738 | 1.62 | Y | a | | won't compile standalone (loose-typing / missing decl) | |
| 6 | func_8013A530 | GIANT | 134 | 204 | 27336 | 1.59 | Y | a | | won't compile standalone (loose-typing / missing decl) | |
| 7 | func_801412A8 | GIANT | 134 | 198 | 26532 | 1.55 | Y | main | 154 | 154-mismatch near-miss (198/198 ins, structure+branches exact). Two irreducible gcc residuals: (1) HEAD: held… | `.run/backlog_drafts/func_801412A8.c` |
| 8 | func_801571C4 | GIANT | 134 | 198 | 26532 | 1.55 | Y | main | 24 | body byte-perfect + 9 callee-reg maps + frame 0x60; residual = prologue schedule order + local_40/38 slot swa… | `.run/backlog_drafts/func_801571C4.c` |
| 9 | func_80129CF8 | GIANT | 134 | 191 | 25594 | 1.49 | Y | a | | won't compile standalone (loose-typing / missing decl) | |
| 10 | func_8012D098 | GIANT | 134 | 189 | 25326 | 1.48 | Y | a | | won't compile standalone (loose-typing / missing decl) | |
| 11 | func_8013AF20 | GIANT | 134 | 185 | 24790 | 1.44 | Y | a | | won't compile standalone (loose-typing / missing decl) | |
| 12 | func_8014EA4C | GIANT | 134 | 183 | 24522 | 1.43 | Y | main | 6 | raw close=6: D_801150D8=0 store between a0/a1 loads + abs($v1 move vs in-place negu) pressure-locked by buf[1… | `.run/drafts-giants/func_8014EA4C.c` |
| 13 | func_801392FC | GIANT | 134 | 182 | 24388 | 1.42 | Y | a | | won't compile standalone (loose-typing / missing decl) | |
| 14 | func_8012EC04 | GIANT | 134 | 178 | 23852 | 1.39 | Y | a | | won't compile standalone (loose-typing / missing decl) | |
| 15 | func_8014F74C | GIANT | 134 | 174 | 23316 | 1.36 | Y | main | 0 | none — MATCH (174 ins). Last mile: §5a volatile barrier blocked gcc jump-threading | `.run/backlog_drafts/func_8014F74C.c` |
| 16 | func_80178004 | GIANT | 134 | 165 | 22110 | 1.29 | Y | main | 0 | none — MATCH (full register pins per sibling func_80177EA4; running-ptr $s2 to stop unroll-rebase; | `.run/backlog_drafts/func_80178004.c` |
| 17 | func_80138ED0 | GIANT | 134 | 159 | 21306 | 1.24 | Y | a | | won't compile standalone (loose-typing / missing decl) | |
| 18 | func_80144090 | GIANT | 134 | 154 | 20636 | 1.20 | Y | main | 25 | raw close=25: caller-saved temp-reg coalescing in final ring-vertex block (iVar4 mflo->$a3 vs $v0; subu reuse… | `.run/drafts-giants/func_80144090.c` |
| 19 | func_80176D94 | GIANT | 134 | 152 | 20368 | 1.19 | Y | main | 63 | 63/152 — frame+prologue+4 calls+2x(801783D0/801777BC) MATCH (pins $s0=uVar2/$s2=param_2 + CSE-break barrier);… | `.run/backlog_drafts/func_80176D94.c` |
| 20 | func_801770E0 | GIANT | 134 | 152 | 20368 | 1.19 | Y | main | 53 | callee-saved regalloc EXACT (param_2->$s2, iVar6->$s1, uVar5/spill->$s0, consts 3/0xB8/0xFF->$s5/$s4/$s3). | `.run/backlog_drafts/func_801770E0.c` |
| 1 | func_801412A8 | GIANT | 134 | 198 | 26532 | 7.82 | Y | main | 110 | 110 mismatch (count-exact 198/198). S11 LUID(x)alloc: register-assignment permutation + prim2 store-schedule.… | `.run/backlog_drafts/func_801412A8.c` |
## Idiom-group tables
### STRUCT — 89 fns, 2.6% of remaining gain
### STRUCT — 20 fns, 9.0% of remaining gain
| # | name | class | reach | nins | gain_ins | %rem | cached | region | close | where it stuck | best draft |
|--:|------|-------|------:|-----:|---------:|-----:|--------|--------|------:|----------------|------------|
| 1 | func_80137DD4 | STRUCT | 134 | 129 | 17286 | 1.01 | Y | a | 107 | regalloc fully matches (frame -0x30; s4/s3/s5=params, s2=mask, s1=ptr w/ in-place +0x24 reuse, s0=acc+reused … | `.run/backlog_drafts/func_80137DD4.c` |
| 2 | func_80132F40 | STRUCT | 134 | 72 | 9648 | 0.56 | Y | a | | gcc gives src (sp+0x10) a 5th saved reg ($s3, frame 0x38 not 0x40); target rematerializes | `.run/backlog_drafts/func_80132F40.c` |
| 3 | func_801719A4 | STRUCT | 134 | 24 | 3216 | 0.19 | Y | main | 25 | none — MATCH (24 ins, relocation-masked) | `.run/backlog_drafts/func_801719A4.c` |
| 4 | func_8017C974 | STRUCT | 1 | 947 | 947 | 0.06 | Y | main | | | |
| 5 | func_80178D40 | STRUCT | 1 | 890 | 890 | 0.05 | Y | main | | | |
| 6 | func_8018103C | STRUCT | 1 | 579 | 579 | 0.03 | Y | main | | | |
| 7 | func_8015AE2C | STRUCT | 1 | 562 | 562 | 0.03 | Y | main | | | |
| 8 | func_8017A4AC | STRUCT | 1 | 536 | 536 | 0.03 | Y | main | | | |
| 9 | func_8015A3C8 | STRUCT | 1 | 493 | 493 | 0.03 | Y | main | | | |
| 10 | func_8013F350 | STRUCT | 1 | 490 | 490 | 0.03 | Y | main | | | |
| 11 | func_801380E0 | STRUCT | 1 | 438 | 438 | 0.03 | n | a | | | |
| 12 | func_80131340 | STRUCT | 1 | 424 | 424 | 0.02 | n | a | | | |
| 13 | func_8015444C | STRUCT | 1 | 363 | 363 | 0.02 | Y | main | | | |
| 14 | func_80159C84 | STRUCT | 1 | 337 | 337 | 0.02 | Y | main | | | |
| 15 | func_80183324 | STRUCT | 1 | 324 | 324 | 0.02 | Y | main | | | |
| 16 | func_80135EB0 | STRUCT | 1 | 289 | 289 | 0.02 | n | a | | | |
| 17 | func_8015B950 | STRUCT | 1 | 271 | 271 | 0.02 | Y | main | | | |
| 18 | func_8017FD14 | STRUCT | 1 | 249 | 249 | 0.01 | Y | main | | | |
| 19 | func_80134C20 | STRUCT | 1 | 230 | 230 | 0.01 | n | a | | | |
| 20 | func_8015C32C | STRUCT | 1 | 222 | 222 | 0.01 | Y | main | | | |
| 21 | func_8013FFD8 | STRUCT | 1 | 213 | 213 | 0.01 | Y | main | | | |
| 22 | func_8015EA3C | STRUCT | 1 | 204 | 204 | 0.01 | Y | main | | | |
| 23 | func_8015D738 | STRUCT | 1 | 201 | 201 | 0.01 | Y | main | | | |
| 24 | func_80181BE4 | STRUCT | 1 | 201 | 201 | 0.01 | Y | main | | | |
| 25 | func_8015F448 | STRUCT | 1 | 188 | 188 | 0.01 | Y | main | | | |
| 26 | func_8016AB6C | STRUCT | 1 | 188 | 188 | 0.01 | Y | main | | | |
| 27 | func_8014032C | STRUCT | 1 | 183 | 183 | 0.01 | Y | main | | | |
| 28 | func_80135A4C | STRUCT | 1 | 181 | 181 | 0.01 | n | a | | | |
| 29 | func_8017AE2C | STRUCT | 1 | 174 | 174 | 0.01 | Y | main | | | |
| 30 | func_80154C24 | STRUCT | 1 | 173 | 173 | 0.01 | Y | main | | | |
| 31 | func_8018308C | STRUCT | 1 | 166 | 166 | 0.01 | Y | main | | | |
| 32 | func_801347A0 | STRUCT | 1 | 162 | 162 | 0.01 | n | a | | | |
| 33 | func_80160534 | STRUCT | 1 | 161 | 161 | 0.01 | Y | main | | | |
| 34 | func_80180C90 | STRUCT | 1 | 160 | 160 | 0.01 | Y | main | | | |
| 35 | func_801299C8 | STRUCT | 1 | 158 | 158 | 0.01 | n | a | | | |
| 36 | func_8012C890 | STRUCT | 1 | 149 | 149 | 0.01 | n | a | | | |
| 37 | func_80135260 | STRUCT | 1 | 136 | 136 | 0.01 | n | a | | | |
| 38 | func_80183834 | STRUCT | 1 | 135 | 135 | 0.01 | Y | main | | | |
| 39 | func_80181948 | STRUCT | 1 | 132 | 132 | 0.01 | Y | main | | | |
| 40 | func_80185E68 | STRUCT | 1 | 132 | 132 | 0.01 | Y | main | | | |
| 1 | func_80137DD4 | STRUCT | 134 | 129 | 17286 | 5.10 | Y | a | 107 | regalloc fully matches (frame -0x30; s4/s3/s5=params, s2=mask, s1=ptr w/ in-place +0x24 reuse, s0=acc+reused … | `.run/backlog_drafts/func_80137DD4.c` |
| 2 | func_80132F40 | STRUCT | 134 | 72 | 9648 | 2.85 | Y | a | | gcc gives src (sp+0x10) a 5th saved reg ($s3, frame 0x38 not 0x40); target rematerializes | `.run/backlog_drafts/func_80132F40.c` |
| 3 | func_8013F350 | STRUCT | 1 | 490 | 490 | 0.14 | Y | main | | | |
| 4 | func_801380E0 | STRUCT | 1 | 438 | 438 | 0.13 | n | a | | | |
| 5 | func_80131340 | STRUCT | 1 | 424 | 424 | 0.13 | n | a | | | |
| 6 | func_80135EB0 | STRUCT | 1 | 289 | 289 | 0.09 | n | a | | | |
| 7 | func_80134C20 | STRUCT | 1 | 230 | 230 | 0.07 | n | a | | | |
| 8 | func_8013FFD8 | STRUCT | 1 | 213 | 213 | 0.06 | Y | main | | | |
| 9 | func_8014032C | STRUCT | 1 | 183 | 183 | 0.05 | Y | main | | | |
| 10 | func_80135A4C | STRUCT | 1 | 181 | 181 | 0.05 | n | a | | | |
| 11 | func_801347A0 | STRUCT | 1 | 162 | 162 | 0.05 | n | a | | | |
| 12 | func_801299C8 | STRUCT | 1 | 158 | 158 | 0.05 | n | a | | | |
| 13 | func_8012C890 | STRUCT | 1 | 149 | 149 | 0.04 | n | a | | | |
| 14 | func_80135260 | STRUCT | 1 | 136 | 136 | 0.04 | n | a | | | |
| 15 | func_8012AAAC | STRUCT | 1 | 125 | 125 | 0.04 | n | a | | | |
| 16 | func_80140608 | STRUCT | 1 | 123 | 123 | 0.04 | Y | main | | | |
| 17 | func_80135888 | STRUCT | 1 | 113 | 113 | 0.03 | n | a | | | |
| 18 | func_80135D20 | STRUCT | 1 | 100 | 100 | 0.03 | n | a | | | |
| 19 | func_80142A10 | STRUCT | 1 | 28 | 28 | 0.01 | Y | main | 1 | none — MATCH (pending byte-gate) | `.run/backlog_drafts/func_80142A10.c` |
| 20 | func_8012ACE0 | STRUCT | 1 | 25 | 25 | 0.01 | n | a | 21 | STRUCT: 21 mismatch | `.run/backlog_drafts/func_8012ACE0.c` |
*(+49 more STRUCT fns — see `.run/worklist.json`)*
### PINS — 38 fns, 5.5% of remaining gain
### PINS — 8 fns, 7.2% of remaining gain
| # | name | class | reach | nins | gain_ins | %rem | cached | region | close | where it stuck | best draft |
|--:|------|-------|------:|-----:|---------:|-----:|--------|--------|------:|----------------|------------|
| 1 | func_8014E5B4 | PINS | 134 | 59 | 7906 | 0.46 | Y | main | 23 | none — MATCH | `.run/backlog_drafts/func_8014E5B4.c` |
| 2 | func_80151C54 | PINS | 134 | 52 | 6968 | 0.41 | Y | main | | none — MATCH (52 ins). Branch-polarity §3-T4: BD60 arm is fall-through (if !=1 && ==0x11), BC44 is else. | `.run/backlog_drafts/func_80151C54.c` |
| 3 | func_80136DFC | PINS | 134 | 50 | 6700 | 0.39 | Y | a | 0 | none — MATCH | `.run/backlog_drafts/func_80136DFC.c` |
| 4 | func_8015F380 | PINS | 134 | 50 | 6700 | 0.39 | Y | main | 0 | none — expect MATCH (single call-crossing local pinned to $s0) | `.run/backlog_drafts/func_8015F380.c` |
| 5 | func_80151B98 | PINS | 134 | 47 | 6298 | 0.37 | Y | main | | none — MATCH | `.run/backlog_drafts/func_80151B98.c` |
| 6 | func_80129C40 | PINS | 134 | 46 | 6164 | 0.36 | Y | a | 0 | none — MATCH (array-of-struct %lo-fold for the two 3-element 0xA4-stride bases) | `.run/backlog_drafts/func_80129C40.c` |
| 7 | func_80163764 | PINS | 134 | 42 | 5628 | 0.33 | Y | main | 10 | none — MATCH (42 ins). pins $s2/$s1/$s0/$s3 + u32 counter (sltiu) + init order s2,s3,i,p | `.run/backlog_drafts/func_80163764.c` |
| 8 | func_801522CC | PINS | 134 | 41 | 5494 | 0.32 | Y | main | 0 | TBD — first compile; func_80153C18 canonical is (void) but target sets $a0=$s0 in its delay slot (call-site c… | `.run/backlog_drafts/func_801522CC.c` |
| 9 | func_80152C80 | PINS | 134 | 41 | 5494 | 0.32 | Y | main | | none — MATCH expected (linear call/store sequence, no regalloc tension) | `.run/backlog_drafts/func_80152C80.c` |
| 10 | func_80146AFC | PINS | 134 | 40 | 5360 | 0.31 | Y | main | 13 | none — MATCH | `.run/backlog_drafts/func_80146AFC.c` |
| 11 | func_80131A34 | PINS | 134 | 37 | 4958 | 0.29 | Y | a | 3 | 3-off — (a) prologue saves $ra before $s0 (target: $s0 then $ra) and (b) return-0 path reuses $a1's proven-ze… | `.run/backlog_drafts/func_80131A34.c` |
| 12 | func_80151664 | PINS | 134 | 35 | 4690 | 0.27 | Y | main | 0 | none — MATCH (35 ins, relocation-masked); canonical externs kept, call-site casts only | `.run/backlog_drafts/func_80151664.c` |
| 13 | func_80170CF0 | PINS | 134 | 30 | 4020 | 0.23 | Y | main | | 4-ins PROLOGUE-ORDER residual (body insns 4-29 byte-identical). My cc1 hoists the funcptr lui/lw ABOVE the fr… | `.run/backlog_drafts/func_80170CF0.c` |
| 14 | func_80141B90 | PINS | 134 | 29 | 3886 | 0.23 | Y | main | 24 | none — MATCH (29 ins); array-of-int %lo-fold + call + u16 if-block; volatile-double reserves the target's 8-b… | `.run/backlog_drafts/func_80141B90.c` |
| 15 | func_8016F0E4 | PINS | 134 | 26 | 3484 | 0.20 | Y | main | 1 | none — MATCH (26 ins); natural C form, param_1 auto-allocated to $s0 | `.run/backlog_drafts/func_8016F0E4.c` |
| 16 | func_801733FC | PINS | 134 | 25 | 3350 | 0.20 | Y | main | 0 | none — modeled on sibling func_80173460 (packed 8-byte struct copy + two s16=1 stores) | `.run/backlog_drafts/func_801733FC.c` |
| 17 | func_80131CA8 | PINS | 134 | 19 | 2546 | 0.15 | Y | a | 0 | none — MATCH (call-through-fnptr dispatcher: explicit return 1/return 0) | `.run/backlog_drafts/func_80131CA8.c` |
| 18 | func_80156600 | PINS | 134 | 18 | 2412 | 0.14 | Y | main | | none — MATCH (simple counted scan, do-while form per Ghidra-C) | `.run/backlog_drafts/func_80156600.c` |
| 19 | func_80161208 | PINS | 134 | 14 | 1876 | 0.11 | Y | main | 0 | none — MATCH expected (param saved across call → natural $s0, no pin needed) | `.run/backlog_drafts/func_80161208.c` |
| 20 | func_80164930 | PINS | 1 | 81 | 81 | 0.00 | Y | main | | none — MATCH (81 ins, relocation-masked) | `.run/backlog_drafts/func_80164930.c` |
| 21 | func_80141A60 | PINS | 1 | 76 | 76 | 0.00 | Y | main | 63 | none — MATCH (76 ins, relocation-masked). Body byte-identical; target reserves an 8-byte | `.run/backlog_drafts/func_80141A60.c` |
| 22 | func_8013E83C | PINS | 1 | 71 | 71 | 0.00 | Y | main | | none — MATCH (scalar global stores + 2 conditional calls; §3-T4 branch-polarity invert on the &0xFF test) | `.run/backlog_drafts/func_8013E83C.c` |
| 23 | func_8015D01C | PINS | 1 | 58 | 58 | 0.00 | Y | main | 0 | none — MATCH | `.run/backlog_drafts/func_8015D01C.c` |
| 24 | func_80158FA4 | PINS | 1 | 51 | 51 | 0.00 | Y | main | 17 | target keeps a DEAD `sra $a1,$v0,16` before `beqz $a1` (sign-extend of func_80159464's | `.run/backlog_drafts/func_80158FA4.c` |
| 25 | func_80178BF8 | PINS | 1 | 49 | 49 | 0.00 | Y | main | 0 | none — MATCH (pure scalar-store + two pointer-decrement do-while loops) | `.run/backlog_drafts/func_80178BF8.c` |
| 26 | func_80184C0C | PINS | 1 | 48 | 48 | 0.00 | Y | main | 1 | none — MATCH (array-of-struct %lo-fold for &D_8018AEB8[idx], stride 0x34) | `.run/backlog_drafts/func_80184C0C.c` |
| 27 | func_80140E6C | PINS | 1 | 37 | 37 | 0.00 | Y | main | 4 | 4 ins — each save-across-call copy (move s1,v0 / move s0,v0) should fill the NEXT jal's delay slot (target) b… | `.run/backlog_drafts/func_80140E6C.c` |
| 28 | func_80161C24 | PINS | 1 | 29 | 29 | 0.00 | Y | main | 1 | none — MATCH (array-of-struct %lo-fold; even/odd u16 fields at off 0/2, stride 4) | `.run/backlog_drafts/func_80161C24.c` |
| 29 | func_8018301C | PINS | 1 | 28 | 28 | 0.00 | Y | main | 24 | none — MATCH (straight-line, statement-order; verify with match_one) | `.run/backlog_drafts/func_8018301C.c` |
| 30 | func_80182338 | PINS | 1 | 26 | 26 | 0.00 | Y | main | | none — straight-line init; rely on gcc scheduler to hoist $a1/$v0=6 into prologue/delay-slot | `.run/backlog_drafts/func_80182338.c` |
| 31 | func_80182988 | PINS | 1 | 22 | 22 | 0.00 | Y | main | 0 | none — MATCH (u16 store of 0xAA10 forces ori, not sign-extended addiu) | `.run/backlog_drafts/func_80182988.c` |
| 32 | func_8012F828 | PINS | 1 | 21 | 21 | 0.00 | Y | a | | | |
| 33 | func_8012F8C8 | PINS | 1 | 21 | 21 | 0.00 | Y | a | | | |
| 34 | func_80157D20 | PINS | 1 | 21 | 21 | 0.00 | Y | main | 0 | none — MATCH expected (call, indexed u16-global load as 2nd arg, then call; param_1 saved across all three ca… | `.run/backlog_drafts/func_80157D20.c` |
| 35 | func_80161CD0 | PINS | 1 | 20 | 20 | 0.00 | Y | main | 14 | param_2 must survive the call in $s0; try plain C first then pin to $16 | `.run/backlog_drafts/func_80161CD0.c` |
| 36 | func_8013373C | PINS | 1 | 18 | 18 | 0.00 | Y | a | | | |
| 37 | func_801577C8 | PINS | 1 | 16 | 16 | 0.00 | Y | main | 0 | none — MATCH expected (scalar global store + two sequential calls, param preserved across first call) | `.run/backlog_drafts/func_801577C8.c` |
| 38 | func_80161D20 | PINS | 1 | 14 | 14 | 0.00 | Y | main | 1 | none — MATCH (array-of-u16 %lo-fold, §18) | `.run/backlog_drafts/func_80161D20.c` |
| 1 | func_80136DFC | PINS | 134 | 50 | 6700 | 1.98 | Y | a | 0 | none — MATCH | `.run/backlog_drafts/func_80136DFC.c` |
| 2 | func_80129C40 | PINS | 134 | 46 | 6164 | 1.82 | Y | a | 0 | none — MATCH (array-of-struct %lo-fold for the two 3-element 0xA4-stride bases) | `.run/backlog_drafts/func_80129C40.c` |
| 3 | func_80131A34 | PINS | 134 | 37 | 4958 | 1.46 | Y | a | 3 | 3-off — (a) prologue saves $ra before $s0 (target: $s0 then $ra) and (b) return-0 path reuses $a1's proven-ze… | `.run/backlog_drafts/func_80131A34.c` |
| 4 | func_80141B90 | PINS | 134 | 29 | 3886 | 1.15 | Y | main | 24 | none — MATCH (29 ins); array-of-int %lo-fold + call + u16 if-block; volatile-double reserves the target's 8-b… | `.run/backlog_drafts/func_80141B90.c` |
| 5 | func_80131CA8 | PINS | 134 | 19 | 2546 | 0.75 | Y | a | 0 | none — MATCH (call-through-fnptr dispatcher: explicit return 1/return 0) | `.run/backlog_drafts/func_80131CA8.c` |
| 6 | func_80141A60 | PINS | 1 | 76 | 76 | 0.02 | Y | main | 63 | none — MATCH (76 ins, relocation-masked). Body byte-identical; target reserves an 8-byte | `.run/backlog_drafts/func_80141A60.c` |
| 7 | func_8013E83C | PINS | 1 | 71 | 71 | 0.02 | Y | main | | none — MATCH (scalar global stores + 2 conditional calls; §3-T4 branch-polarity invert on the &0xFF test) | `.run/backlog_drafts/func_8013E83C.c` |
| 8 | func_80140E6C | PINS | 1 | 37 | 37 | 0.01 | Y | main | 4 | 4 ins — each save-across-call copy (move s1,v0 / move s0,v0) should fill the NEXT jal's delay slot (target) b… | `.run/backlog_drafts/func_80140E6C.c` |
### WAVE — 251 fns, 51.7% of remaining gain
### WAVE — 80 fns, 67.2% of remaining gain
| # | name | class | reach | nins | gain_ins | %rem | cached | region | close | where it stuck | best draft |
|--:|------|-------|------:|-----:|---------:|-----:|--------|--------|------:|----------------|------------|
| 1 | func_80155800 | WAVE | 134 | 145 | 19430 | 1.13 | Y | main | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80155800.c` |
| 2 | func_8014E048 | WAVE | 134 | 143 | 19162 | 1.12 | Y | main | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8014E048.c` |
| 3 | func_8014F4C0 | WAVE | 134 | 141 | 18894 | 1.10 | Y | main | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8014F4C0.c` |
| 4 | func_8014ADE0 | WAVE | 134 | 139 | 18626 | 1.09 | Y | main | 19 | 16 ins off — all compiler-internal ties: (1) 0xAAA8 const lands $v0 vs target $v1; | `.run/backlog_drafts/func_8014ADE0.c` |
| 5 | func_80174CB0 | WAVE | 134 | 123 | 16482 | 0.96 | Y | main | 0 | close=0 match_one MATCH but its anon typedef is named 'Buf' which COLLIDES with the existing 'Buf' (s16 h[8],… | `.run/backlog_drafts/func_80174CB0.c` |
| 6 | func_80167540 | WAVE | 134 | 117 | 15678 | 0.91 | Y | main | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80167540.c` |
| 7 | func_801325B8 | WAVE | 134 | 113 | 15142 | 0.88 | Y | a | 4 | 4/113 — prologue save-order of the $s0(cur/p3) vs $s5(p1) pair; gcc emits | `.run/backlog_drafts/func_801325B8.c` |
| 8 | func_8014DD8C | WAVE | 134 | 108 | 14472 | 0.84 | Y | main | 83 | WAVE: 83 mismatch | `.run/backlog_drafts/func_8014DD8C.c` |
| 9 | func_8014E284 | WAVE | 134 | 108 | 14472 | 0.84 | Y | main | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_8014E284.c` |
| 10 | func_8012CC88 | WAVE | 134 | 105 | 14070 | 0.82 | Y | a | 0 | none — MATCH (105 ins, relocation-masked) | `.run/backlog_drafts/func_8012CC88.c` |
| 11 | func_80169228 | WAVE | 134 | 105 | 14070 | 0.82 | Y | main | 0 | none — MATCH (105 ins, relocation-masked). Key levers: arg0/p pinned $s1/$s0, | `.run/backlog_drafts/func_80169228.c` |
| 12 | func_80167714 | WAVE | 134 | 104 | 13936 | 0.81 | Y | main | 0 | none — MATCH (104 ins) | `.run/backlog_drafts/func_80167714.c` |
| 13 | func_801463A0 | WAVE | 134 | 101 | 13534 | 0.79 | Y | main | 0 | none — MATCH (101 ins, match_one); real symbol names; misaligned 8B copy + s16 stores + masked B9C last | `.run/backlog_drafts/func_801463A0.c` |
| 14 | func_80177940 | WAVE | 134 | 101 | 13534 | 0.79 | Y | main | 65 | prologue+setup (35 ins) byte-match exactly; loop body diverges on gcc loop-invariant hoist ORDERING (schedule… | `.run/backlog_drafts/func_80177940.c` |
| 15 | func_801387B8 | WAVE | 134 | 100 | 13400 | 0.78 | Y | a | 50 | the two scanned bytes land in $a0/$a1 not $a1/$a2 (gcc-2.7.2 grabs the freed incoming-arg $a0 for the first l… | `.run/backlog_drafts/func_801387B8.c` |
| 16 | func_801379FC | WAVE | 134 | 97 | 12998 | 0.76 | Y | a | 0 | none — MATCH (match_one 97/97) | `.run/backlog_drafts/func_801379FC.c` |
| 17 | func_8014CD80 | WAVE | 134 | 97 | 12998 | 0.76 | Y | main | | none — MATCH (97 ins). iVar3 pinned to $v1 (register __asm__("$3")) so | `.run/backlog_drafts/func_8014CD80.c` |
| 18 | func_8014FE60 | WAVE | 134 | 95 | 12730 | 0.74 | Y | main | 20 | none — MATCH (permuter closed the final bothzero-block regalloc/schedule residual: moving `a = in[2]` before … | `.run/backlog_drafts/func_8014FE60.c` |
| 19 | func_80150170 | WAVE | 134 | 95 | 12730 | 0.74 | Y | main | | none — MATCH (95/95). Keys: (1) two parallel 3-halfword groups via chained assign `sp10.x = sp18.x = v` (sp18… | `.run/backlog_drafts/func_80150170.c` |
| 20 | func_8014D12C | WAVE | 134 | 93 | 12462 | 0.73 | Y | main | | none — MATCH (93 ins). Block-order lever: success-continuation (return 1) | `.run/backlog_drafts/func_8014D12C.c` |
| 21 | func_8014FFDC | WAVE | 134 | 93 | 12462 | 0.73 | Y | main | 1 | none — MATCH | `.run/backlog_drafts/func_8014FFDC.c` |
| 22 | func_801502EC | WAVE | 134 | 93 | 12462 | 0.73 | Y | main | | none — MATCH (93 ins). 8-byte block copy via alignment-1 struct (Blk8{u8 b[8]}) assignment reproduces the lwl… | `.run/backlog_drafts/func_801502EC.c` |
| 23 | func_8014C6F4 | WAVE | 134 | 91 | 12194 | 0.71 | Y | main | | 19-off loop tie-break — target compiles the search as a while/for (pre-guard sltu;beqz present) with the foun… | `.run/backlog_drafts/func_8014C6F4.c` |
| 24 | func_80173CB4 | WAVE | 134 | 90 | 12060 | 0.70 | Y | main | | none — MATCH (switch form keeps cases unmerged; final block: reuse one temp for the D_8012750C test + the fun… | `.run/backlog_drafts/func_80173CB4.c` |
| 25 | func_8016A73C | WAVE | 134 | 85 | 11390 | 0.66 | Y | main | | none — MATCH (85 ins, relocation-masked) | `.run/backlog_drafts/func_8016A73C.c` |
| 26 | func_8012B4B8 | WAVE | 134 | 84 | 11256 | 0.66 | Y | a | 0 | none — MATCH | `.run/backlog_drafts/func_8012B4B8.c` |
| 27 | func_8014D4C0 | WAVE | 134 | 84 | 11256 | 0.66 | Y | main | | none — MATCH (goto forces if-body out-of-line/last; `>=` fixes slt operand order) | `.run/backlog_drafts/func_8014D4C0.c` |
| 28 | func_80156670 | WAVE | 134 | 83 | 11122 | 0.65 | Y | main | | none — MATCH (83 ins). Key: hoist `iVar1 = uVar3*4;` as its OWN statement before the if so gcc schedules `sll… | `.run/backlog_drafts/func_80156670.c` |
| 29 | func_8014CF04 | WAVE | 134 | 82 | 10988 | 0.64 | Y | main | | none — MATCH (82 ins; array-of-struct scan, for-loop over Ent D_801202A0[96], stride 0x10C) | `.run/backlog_drafts/func_8014CF04.c` |
| 30 | func_8012E138 | WAVE | 134 | 81 | 10854 | 0.63 | Y | a | 0 | none — MATCH (81/81 ins, match_one proxy); reloaded ptr pinned to $a0 | `.run/backlog_drafts/func_8012E138.c` |
| 31 | func_8014D2A0 | WAVE | 134 | 80 | 10720 | 0.62 | Y | main | 27 | none — MATCH (80 ins, relocation-masked); loop-guard idiom per engine_core DEFINE_func_80164ACC | `.run/backlog_drafts/func_8014D2A0.c` |
| 32 | func_8012A1BC | WAVE | 134 | 78 | 10452 | 0.61 | Y | a | 42 | 42/78 — block-copy bytes correct (char[8] => lwl/lwr/swl/swr); residual is gcc's load-hoist split. Target hoi… | `.run/backlog_drafts/func_8012A1BC.c` |
| 33 | func_80137178 | WAVE | 134 | 78 | 10452 | 0.61 | Y | a | 15 | reg values all correct; prologue independent-addiu order + lazy sw placement differ | `.run/backlog_drafts/func_80137178.c` |
| 34 | func_8016163C | WAVE | 134 | 78 | 10452 | 0.61 | Y | main | 50 | none — MATCH (78 ins). First arm calls func_801599A4 with NO arg (asm nop delay slot) via fn-ptr cast ((void(… | `.run/backlog_drafts/func_8016163C.c` |
| 35 | func_80163534 | WAVE | 134 | 76 | 10184 | 0.59 | Y | main | | mismatch=13, a single 1-position scheduling tie. Instrs 1-30 byte-perfect; all registers correct | `.run/backlog_drafts/func_80163534.c` |
| 36 | func_8014D610 | WAVE | 134 | 74 | 9916 | 0.58 | Y | main | | none — MATCH (74 ins). for-loop + continue, single IV pointer p; gcc derives the $s0 = p+0x75 second inductio… | `.run/backlog_drafts/func_8014D610.c` |
| 37 | func_8012E014 | WAVE | 134 | 73 | 9782 | 0.57 | Y | a | 0 | none — MATCH (expected; straightforward struct-field + global-copy body) | `.run/backlog_drafts/func_8012E014.c` |
| 38 | func_80164418 | WAVE | 134 | 70 | 9380 | 0.55 | Y | main | 0 | none — MATCH (s16 stack array forces the spill; 2nd ratan2 reuses /dy/ in $a1) | `.run/backlog_drafts/func_80164418.c` |
| 39 | func_80161774 | WAVE | 134 | 69 | 9246 | 0.54 | Y | main | 53 | none — MATCH (69 ins, match_one verified; clean nested-if; param_1 -> $s0 call-crossing) | `.run/backlog_drafts/func_80161774.c` |
| 40 | func_80175308 | WAVE | 134 | 67 | 8978 | 0.52 | Y | main | | none — MATCH (67 ins, relocation-masked) | `.run/backlog_drafts/func_80175308.c` |
| 1 | func_801325B8 | WAVE | 134 | 113 | 15142 | 4.47 | Y | a | 4 | 4/113 — prologue save-order of the $s0(cur/p3) vs $s5(p1) pair; gcc emits | `.run/backlog_drafts/func_801325B8.c` |
| 2 | func_8012CC88 | WAVE | 134 | 105 | 14070 | 4.15 | Y | a | 0 | none — MATCH (105 ins, relocation-masked) | `.run/backlog_drafts/func_8012CC88.c` |
| 3 | func_801387B8 | WAVE | 134 | 100 | 13400 | 3.95 | Y | a | 50 | the two scanned bytes land in $a0/$a1 not $a1/$a2 (gcc-2.7.2 grabs the freed incoming-arg $a0 for the first l… | `.run/backlog_drafts/func_801387B8.c` |
| 4 | func_801379FC | WAVE | 134 | 97 | 12998 | 3.83 | Y | a | 0 | none — MATCH (match_one 97/97) | `.run/backlog_drafts/func_801379FC.c` |
| 5 | func_8012B4B8 | WAVE | 134 | 84 | 11256 | 3.32 | Y | a | 0 | none — MATCH | `.run/backlog_drafts/func_8012B4B8.c` |
| 6 | func_8012E138 | WAVE | 134 | 81 | 10854 | 3.20 | Y | a | 0 | none — MATCH (81/81 ins, match_one proxy); reloaded ptr pinned to $a0 | `.run/backlog_drafts/func_8012E138.c` |
| 7 | func_8012A1BC | WAVE | 134 | 78 | 10452 | 3.08 | Y | a | 42 | 42/78 — block-copy bytes correct (char[8] => lwl/lwr/swl/swr); residual is gcc's load-hoist split. Target hoi… | `.run/backlog_drafts/func_8012A1BC.c` |
| 8 | func_80137178 | WAVE | 134 | 78 | 10452 | 3.08 | Y | a | 15 | reg values all correct; prologue independent-addiu order + lazy sw placement differ | `.run/backlog_drafts/func_80137178.c` |
| 9 | func_8012E014 | WAVE | 134 | 73 | 9782 | 2.88 | Y | a | 0 | none — MATCH (expected; straightforward struct-field + global-copy body) | `.run/backlog_drafts/func_8012E014.c` |
| 10 | func_80130C08 | WAVE | 134 | 65 | 8710 | 2.57 | Y | a | 5 | tail shares one jal func_80131CA8 between the a1=5 and a1=0x38 arms via `j .L80130CEC` with a DUPLICATED `mov… | `.run/backlog_drafts/func_80130C08.c` |
| 11 | func_80133298 | WAVE | 134 | 65 | 8710 | 2.57 | Y | a | 0 | none — MATCH (65 ins, relocation-masked) | `.run/backlog_drafts/func_80133298.c` |
| 12 | func_80140D68 | WAVE | 134 | 65 | 8710 | 2.57 | Y | main | 5 | 5-ins near-miss — gcc hoists `lui 0xff00` (the 0xFF000000 mask) one slot too early in the first AddPrim block… | `.run/backlog_drafts/func_80140D68.c` |
| 13 | func_80136F3C | WAVE | 134 | 61 | 8174 | 2.41 | Y | a | 10 | 10/61 — regalloc EXACT (param-copy + corner register-pins). residual = gcc list-scheduler permutation of the … | `.run/backlog_drafts/func_80136F3C.c` |
| 14 | func_8012A328 | WAVE | 134 | 60 | 8040 | 2.37 | Y | a | 0 | none — MATCH (60 ins, relocation-masked) | `.run/backlog_drafts/func_8012A328.c` |
| 15 | func_80130650 | WAVE | 134 | 60 | 8040 | 2.37 | Y | a | | none — MATCH (60 ins). ((void (*)(void))func_801319E0)() called with NO arg in the >=0x10 branch (target jal+… | `.run/backlog_drafts/func_80130650.c` |
| 16 | func_80138DE0 | WAVE | 134 | 60 | 8040 | 2.37 | Y | a | 0 | none — MATCH (60 ins) | `.run/backlog_drafts/func_80138DE0.c` |
| 17 | func_8012B77C | WAVE | 134 | 58 | 7772 | 2.29 | Y | a | 33 | gcc instruction-scheduler load-ordering + 1st-ratan2 delay-slot fill differ (s2 subtraction lands early inste… | `.run/backlog_drafts/func_8012B77C.c` |
| 18 | func_8012F49C | WAVE | 134 | 51 | 6834 | 2.02 | Y | a | 29 | gcc CSEs the two &D_800AF648 into one call-crossing pseudo and allocates it the | `.run/backlog_drafts/func_8012F49C.c` |
| 19 | func_801376E8 | WAVE | 134 | 51 | 6834 | 2.02 | Y | a | 0 | none — MATCH (51 ins). 3 levers: (1) adjacent-field array u16 D_80126A14[] for A14/A16 | `.run/backlog_drafts/func_801376E8.c` |
| 20 | func_80130A18 | WAVE | 134 | 43 | 5762 | 1.70 | Y | a | | none — MATCH (two separate Vec3s locals give the 8-byte-spaced sp+0x10/sp+0x18 blocks) | `.run/backlog_drafts/func_80130A18.c` |
| 21 | func_80131D68 | WAVE | 134 | 38 | 5092 | 1.50 | Y | a | 0 | return value held in $v0 per-path (no $s1 frame); using explicit returns | `.run/backlog_drafts/func_80131D68.c` |
| 22 | func_8012F40C | WAVE | 134 | 36 | 4824 | 1.42 | Y | a | 0 | none — MATCH (address rematerialized per call via caller-saved $a0 pin) | `.run/backlog_drafts/func_8012F40C.c` |
| 23 | func_80144B14 | WAVE | 134 | 34 | 4556 | 1.34 | Y | main | 31 | none — MATCH (34 ins). Two stack structs (s16[3] each) passed by addr to | `.run/backlog_drafts/func_80144B14.c` |
| 24 | func_8012F274 | WAVE | 134 | 29 | 3886 | 1.15 | Y | a | 0 | none — MATCH (29 ins, match_one byte-clean via relocation-masked pipeline) | `.run/backlog_drafts/func_8012F274.c` |
| 25 | func_80131CF4 | WAVE | 134 | 29 | 3886 | 1.15 | Y | a | 15 | 15 mismatches cascade from a 2-instruction gap — target reloads *param_1 (lw v0,0(a0)) into v0 before the loo… | `.run/backlog_drafts/func_80131CF4.c` |
| 26 | func_80137614 | WAVE | 134 | 26 | 3484 | 1.03 | Y | a | 0 | none — MATCH (sibling func_8013767C pattern; all 3 params live across the call) | `.run/backlog_drafts/func_80137614.c` |
| 27 | func_8012A598 | WAVE | 134 | 24 | 3216 | 0.95 | Y | a | 0 | none — MATCH (24 ins, relocation-masked) | `.run/backlog_drafts/func_8012A598.c` |
| 28 | func_8013FAF8 | WAVE | 1 | 312 | 312 | 0.09 | Y | main | | | |
| 29 | func_80130D48 | WAVE | 1 | 266 | 266 | 0.08 | n | a | | | |
| 30 | func_80140958 | WAVE | 1 | 260 | 260 | 0.08 | Y | main | | | |
| 31 | func_80135480 | WAVE | 1 | 258 | 258 | 0.08 | n | a | | | |
| 32 | func_8012956C | WAVE | 1 | 226 | 226 | 0.07 | n | a | | | |
| 33 | func_80133784 | WAVE | 1 | 203 | 203 | 0.06 | n | a | | | |
| 34 | func_8013DD68 | WAVE | 1 | 187 | 187 | 0.06 | Y | main | | | |
| 35 | func_80136334 | WAVE | 1 | 161 | 161 | 0.05 | n | a | | | |
| 36 | func_80136824 | WAVE | 1 | 156 | 156 | 0.05 | n | a | | | |
| 37 | func_801365B8 | WAVE | 1 | 155 | 155 | 0.05 | n | a | | | |
| 38 | func_80133AB0 | WAVE | 1 | 137 | 137 | 0.04 | n | a | | | |
| 39 | func_8013EB7C | WAVE | 1 | 124 | 124 | 0.04 | Y | main | | | |
| 40 | func_8013D178 | WAVE | 1 | 110 | 110 | 0.03 | Y | main | | | |
*(+211 more WAVE fns — see `.run/worklist.json`)*
*(+40 more WAVE fns — see `.run/worklist.json`)*
### O0 — 9 fns, 0.3% of remaining gain
### O0 — 9 fns, 1.4% of remaining gain
| # | name | class | reach | nins | gain_ins | %rem | cached | region | close | where it stuck | best draft |
|--:|------|-------|------:|-----:|---------:|-----:|--------|--------|------:|----------------|------------|
| 1 | func_8013C08C | O0 | 134 | 27 | 3618 | 0.21 | Y | o0 | | | |
| 2 | func_8013C414 | O0 | 1 | 329 | 329 | 0.02 | Y | o0 | | | |
| 3 | func_8013B83C | O0 | 1 | 272 | 272 | 0.02 | Y | o0 | | | |
| 4 | func_8013BD74 | O0 | 1 | 198 | 198 | 0.01 | Y | o0 | | | |
| 5 | func_8013C0F8 | O0 | 1 | 154 | 154 | 0.01 | Y | o0 | | | |
| 6 | func_8013B6A0 | O0 | 1 | 67 | 67 | 0.00 | Y | o0 | | | |
| 7 | func_8013B598 | O0 | 1 | 66 | 66 | 0.00 | Y | o0 | | | |
| 8 | func_8013BC7C | O0 | 1 | 24 | 24 | 0.00 | Y | o0 | | | |
| 9 | func_8013BCDC | O0 | 1 | 22 | 22 | 0.00 | Y | o0 | | | |
| 1 | func_8013C08C | O0 | 134 | 27 | 3618 | 1.07 | Y | o0 | | | |
| 2 | func_8013C414 | O0 | 1 | 329 | 329 | 0.10 | Y | o0 | | | |
| 3 | func_8013B83C | O0 | 1 | 272 | 272 | 0.08 | Y | o0 | | | |
| 4 | func_8013BD74 | O0 | 1 | 198 | 198 | 0.06 | Y | o0 | | | |
| 5 | func_8013C0F8 | O0 | 1 | 154 | 154 | 0.05 | Y | o0 | | | |
| 6 | func_8013B6A0 | O0 | 1 | 67 | 67 | 0.02 | Y | o0 | | | |
| 7 | func_8013B598 | O0 | 1 | 66 | 66 | 0.02 | Y | o0 | | | |
| 8 | func_8013BC7C | O0 | 1 | 24 | 24 | 0.01 | Y | o0 | | | |
| 9 | func_8013BCDC | O0 | 1 | 22 | 22 | 0.01 | Y | o0 | | | |
### O1 — 1 fns, 0.3% of remaining gain
### STUB — 12 fns, 7.4% of remaining gain
| # | name | class | reach | nins | gain_ins | %rem | cached | region | close | where it stuck | best draft |
|--:|------|-------|------:|-----:|---------:|-----:|--------|--------|------:|----------------|------------|
| 1 | func_80161A90 | O1 | 134 | 34 | 4556 | 0.27 | Y | main | | none — MATCH (34 ins) at the overlay's STANDARD -O2 (match_one reports MATCH). NO -O1 split needed. | `.run/backlog_drafts/func_80161A90.c` |
### STUB — 33 fns, 4.5% of remaining gain
| # | name | class | reach | nins | gain_ins | %rem | cached | region | close | where it stuck | best draft |
|--:|------|-------|------:|-----:|---------:|-----:|--------|--------|------:|----------------|------------|
| 1 | func_801330E0 | STUB | 134 | 110 | 14740 | 0.86 | Y | a | 79 | none — MATCH (110/110 words byte-identical via objcopy raw .text, reloc-masked on jal+%hi/%lo(D_800AF648)). m… | `.run/backlog_drafts/func_801330E0.c` |
| 2 | func_80158638 | STUB | 134 | 87 | 11658 | 0.68 | Y | main | 2 | none — MATCH (proxy); callee externs are plain func_<addr>, gate's canon/cast passes own them | `.run/backlog_drafts/func_80158638.c` |
| 3 | func_80173BC0 | STUB | 134 | 41 | 5494 | 0.32 | Y | main | | none — MATCH. Keys: invert mask branch (else-block = 80174650 path so func_8013E588 | `.run/backlog_drafts/func_80173BC0.c` |
| 4 | func_8012A6D0 | STUB | 134 | 34 | 4556 | 0.27 | Y | a | 0 | none — MATCH (sum order p[2]^2 + p[0]^2, then ratan2(p1[1]-p2[1], (s16)dist)) | `.run/backlog_drafts/func_8012A6D0.c` |
| 5 | func_8012EFB8 | STUB | 134 | 32 | 4288 | 0.25 | Y | a | 11 | none — MATCH (32 ins, byte-verified via objdump -dz; match_one's default objdump elides the 2 consecutive rtp… | `.run/backlog_drafts/func_8012EFB8.c` |
| 6 | func_8016BA68 | STUB | 134 | 29 | 3886 | 0.23 | Y | main | | none — MATCH (29 ins, straight-line; lh narrow loads at call site) | `.run/backlog_drafts/func_8016BA68.c` |
| 7 | func_80160F00 | STUB | 134 | 28 | 3752 | 0.22 | Y | main | 0 | none — MATCH (straight-line STUB; $s0 holds param_1 across calls naturally) | `.run/backlog_drafts/func_80160F00.c` |
| 8 | func_80146C3C | STUB | 134 | 23 | 3082 | 0.18 | Y | main | 0 | none — MATCH | `.run/backlog_drafts/func_80146C3C.c` |
| 9 | func_80162CCC | STUB | 134 | 23 | 3082 | 0.18 | Y | main | 0 | none — MATCH expected; direct translation, psVar1 as u16* gives lhu, $s0=param_1 survives both calls | `.run/backlog_drafts/func_80162CCC.c` |
| 10 | func_80166244 | STUB | 134 | 22 | 2948 | 0.17 | Y | main | 0 | none — MATCH expected (single tail-call STUB) | `.run/backlog_drafts/func_80166244.c` |
| 11 | func_801653B8 | STUB | 134 | 15 | 2010 | 0.12 | Y | main | 0 | none — MATCH expected (simple call-crossing wrapper, param saved in $s0) | `.run/backlog_drafts/func_801653B8.c` |
| 12 | func_801542A4 | STUB | 134 | 14 | 1876 | 0.11 | Y | main | 0 | none — MATCH expected (simple stub: field stores + tail call) | `.run/backlog_drafts/func_801542A4.c` |
| 13 | func_8016F0AC | STUB | 134 | 14 | 1876 | 0.11 | Y | main | 0 | none — MATCH (expected; address CSE'd into $s0 across both calls) | `.run/backlog_drafts/func_8016F0AC.c` |
| 14 | func_8014C568 | STUB | 134 | 13 | 1742 | 0.10 | Y | main | 0 | none — MATCH expected; straightforward ratan2 wrapper with two s16 deltas & 0xFFF | `.run/backlog_drafts/func_8014C568.c` |
| 15 | func_8015BE94 | STUB | 134 | 12 | 1608 | 0.09 | Y | main | 0 | none — MATCH | `.run/backlog_drafts/func_8015BE94.c` |
| 16 | func_801732C4 | STUB | 134 | 12 | 1608 | 0.09 | Y | main | 0 | none — MATCH (param survives first call → $s0; ghidra-C order is correct) | `.run/backlog_drafts/func_801732C4.c` |
| 17 | func_8017331C | STUB | 134 | 12 | 1608 | 0.09 | Y | main | 0 | none — MATCH (param_1 saved to $s0 across first call, passed to second) | `.run/backlog_drafts/func_8017331C.c` |
| 18 | func_80173374 | STUB | 134 | 12 | 1608 | 0.09 | Y | main | 0 | none — MATCH expected (param_1 lives across first call → naturally lands in $s0) | `.run/backlog_drafts/func_80173374.c` |
| 19 | func_80174554 | STUB | 134 | 12 | 1608 | 0.09 | Y | main | 0 | none — MATCH (clean stub; param_1 reused in $a0 across first call, saved to $s0 for second) | `.run/backlog_drafts/func_80174554.c` |
| 20 | func_801745AC | STUB | 134 | 12 | 1608 | 0.09 | Y | main | | none — MATCH (stub: param saved in $s0 across first call, passed to second) | `.run/backlog_drafts/func_801745AC.c` |
| 21 | func_80174650 | STUB | 134 | 9 | 1206 | 0.07 | Y | main | | | |
| 22 | func_80133CD4 | STUB | 1 | 399 | 399 | 0.02 | n | a | | | |
| 23 | func_8013CB84 | STUB | 1 | 249 | 249 | 0.01 | Y | main | | | |
| 24 | func_8013D53C | STUB | 1 | 240 | 240 | 0.01 | Y | main | | | |
| 25 | func_8013B274 | STUB | 1 | 189 | 189 | 0.01 | n | a | | | |
| 26 | func_8013D9B0 | STUB | 1 | 141 | 141 | 0.01 | Y | main | | | |
| 27 | func_80140F00 | STUB | 1 | 128 | 128 | 0.01 | Y | main | | | |
| 28 | func_8013AD38 | STUB | 1 | 122 | 122 | 0.01 | n | a | | | |
| 29 | func_80138C60 | STUB | 1 | 62 | 62 | 0.00 | n | a | | | |
| 30 | func_8016BEA0 | STUB | 1 | 37 | 37 | 0.00 | Y | main | 0 | none — MATCH (expected) | `.run/backlog_drafts/func_8016BEA0.c` |
| 31 | func_8017D900 | STUB | 1 | 35 | 35 | 0.00 | Y | main | 0 | none — expect MATCH (STUB: ordered global stores + single tail call, sibling of func_8017D840) | `.run/backlog_drafts/func_8017D900.c` |
| 32 | func_8017D98C | STUB | 1 | 31 | 31 | 0.00 | Y | main | 0 | none — MATCH (expected): straight global stores + tail call; const 0x140 reused for two halves | `.run/backlog_drafts/func_8017D98C.c` |
| 33 | func_801336E8 | STUB | 1 | 21 | 21 | 0.00 | n | a | | | |
| 1 | func_801330E0 | STUB | 134 | 110 | 14740 | 4.35 | Y | a | 79 | none — MATCH (110/110 words byte-identical via objcopy raw .text, reloc-masked on jal+%hi/%lo(D_800AF648)). m… | `.run/backlog_drafts/func_801330E0.c` |
| 2 | func_8012A6D0 | STUB | 134 | 34 | 4556 | 1.34 | Y | a | 0 | none — MATCH (sum order p[2]^2 + p[0]^2, then ratan2(p1[1]-p2[1], (s16)dist)) | `.run/backlog_drafts/func_8012A6D0.c` |
| 3 | func_8012EFB8 | STUB | 134 | 32 | 4288 | 1.26 | Y | a | 11 | none — MATCH (32 ins, byte-verified via objdump -dz; match_one's default objdump elides the 2 consecutive rtp… | `.run/backlog_drafts/func_8012EFB8.c` |
| 4 | func_80133CD4 | STUB | 1 | 399 | 399 | 0.12 | n | a | | | |
| 5 | func_8013CB84 | STUB | 1 | 249 | 249 | 0.07 | Y | main | | | |
| 6 | func_8013D53C | STUB | 1 | 240 | 240 | 0.07 | Y | main | | | |
| 7 | func_8013B274 | STUB | 1 | 189 | 189 | 0.06 | n | a | | | |
| 8 | func_8013D9B0 | STUB | 1 | 141 | 141 | 0.04 | Y | main | | | |
| 9 | func_80140F00 | STUB | 1 | 128 | 128 | 0.04 | Y | main | | | |
| 10 | func_8013AD38 | STUB | 1 | 122 | 122 | 0.04 | n | a | | | |
| 11 | func_80138C60 | STUB | 1 | 62 | 62 | 0.02 | n | a | | | |
| 12 | func_801336E8 | STUB | 1 | 21 | 21 | 0.01 | n | a | | won't compile standalone (loose-typing / missing decl) | |
+67
View File
@@ -0,0 +1,67 @@
# CURRENT_PHASE — Phase 25: The structural-family endgame (idiom curriculum)
**Status:** In progress — plan approved 2026-07-08 (gate 1 passed). · **Generation:** Gen2 (17th phase of the
arc; Phase 14 public-flip deferred to Gen3+). · **Effort:** Max (planning/synthesis/deep debugging); **prompt +
wait for the toggle** (R27) → Ultracode for breadth waves (T5, T7 harvests), Fable5Max for new-class discovery +
the T6 curriculum authoring. Claude cannot set effort itself.
**Plan of record:** `/home/musashi/.claude/plans/plan-mode-enabled-max-generic-galaxy.md` (approved, verbatim).
This file is the P3 crash-recovery execution log.
## Scope clarification (Drew, 2026-07-08, at gate 1)
The phase's atomic unit of work is **"solve ONE exemplar per structural family"** — swept across the whole family
set (~2,764 `h_norm` families), curriculum-ordered, cheap-tier-first with Opus/Fable5/permuter escalation. One
solved exemplar → the family propagates ×134 (reloc-only families, free via `--tier h_norm`) **or** yields the
idiom to template the variants (immediate families). The AIM is one exemplar per family for every family the
tiers can crack; genuine gcc-intrinsic-wall families (S3 / RC-6 / cse mega-flush / L6 exemplars) stay
INCLUDE_ASM with logged evidence (G4/P9). This unifies plan T5 (cheap exemplar sweep) + T7 (curriculum-ordered
escalation) into one exemplar-per-family endgame.
## Strategy (approved)
Cheap/free tiers exhaustively FIRST → complete measured frontier map + pre-softened seeds → Fable5Max authors the
idiom curriculum → sweep one exemplar per family (curriculum-ordered), each cracked exemplar propagated ×134 via
`dedup_propagate --tier h_norm`, byte-gated. The whole-binary byte-gate (`harvest_verify`) is the sole arbiter
(G3/P9) — no wrong match can bank; 136/136 byte-identical every batch (R22).
## Tasks
- [x] T0 — Refresh + housekeeping
- [ ] **T1 — Integration-recovery pass** (closeness-0 backlog cohort + the 2 leaf-matches func_8014F4C0/func_80155800) ← CURRENT
- [ ] T2 — Build the exemplar-scoped, class-routed target manifest (one per h_norm family + reach-1 uniques + reach-134 h_exact tractable)
- [ ] T3 — Swing-question PROOF (match one mid-size reloc-only family exemplar → `--tier h_norm --recover` → measure ×134 bank count)
- [ ] T4 — v4 retrain + A/B gate (cheap drafter prep; may run parallel to T2/T3)
- [ ] T5 — Cheap-tier soften + measure wave → the complete class/closeness frontier map (Step A) + pre-advanced seeds *(Ultracode — prompt)*
- [ ] T6 — Step B: Fable5Max curriculum authoring from the measured map *(Fable5Max — prompt)*
- [ ] T7 — Sweep one exemplar per family, curriculum-ordered (validate top ~3-5 first, then scale) *(Ultracode harvests / Fable5 discovery — prompt)*
- [ ] Close — clean-fleet verify · PhaseEnd synthesis · plain-English recap (R25) · Phase-26 backlog
## Current task — T1: Integration-recovery pass
Bank the closeness-0 "MATCH" backlog cohort (already leaf-matched, whole-binary gate-rejected on TU plumbing)
via `tools/recover_integration.py --auto` / `tools/gate_stage.py`. Priority (top-leverage, already MATCH):
`func_80155800` (145 ins, #3 by leverage — TU-context perturbation, needs Max diagnosis) + `func_8014F4C0`
(141 ins, #4 — same-TU fwd-decl conflict `extern s32 …(void)` vs def `(u8*)` + local `Vec4u` typedef).
Drafts in `.run/wave/` + `.run/backlog_drafts/`. Clean-fleet verify each batch (R22); `--tier h_norm` where a
banked fn is a reloc-only family. Bank the already-matched-but-unintegrated drafts before any softening.
## Blockers
None.
## Per-task log
### T0 — Refresh + housekeeping ✅ (2026-07-08)
- Housekeeping: `gccdump.lreg` (repo root) = gcc's DEFAULT RTL dump (dump-base "gccdump", `.lreg` = local-reg
pass; `toplev.c:1973/2077`), left by a one-off `cc1 -da` RTL-inspection run with CWD=root — **not** any
committed tool (grep hits only the gcc source under `tools/reference/`). Deleted; root clean; no other stray
dumps. Practice: RTL-inspection runs use a `.run/` CWD or `-dumpbase .run/gccdump` (R12).
- Regenerated 134 overlay sigs (`make sig-overlays`, exit 0); rebuilt `fuel_manifest` + `worklist --refresh`
(stale Jun-26 ranking killed → `docs/worklist.md`: 130 live stubs, top = the wall `func_801412A8`).
- Fixed `tools/sig_image.py` docstring (h_norm is the live `norm_stream`, not a "T5 placeholder" — R21/R30).
- **CURRENT FRONTIER (R14 ground truth):** fleet 66.02%.
- h_exact: 82,744 unmatched classes / 111,815 instances / **27.33 MB**. Reach-134 tier = **130 classes /
4.11 MB** (7 tiny + 55 small + 50 med + 16 large + 2 giant-walls). x1-unique = 74,742 classes / **19.99 MB**.
- h_norm: **44,101 families**; **2,764 multi-member families / 11.1 MB** (the hidden lever). Top: same-address-
×134 (func_80133CD4/166994/8013C414 … 126-127 h_exact-cls / 134 inst / 199-399 ins) → match 1 → ×134;
high-count-small (func_80150480: **1,997 inst × 22 ins** → 1 idiom → ~2000 fns); low-variant
(func_8014E284/80150170: 2 h_exact-cls / 268 inst → match 2 → ×268).
- **Solo-monster reframe CONFIRMED:** 3,989 / 8,670 large (≥150-ins) h_exact-reach-1 fns have h_norm siblings
(46% templatable); 4,681 truly-unique-shape (worst ROI → LAST).
- Cheap first wins queued: T1 leaf-matches `func_80155800` (#3) + `func_8014F4C0` (#4) ≈ 38k gain_ins
near-free; 2 permanent walls `func_801412A8`/`func_80178004` stay INCLUDE_ASM (G4).
+9 -5
View File
@@ -10,11 +10,15 @@ overlays be signed WITHOUT importing each into Ghidra — the input to the cross
so it needs only correct boundaries + a byte slice (no normalization). All overlays load at the same
vram (0x80128158), so a shared function at the same offset is byte-identical (h_exact) across overlays.
`h_norm`/`h_seq` (structural / mnemonic tiers) require replicating Ghidra's normToken + mnemonic
rendering exactly — that calibration + its resident acceptance gate is T5. UNTIL T5, this tool emits
h_norm = h_seq = h_exact (a CONSERVATIVE placeholder: it produces zero false structural matches; it
never claims two different-byte functions are structurally equal). Overlays are not signed until T6
(after T5 calibrates), so the cross-report only ever consumes the calibrated tiers.
`h_norm` (structural tier) is a self-contained relocation normalizer (`norm_stream`, below): it masks
j/jal 26-bit targets, `lui` HI16, and the register-paired `lo` LO16 (tracking the hi/lo pairing from the
instruction stream alone, no reloc table needed), while keeping registers, true immediates, and
PC-relative branches. So for two copies of a function, `h_exact !=` but `h_norm ==` means they differ
ONLY in relocations (per-overlay symbol addresses) — the structural-family signal. It is CONSERVATIVE:
it can miss a match, never forge one (a proposed `--tier h_norm` share is still confirmed by the
per-overlay whole-binary byte-gate). `h_seq` = SHA1 of the mnemonic (opcode-name) sequence. All 134
overlays are signed via `make sig-overlays`. (Historical note: these tiers were once deferred to
"T5/T6"; they have been live — the real `norm_stream` — since Phase 11.)
Disassembly (rabbitizer — the same engine splat uses) is needed ONLY for boundary detection
(`jr $ra` ends, `jal` call targets) and (in T5) normalization.