Files
BFM-decomp/docs/worklist.md
T
Drew T a302908f24 fix(phase-26a): A3 — target selection was blind to 91.6% of the remaining work; now derived
The audit's CRITICAL finding, fixed at the root. Both tools now derive the corpus from
tools/corpus.py instead of keeping their own decaying copy of the tree layout.

build_fuel_manifest.live_stubs() — a hardcoded 3-file dict {<ov>.c, _a.c, _o0.c}. ov_SC01_077 has
FOURTEEN .c files, so it saw 30 of 264 stubs AND REPORTED SUCCESS. Everything downstream consumes
this manifest — worklist.py (100% of its rows), wave_targets.py (100% of its pools) — so:

    targets            30  ->  263
    reach-134 targets  10  ->  127      (the ENTIRE high-ROI band was invisible)
    remaining gain  83,305 ->  994,633 instructions

994,633 is the A2 audit's predicted figure TO THE UNIT — a fourth independent confirmation
(auditor -> skeptic -> corpus.py -> this). Four of the five highest-leverage functions in the whole
project sit in split regions no tool could see; the top one, func_80178004 (165 ins x reach 134 =
22,110), had never been nominated by anything.

It rotted SILENTLY: .run/fuel_manifest.json (Jul 8) recorded 130 stubs; the same code today returns
30, because the Phase-26 jr splits moved ~100 stubs out from under a dict literal last edited in
Phase 22. Nobody noticed, because a target that is never nominated produces SILENCE, not an error.

wave_targets.REGION_SUB / asm_for() — a 3-entry dict with a silent fallback to the main subdir.
ov_SC01_077 has TWELVE asm subdirs, so 78 of the 87 targets any --class wave emitted handed a
drafter an asm path THAT DOES NOT EXIST. The drafter then drafts against nothing, and the wasted
attempt is booked in the backlog as a *matching* failure — which feeds reserved_walls() and
PERMANENTLY BLACKLISTS a function that was never actually attempted. A silent skip compounding into
a false wall. Now 263/263 asm paths resolve, 0 missing; asm_for() raises rather than guess.
Also: --region's 3-value whitelist defaulted to 'main', which sees 13 of 264 stubs even with a
correct manifest -> default 'any', free-form.

R33 throughout: the INCLUDE_ASM line is SELF-DESCRIBING (its first argument IS the asm subdir,
because splat wrote it there), so both dicts were second copies of a fact the tree already states.
A dict literal is strictly worse than the filesystem AND it fails OPEN. Never re-introduce one.

No build impact (selection/report tools only); docs/worklist.md regenerated with the honest numbers.
2026-07-14 09:22:31 -06:00

30 KiB
Raw Blame History

Worklist — remaining functions ranked by byte-weighted project gain

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: 263 · total remaining gain: 994,633 ins (3,978,532 bytes ×-fleet)

Idiom-class summary (the groups)

class count gain_ins % of remaining
GIANT 2 48,642 4.9%
STRUCT 69 40,281 4.0%
PINS 24 87,388 8.8%
WAVE 146 755,917 76.0%
O0 7 4,704 0.5%
O1 1 4,556 0.5%
STUB 14 53,145 5.3%

Top 40 remaining gains (all classes)

