Files
BFM-decomp/docs/worklist.md
T

37 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: 441 · total remaining gain: 1,715,960 ins (6,863,840 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%

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

GIANT hand-decomp queue — 20 fns, 35.2% 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

Idiom-group tables

STRUCT — 89 fns, 2.6% 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

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

PINS — 38 fns, 5.5% 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

WAVE — 251 fns, 51.7% 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

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

O0 — 9 fns, 0.3% 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

O1 — 1 fns, 0.3% 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_, 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