# name class reach nins gain_ins %rem cum% cached region close where it stuck best draft
1 func_801412A8 GIANT 134 198 26532 2.67 2.7 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_80178004 GIANT 134 165 22110 2.22 4.9 Y jr_801734BC 0 none — MATCH (full register pins per sibling func_80177EA4; running-ptr $s2 to stop unroll-rebase; .run/backlog_drafts/func_80178004.c
3 func_8014F4C0 WAVE 134 141 18894 1.90 6.8 Y after 127 residual: 127 mismatch .run/backlog_drafts/func_8014F4C0.c
4 func_8014ADE0 WAVE 134 139 18626 1.87 8.7 Y after 19 16 ins off — all compiler-internal ties: (1) 0xAAA8 const lands $v0 vs target $v1; .run/backlog_drafts/func_8014ADE0.c
5 func_80137DD4 STRUCT 134 129 17286 1.74 10.4 Y jr_8012ACE0 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
6 func_80174CB0 WAVE 134 123 16482 1.66 12.1 Y jr_801734BC 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
7 func_801325B8 WAVE 134 113 15142 1.52 13.6 Y jr_8012ACE0 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_801330E0 STUB 134 110 14740 1.48 15.1 Y jr_8012ACE0 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
9 func_8014E284 WAVE 134 108 14472 1.46 16.5 Y after 83 WAVE: 83 mismatch .run/backlog_drafts/func_8014E284.c
10 func_8012CC88 WAVE 134 105 14070 1.41 17.9 Y jr_8012ACE0 0 none — MATCH (105 ins, relocation-masked) .run/backlog_drafts/func_8012CC88.c
11 func_80169228 WAVE 134 105 14070 1.41 19.3 Y jr_8015AE2C 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 1.40 20.7 Y jr_8015AE2C 0 none — MATCH (104 ins) .run/backlog_drafts/func_80167714.c
13 func_801463A0 WAVE 134 101 13534 1.36 22.1 Y after 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 1.36 23.5 Y jr_801734BC 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 1.35 24.8 Y jr_801380E0 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 1.31 26.1 Y jr_8012ACE0 0 none — MATCH (match_one 97/97) .run/backlog_drafts/func_801379FC.c
17 func_8014CD80 WAVE 134 97 12998 1.31 27.4 Y after none — MATCH (97 ins). iVar3 pinned to $v1 (register asm("$3")) so .run/backlog_drafts/func_8014CD80.c
18 func_80150170 WAVE 134 95 12730 1.28 28.7 Y after 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
19 func_8014D12C WAVE 134 93 12462 1.25 30.0 Y after 53 WAVE: 53 mismatch .run/backlog_drafts/func_8014D12C.c
20 func_8014FFDC WAVE 134 93 12462 1.25 31.2 Y after 1 none — MATCH .run/backlog_drafts/func_8014FFDC.c
21 func_801502EC WAVE 134 93 12462 1.25 32.5 Y after 95 WAVE: 95 mismatch .run/backlog_drafts/func_801502EC.c
22 func_8014C6F4 WAVE 134 91 12194 1.23 33.7 Y after 83 WAVE: 83 mismatch .run/backlog_drafts/func_8014C6F4.c
23 func_80173CB4 WAVE 134 90 12060 1.21 34.9 Y jr_801734BC 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
24 func_80158638 STUB 134 87 11658 1.17 36.1 Y jr_8015444C 1 STUB: 1 mismatch .run/backlog_drafts/func_80158638.c
25 func_8012B4B8 WAVE 134 84 11256 1.13 37.2 Y jr_8012ACE0 0 none — MATCH .run/backlog_drafts/func_8012B4B8.c
26 func_8014D4C0 WAVE 134 84 11256 1.13 38.3 Y after 65 WAVE: 65 mismatch .run/backlog_drafts/func_8014D4C0.c
27 func_80156670 WAVE 134 83 11122 1.12 39.5 Y jr_8015444C 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
28 func_8014CF04 WAVE 134 82 10988 1.10 40.6 Y after 73 WAVE: 73 mismatch .run/backlog_drafts/func_8014CF04.c
29 func_8012E138 WAVE 134 81 10854 1.09 41.7 Y jr_8012ACE0 0 none — MATCH (81/81 ins, match_one proxy); reloaded ptr pinned to $a0 .run/backlog_drafts/func_8012E138.c
30 func_8014D2A0 WAVE 134 80 10720 1.08 42.7 Y after 27 none — MATCH (80 ins, relocation-masked); loop-guard idiom per engine_core DEFINE_func_80164ACC .run/backlog_drafts/func_8014D2A0.c
31 func_8012A1BC WAVE 134 78 10452 1.05 43.8 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
32 func_80137178 WAVE 134 78 10452 1.05 44.8 Y jr_8012ACE0 15 reg values all correct; prologue independent-addiu order + lazy sw placement differ .run/backlog_drafts/func_80137178.c
33 func_8016163C WAVE 134 78 10452 1.05 45.9 Y jr_8015AE2C 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
34 func_80163534 WAVE 134 76 10184 1.02 46.9 Y jr_8015AE2C mismatch=13, a single 1-position scheduling tie. Instrs 1-30 byte-perfect; all registers correct .run/backlog_drafts/func_80163534.c
35 func_8014D610 WAVE 134 74 9916 1.00 47.9 Y after 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
36 func_8012E014 WAVE 134 73 9782 0.98 48.9 Y jr_8012ACE0 0 none — MATCH (expected; straightforward struct-field + global-copy body) .run/backlog_drafts/func_8012E014.c
37 func_80132F40 STRUCT 134 72 9648 0.97 49.9 Y jr_8012ACE0 gcc gives src (sp+0x10) a 5th saved reg ($s3, frame 0x38 not 0x40); target rematerializes .run/backlog_drafts/func_80132F40.c
38 func_80164418 WAVE 134 70 9380 0.94 50.8 Y jr_8015AE2C 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.93 51.7 Y jr_8015AE2C 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.90 52.6 Y jr_801734BC 61 WAVE: 61 mismatch .run/backlog_drafts/func_80175308.c

GIANT hand-decomp queue — 2 fns, 4.9% of all remaining gain

# name class reach nins gain_ins %rem cached region close where it stuck best draft
1 func_801412A8 GIANT 134 198 26532 2.67 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_80178004 GIANT 134 165 22110 2.22 Y jr_801734BC 0 none — MATCH (full register pins per sibling func_80177EA4; running-ptr $s2 to stop unroll-rebase; .run/backlog_drafts/func_80178004.c

Idiom-group tables

STRUCT — 69 fns, 4.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.74 Y jr_8012ACE0 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.97 Y jr_8012ACE0 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.32 Y jr_8016AB6C 25 none — MATCH (24 ins, relocation-masked) .run/backlog_drafts/func_801719A4.c
4 func_8017C974 STRUCT 1 947 947 0.10 Y jr_80178D40
5 func_8018103C STRUCT 1 579 579 0.06 Y jr_80178D40 0 match_one MATCH but gate rejected (declaration/TU plumbing) .run/backlog_drafts/func_8018103C.c
6 func_8017A4AC STRUCT 1 536 536 0.05 Y jr_80178D40
7 func_8013F350 STRUCT 1 490 490 0.05 Y main
8 func_80131340 STRUCT 1 424 424 0.04 n jr_8012ACE0
9 func_80159C84 STRUCT 1 337 337 0.03 Y jr_8015444C
10 func_80183324 STRUCT 1 324 324 0.03 Y jr_80182268
11 func_80135EB0 STRUCT 1 289 289 0.03 n jr_8012ACE0
12 func_8015B950 STRUCT 1 271 271 0.03 Y jr_8015AE2C
13 func_8017FD14 STRUCT 1 249 249 0.03 Y jr_80178D40
14 func_8015C32C STRUCT 1 222 222 0.02 Y jr_8015AE2C
15 func_8015EA3C STRUCT 1 204 204 0.02 Y jr_8015AE2C
16 func_8015D738 STRUCT 1 201 201 0.02 Y jr_8015AE2C
17 func_80181BE4 STRUCT 1 201 201 0.02 Y jr_80178D40
18 func_8015F448 STRUCT 1 188 188 0.02 Y jr_8015AE2C
19 func_8014032C STRUCT 1 183 183 0.02 Y main
20 func_80135A4C STRUCT 1 181 181 0.02 n jr_8012ACE0
21 func_8017AE2C STRUCT 1 174 174 0.02 Y jr_80178D40
22 func_80154C24 STRUCT 1 173 173 0.02 Y jr_8015444C
23 func_8018308C STRUCT 1 166 166 0.02 Y jr_80182268
24 func_80160534 STRUCT 1 161 161 0.02 Y jr_8015AE2C
25 func_80180C90 STRUCT 1 160 160 0.02 Y jr_80178D40
26 func_801299C8 STRUCT 1 158 158 0.02 n a
27 func_80135260 STRUCT 1 136 136 0.01 n jr_8012ACE0
28 func_80183834 STRUCT 1 135 135 0.01 Y jr_80182268
29 func_80181948 STRUCT 1 132 132 0.01 Y jr_80178D40
30 func_80185E68 STRUCT 1 132 132 0.01 Y jr_80182268 131 STRUCT: 131 mismatch .run/backlog_drafts/func_80185E68.c
31 func_801555F4 STRUCT 1 131 131 0.01 Y jr_8015444C
32 func_8015CD20 STRUCT 1 129 129 0.01 Y jr_8015AE2C
33 func_8012AAAC STRUCT 1 125 125 0.01 n a
34 func_80140608 STRUCT 1 123 123 0.01 Y main
35 func_801588CC STRUCT 1 122 122 0.01 Y jr_8015444C
36 func_80181F08 STRUCT 1 117 117 0.01 Y jr_80178D40
37 func_80135888 STRUCT 1 113 113 0.01 n jr_8012ACE0
38 func_80179B74 STRUCT 1 111 111 0.01 Y jr_80178D40
39 func_801594E8 STRUCT 1 108 108 0.01 Y jr_8015444C
40 func_80182C9C STRUCT 1 101 101 0.01 Y jr_80182268 none — MATCH (101 ins). Inner-switch break-to-shared-tail must be written as .run/backlog_drafts/func_80182C9C.c

(+29 more STRUCT fns — see .run/worklist.json)

PINS — 24 fns, 8.8% 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.79 Y after 23 none — MATCH .run/backlog_drafts/func_8014E5B4.c
2 func_80151C54 PINS 134 52 6968 0.70 Y after 0 match_one MATCH but gate rejected (declaration/TU plumbing) .run/backlog_drafts/func_80151C54.c
3 func_80136DFC PINS 134 50 6700 0.67 Y jr_8012ACE0 0 none — MATCH .run/backlog_drafts/func_80136DFC.c
4 func_80151B98 PINS 134 47 6298 0.63 Y after 15 PINS: 15 mismatch .run/backlog_drafts/func_80151B98.c
5 func_80129C40 PINS 134 46 6164 0.62 Y a 0 none — MATCH (array-of-struct %lo-fold for the two 3-element 0xA4-stride bases) .run/backlog_drafts/func_80129C40.c
6 func_80163764 PINS 134 42 5628 0.57 Y jr_8015AE2C 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
7 func_801522CC PINS 134 41 5494 0.55 Y after 0 match_one MATCH but gate rejected (declaration/TU plumbing) .run/backlog_drafts/func_801522CC.c
8 func_80152C80 PINS 134 41 5494 0.55 Y after none — MATCH expected (linear call/store sequence, no regalloc tension) .run/backlog_drafts/func_80152C80.c
9 func_80146AFC PINS 134 40 5360 0.54 Y after 13 none — MATCH .run/backlog_drafts/func_80146AFC.c
10 func_80131A34 PINS 134 37 4958 0.50 Y jr_8012ACE0 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
11 func_80151664 PINS 134 35 4690 0.47 Y after 0 match_one MATCH but gate rejected (declaration/TU plumbing) .run/backlog_drafts/func_80151664.c
12 func_80170CF0 PINS 134 30 4020 0.40 Y jr_8016AB6C 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
13 func_80141B90 PINS 134 29 3886 0.39 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
14 func_8016F0E4 PINS 134 26 3484 0.35 Y jr_8016AB6C 1 none — MATCH (26 ins); natural C form, param_1 auto-allocated to $s0 .run/backlog_drafts/func_8016F0E4.c
15 func_801733FC PINS 134 25 3350 0.34 Y jr_8016AB6C 0 none — modeled on sibling func_80173460 (packed 8-byte struct copy + two s16=1 stores) .run/backlog_drafts/func_801733FC.c
16 func_80131CA8 PINS 134 19 2546 0.26 Y jr_8012ACE0 0 none — MATCH (call-through-fnptr dispatcher: explicit return 1/return 0) .run/backlog_drafts/func_80131CA8.c
17 func_80156600 PINS 134 18 2412 0.24 Y jr_8015444C none — MATCH (simple counted scan, do-while form per Ghidra-C) .run/backlog_drafts/func_80156600.c
18 func_80161208 PINS 134 14 1876 0.19 Y jr_8015AE2C 0 none — MATCH expected (param saved across call → natural $s0, no pin needed) .run/backlog_drafts/func_80161208.c
19 func_80184C0C PINS 1 48 48 0.00 Y jr_80182268 1 none — MATCH (array-of-struct %lo-fold for &D_8018AEB8[idx], stride 0x34) .run/backlog_drafts/func_80184C0C.c
20 func_80161C24 PINS 1 29 29 0.00 Y jr_8015AE2C 1 none — MATCH (array-of-struct %lo-fold; even/odd u16 fields at off 0/2, stride 4) .run/backlog_drafts/func_80161C24.c
21 func_80182988 PINS 1 22 22 0.00 Y jr_80182268 6 none — MATCH (0x5c store must be unsigned short so 0xaa10 stays +43536 → ori, not addiu/sign-extend) .run/backlog_drafts/func_80182988.c
22 func_80157D20 PINS 1 21 21 0.00 Y jr_8015444C 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
23 func_80161CD0 PINS 1 20 20 0.00 Y jr_8015AE2C 14 param_2 must survive the call in $s0; try plain C first then pin to $16 .run/backlog_drafts/func_80161CD0.c
24 func_80161D20 PINS 1 14 14 0.00 Y jr_8015AE2C 1 none — MATCH (array-of-u16 %lo-fold, §18) .run/backlog_drafts/func_80161D20.c

WAVE — 146 fns, 76.0% of remaining gain

# name class reach nins gain_ins %rem cached region close where it stuck best draft
1 func_8014F4C0 WAVE 134 141 18894 1.90 Y after 127 residual: 127 mismatch .run/backlog_drafts/func_8014F4C0.c
2 func_8014ADE0 WAVE 134 139 18626 1.87 Y after 19 16 ins off — all compiler-internal ties: (1) 0xAAA8 const lands $v0 vs target $v1; .run/backlog_drafts/func_8014ADE0.c
3 func_80174CB0 WAVE 134 123 16482 1.66 Y jr_801734BC 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
4 func_801325B8 WAVE 134 113 15142 1.52 Y jr_8012ACE0 4 4/113 — prologue save-order of the $s0(cur/p3) vs $s5(p1) pair; gcc emits .run/backlog_drafts/func_801325B8.c
5 func_8014E284 WAVE 134 108 14472 1.46 Y after 83 WAVE: 83 mismatch .run/backlog_drafts/func_8014E284.c
6 func_8012CC88 WAVE 134 105 14070 1.41 Y jr_8012ACE0 0 none — MATCH (105 ins, relocation-masked) .run/backlog_drafts/func_8012CC88.c
7 func_80169228 WAVE 134 105 14070 1.41 Y jr_8015AE2C 0 none — MATCH (105 ins, relocation-masked). Key levers: arg0/p pinned $s1/$s0, .run/backlog_drafts/func_80169228.c
8 func_80167714 WAVE 134 104 13936 1.40 Y jr_8015AE2C 0 none — MATCH (104 ins) .run/backlog_drafts/func_80167714.c
9 func_801463A0 WAVE 134 101 13534 1.36 Y after 0 none — MATCH (101 ins, match_one); real symbol names; misaligned 8B copy + s16 stores + masked B9C last .run/backlog_drafts/func_801463A0.c
10 func_80177940 WAVE 134 101 13534 1.36 Y jr_801734BC 65 prologue+setup (35 ins) byte-match exactly; loop body diverges on gcc loop-invariant hoist ORDERING (schedule… .run/backlog_drafts/func_80177940.c
11 func_801387B8 WAVE 134 100 13400 1.35 Y jr_801380E0 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
12 func_801379FC WAVE 134 97 12998 1.31 Y jr_8012ACE0 0 none — MATCH (match_one 97/97) .run/backlog_drafts/func_801379FC.c
13 func_8014CD80 WAVE 134 97 12998 1.31 Y after none — MATCH (97 ins). iVar3 pinned to $v1 (register asm("$3")) so .run/backlog_drafts/func_8014CD80.c
14 func_80150170 WAVE 134 95 12730 1.28 Y after 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
15 func_8014D12C WAVE 134 93 12462 1.25 Y after 53 WAVE: 53 mismatch .run/backlog_drafts/func_8014D12C.c
16 func_8014FFDC WAVE 134 93 12462 1.25 Y after 1 none — MATCH .run/backlog_drafts/func_8014FFDC.c
17 func_801502EC WAVE 134 93 12462 1.25 Y after 95 WAVE: 95 mismatch .run/backlog_drafts/func_801502EC.c
18 func_8014C6F4 WAVE 134 91 12194 1.23 Y after 83 WAVE: 83 mismatch .run/backlog_drafts/func_8014C6F4.c
19 func_80173CB4 WAVE 134 90 12060 1.21 Y jr_801734BC 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
20 func_8012B4B8 WAVE 134 84 11256 1.13 Y jr_8012ACE0 0 none — MATCH .run/backlog_drafts/func_8012B4B8.c
21 func_8014D4C0 WAVE 134 84 11256 1.13 Y after 65 WAVE: 65 mismatch .run/backlog_drafts/func_8014D4C0.c
22 func_80156670 WAVE 134 83 11122 1.12 Y jr_8015444C 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
23 func_8014CF04 WAVE 134 82 10988 1.10 Y after 73 WAVE: 73 mismatch .run/backlog_drafts/func_8014CF04.c
24 func_8012E138 WAVE 134 81 10854 1.09 Y jr_8012ACE0 0 none — MATCH (81/81 ins, match_one proxy); reloaded ptr pinned to $a0 .run/backlog_drafts/func_8012E138.c
25 func_8014D2A0 WAVE 134 80 10720 1.08 Y after 27 none — MATCH (80 ins, relocation-masked); loop-guard idiom per engine_core DEFINE_func_80164ACC .run/backlog_drafts/func_8014D2A0.c
26 func_8012A1BC WAVE 134 78 10452 1.05 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
27 func_80137178 WAVE 134 78 10452 1.05 Y jr_8012ACE0 15 reg values all correct; prologue independent-addiu order + lazy sw placement differ .run/backlog_drafts/func_80137178.c
28 func_8016163C WAVE 134 78 10452 1.05 Y jr_8015AE2C 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
29 func_80163534 WAVE 134 76 10184 1.02 Y jr_8015AE2C mismatch=13, a single 1-position scheduling tie. Instrs 1-30 byte-perfect; all registers correct .run/backlog_drafts/func_80163534.c
30 func_8014D610 WAVE 134 74 9916 1.00 Y after 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
31 func_8012E014 WAVE 134 73 9782 0.98 Y jr_8012ACE0 0 none — MATCH (expected; straightforward struct-field + global-copy body) .run/backlog_drafts/func_8012E014.c
32 func_80164418 WAVE 134 70 9380 0.94 Y jr_8015AE2C 0 none — MATCH (s16 stack array forces the spill; 2nd ratan2 reuses /dy/ in $a1) .run/backlog_drafts/func_80164418.c
33 func_80161774 WAVE 134 69 9246 0.93 Y jr_8015AE2C 53 none — MATCH (69 ins, match_one verified; clean nested-if; param_1 -> $s0 call-crossing) .run/backlog_drafts/func_80161774.c
34 func_80175308 WAVE 134 67 8978 0.90 Y jr_801734BC 61 WAVE: 61 mismatch .run/backlog_drafts/func_80175308.c
35 func_801775E0 WAVE 134 67 8978 0.90 Y jr_801734BC 1 1 ins — target sb $v0,0x6($s0) vs mine sb $v0,26($s1) (same store P1+0x1a; gcc address-CSE picks $s1 base… .run/backlog_drafts/func_801775E0.c
36 func_80130C08 WAVE 134 65 8710 0.88 Y jr_8012ACE0 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
37 func_80133298 WAVE 134 65 8710 0.88 Y jr_8012ACE0 0 none — MATCH (65 ins, relocation-masked) .run/backlog_drafts/func_80133298.c
38 func_80140D68 WAVE 134 65 8710 0.88 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
39 func_8014A738 WAVE 134 62 8308 0.84 Y after none — MATCH .run/backlog_drafts/func_8014A738.c
40 func_80136F3C WAVE 134 61 8174 0.82 Y jr_8012ACE0 10 10/61 — regalloc EXACT (param-copy + corner register-pins). residual = gcc list-scheduler permutation of the … .run/backlog_drafts/func_80136F3C.c

(+106 more WAVE fns — see .run/worklist.json)

O0 — 7 fns, 0.5% 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.36 Y o0
2 func_8013C414 O0 1 329 329 0.03 Y o0 322 none — MATCH (329 ins, relocation-masked) .run/backlog_drafts/func_8013C414.c
3 func_8013B83C O0 1 272 272 0.03 Y o0
4 func_8013BD74 O0 1 198 198 0.02 Y o0 192 none — MATCH .run/backlog_drafts/func_8013BD74.c
5 func_8013C0F8 O0 1 154 154 0.02 Y o0 153 none — MATCH (154 ins). Levers: (1) local_c/local_10 = STRUCT pointers so field offsets FOLD into lw/lbu off(… .run/backlog_drafts/func_8013C0F8.c
6 func_8013B6A0 O0 1 67 67 0.01 Y o0
7 func_8013B598 O0 1 66 66 0.01 Y o0

O1 — 1 fns, 0.5% 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.46 Y jr_8015AE2C 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 — 14 fns, 5.3% 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 1.48 Y jr_8012ACE0 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 1.17 Y jr_8015444C 1 STUB: 1 mismatch .run/backlog_drafts/func_80158638.c
3 func_80173BC0 STUB 134 41 5494 0.55 Y jr_801734BC 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.46 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.43 Y jr_8012ACE0 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.39 Y jr_8016AB6C 1 STUB: 1 mismatch .run/backlog_drafts/func_8016BA68.c
7 func_80146C3C STUB 134 23 3082 0.31 Y after 0 match_one MATCH but gate rejected (declaration/TU plumbing) .run/backlog_drafts/func_80146C3C.c
8 func_80162CCC STUB 134 23 3082 0.31 Y jr_8015AE2C 0 match_one MATCH but gate rejected (declaration/TU plumbing) .run/backlog_drafts/func_80162CCC.c
9 func_8014C568 STUB 134 13 1742 0.18 Y after 0 none — MATCH expected; straightforward ratan2 wrapper with two s16 deltas & 0xFFF .run/backlog_drafts/func_8014C568.c
10 func_8013CB84 STUB 1 249 249 0.03 Y main
11 func_8013D53C STUB 1 240 240 0.02 Y main
12 func_80138C60 STUB 1 62 62 0.01 n jr_801380E0
13 func_8017D900 STUB 1 35 35 0.00 Y jr_80178D40 0 none — expect MATCH (STUB: ordered global stores + single tail call, sibling of func_8017D840) .run/backlog_drafts/func_8017D900.c
14 func_8017D98C STUB 1 31 31 0.00 Y jr_80178D40 0 none — MATCH (expected): straight global stores + tail call; const 0x140 reused for two halves .run/backlog_drafts/func_8017D98C.c