mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-09-26 13:33:34 -04:00
8f3e4a12ba
- re-baseline the target frontier from the fixed tools (R14): 228 ov077 stubs (broken manifest saw 30); worklist/family-hseq regenerated. 68.6% instr / 49.2% distinct. - R14 corrections to the audit handoff: the '~1,200 type-heavy' was already banked by A3h (+2,675); the real remaining lever is 128 matched-sib families (~2.64M templ ins), and register pins are NOT a banking blocker (func_8017A4AC banked ×134 with pins). - Task 7 is near-miss CLOSING (close 1-5 re-gate = 0/13 through the fixed pipeline), not fresh crack. - §52: single Fable5 on func_80178004 (regalloc-order class exemplar) = honest wall (P9), structure-exact 163/165, residual = 3 compiler-internal register-alloc integers, likely intrinsic; byte-verified 126/165. Correction: the 'pinned MATCH' was a myth (never matched). 6 byte-proven walker-family levers + the skeleton idiom transfer to the 11 regalloc-order siblings (Fable5 discovers, cheap-Opus applies). decision-log entry (R31).
27 KiB
27 KiB
Worklist — remaining functions ranked by byte-weighted project gain
Generated by
tools/worklist.pyfrom.run/fuel_manifest.json+.run/backlog.jsonl. Ranked by byte-weighted gaingain_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: 228 · total remaining gain: 884,130 ins (3,536,520 bytes ×-fleet)
Idiom-class summary (the groups)
| class | count | gain_ins | % of remaining |
|---|---|---|---|
| GIANT | 2 | 48,642 | 5.5% |
| STRUCT | 59 | 36,125 | 4.1% |
| PINS | 20 | 63,536 | 7.2% |
| WAVE | 131 | 688,362 | 77.9% |
| O0 | 7 | 4,704 | 0.5% |
| O1 | 1 | 4,556 | 0.5% |
| STUB | 8 | 38,205 | 4.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 | 3.00 | 3.0 | 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.50 | 5.5 | 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 | 2.14 | 7.6 | Y | after | 127 | residual: 127 mismatch | .run/backlog_drafts/func_8014F4C0.c |
| 4 | func_8014ADE0 | WAVE | 134 | 139 | 18626 | 2.11 | 9.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.96 | 11.7 | 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.86 | 13.6 | 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.71 | 15.3 | 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.67 | 16.9 | Y | jr_8012ACE0 | 7 | STUB: 7 mismatch | .run/backlog_drafts/func_801330E0.c |
| 9 | func_8014E284 | WAVE | 134 | 108 | 14472 | 1.64 | 18.6 | Y | after | 83 | WAVE: 83 mismatch | .run/backlog_drafts/func_8014E284.c |
| 10 | func_8012CC88 | WAVE | 134 | 105 | 14070 | 1.59 | 20.2 | Y | jr_8012ACE0 | 0 | none — MATCH (105 ins, relocation-masked) | .run/backlog_drafts/func_8012CC88.c |
| 11 | func_80169228 | WAVE | 134 | 105 | 14070 | 1.59 | 21.8 | 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.58 | 23.3 | Y | jr_8015AE2C | 0 | none — MATCH (104 ins) | .run/backlog_drafts/func_80167714.c |
| 13 | func_801463A0 | WAVE | 134 | 101 | 13534 | 1.53 | 24.9 | 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.53 | 26.4 | 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.52 | 27.9 | 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.47 | 29.4 | Y | jr_8012ACE0 | 0 | none — MATCH (match_one 97/97) | .run/backlog_drafts/func_801379FC.c |
| 17 | func_8014CD80 | WAVE | 134 | 97 | 12998 | 1.47 | 30.9 | Y | after | 63 | WAVE: 63 mismatch | .run/backlog_drafts/func_8014CD80.c |
| 18 | func_80150170 | WAVE | 134 | 95 | 12730 | 1.44 | 32.3 | Y | after | 88 | WAVE: 88 mismatch | .run/backlog_drafts/func_80150170.c |
| 19 | func_8014D12C | WAVE | 134 | 93 | 12462 | 1.41 | 33.7 | Y | after | 53 | WAVE: 53 mismatch | .run/backlog_drafts/func_8014D12C.c |
| 20 | func_8014FFDC | WAVE | 134 | 93 | 12462 | 1.41 | 35.1 | Y | after | 1 | none — MATCH | .run/backlog_drafts/func_8014FFDC.c |
| 21 | func_801502EC | WAVE | 134 | 93 | 12462 | 1.41 | 36.5 | Y | after | 78 | WAVE: 78 mismatch | .run/backlog_drafts/func_801502EC.c |
| 22 | func_8014C6F4 | WAVE | 134 | 91 | 12194 | 1.38 | 37.9 | Y | after | 14 | WAVE: 14 mismatch | .run/backlog_drafts/func_8014C6F4.c |
| 23 | func_80158638 | STUB | 134 | 87 | 11658 | 1.32 | 39.2 | Y | jr_8015444C | 1 | STUB: 1 mismatch | .run/backlog_drafts/func_80158638.c |
| 24 | func_8012B4B8 | WAVE | 134 | 84 | 11256 | 1.27 | 40.5 | Y | jr_8012ACE0 | 0 | none — MATCH | .run/backlog_drafts/func_8012B4B8.c |
| 25 | func_8014D4C0 | WAVE | 134 | 84 | 11256 | 1.27 | 41.8 | Y | after | 44 | WAVE: 44 mismatch | .run/backlog_drafts/func_8014D4C0.c |
| 26 | func_80156670 | WAVE | 134 | 83 | 11122 | 1.26 | 43.0 | 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 |
|
| 27 | func_8014CF04 | WAVE | 134 | 82 | 10988 | 1.24 | 44.3 | Y | after | 27 | WAVE: 27 mismatch | .run/backlog_drafts/func_8014CF04.c |
| 28 | func_8012E138 | WAVE | 134 | 81 | 10854 | 1.23 | 45.5 | Y | jr_8012ACE0 | 0 | none — MATCH (81/81 ins, match_one proxy); reloaded ptr pinned to $a0 | .run/backlog_drafts/func_8012E138.c |
| 29 | func_8014D2A0 | WAVE | 134 | 80 | 10720 | 1.21 | 46.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 |
| 30 | func_8012A1BC | WAVE | 134 | 78 | 10452 | 1.18 | 47.9 | 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 |
| 31 | func_80137178 | WAVE | 134 | 78 | 10452 | 1.18 | 49.1 | Y | jr_8012ACE0 | 15 | reg values all correct; prologue independent-addiu order + lazy sw placement differ | .run/backlog_drafts/func_80137178.c |
| 32 | func_8016163C | WAVE | 134 | 78 | 10452 | 1.18 | 50.3 | 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 |
| 33 | func_80163534 | WAVE | 134 | 76 | 10184 | 1.15 | 51.4 | 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 |
|
| 34 | func_8014D610 | WAVE | 134 | 74 | 9916 | 1.12 | 52.5 | Y | after | 60 | WAVE: 60 mismatch | .run/backlog_drafts/func_8014D610.c |
| 35 | func_8012E014 | WAVE | 134 | 73 | 9782 | 1.11 | 53.6 | Y | jr_8012ACE0 | 0 | none — MATCH (expected; straightforward struct-field + global-copy body) | .run/backlog_drafts/func_8012E014.c |
| 36 | func_80132F40 | STRUCT | 134 | 72 | 9648 | 1.09 | 54.7 | Y | jr_8012ACE0 | 59 | STRUCT: 59 mismatch | .run/backlog_drafts/func_80132F40.c |
| 37 | func_80164418 | WAVE | 134 | 70 | 9380 | 1.06 | 55.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 |
| 38 | func_80161774 | WAVE | 134 | 69 | 9246 | 1.05 | 56.8 | 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 |
| 39 | func_80175308 | WAVE | 134 | 67 | 8978 | 1.02 | 57.9 | Y | jr_801734BC | 41 | WAVE: 41 mismatch | .run/backlog_drafts/func_80175308.c |
| 40 | func_801775E0 | WAVE | 134 | 67 | 8978 | 1.02 | 58.9 | 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 |
GIANT hand-decomp queue — 2 fns, 5.5% 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 | 3.00 | 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.50 | 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 — 59 fns, 4.1% 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.96 | 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 | 1.09 | Y | jr_8012ACE0 | 59 | STRUCT: 59 mismatch | .run/backlog_drafts/func_80132F40.c |
| 3 | func_8017C974 | STRUCT | 1 | 947 | 947 | 0.11 | Y | jr_8017A4AC | |||
| 4 | func_8018103C | STRUCT | 1 | 579 | 579 | 0.07 | Y | jr_8017A4AC | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | .run/backlog_drafts/func_8018103C.c |
| 5 | func_8013F350 | STRUCT | 1 | 490 | 490 | 0.06 | Y | main | |||
| 6 | func_80131340 | STRUCT | 1 | 424 | 424 | 0.05 | n | jr_8012ACE0 | |||
| 7 | func_80159C84 | STRUCT | 1 | 337 | 337 | 0.04 | Y | jr_8015444C | |||
| 8 | func_80183324 | STRUCT | 1 | 324 | 324 | 0.04 | Y | jr_80182268 | |||
| 9 | func_80135EB0 | STRUCT | 1 | 289 | 289 | 0.03 | n | jr_8012ACE0 | |||
| 10 | func_8015B950 | STRUCT | 1 | 271 | 271 | 0.03 | Y | jr_8015AE2C | |||
| 11 | func_8017FD14 | STRUCT | 1 | 249 | 249 | 0.03 | Y | jr_8017A4AC | |||
| 12 | func_8015C32C | STRUCT | 1 | 222 | 222 | 0.03 | Y | jr_8015AE2C | |||
| 13 | func_8015EA3C | STRUCT | 1 | 204 | 204 | 0.02 | Y | jr_8015AE2C | |||
| 14 | func_8015D738 | STRUCT | 1 | 201 | 201 | 0.02 | Y | jr_8015AE2C | |||
| 15 | func_80181BE4 | STRUCT | 1 | 201 | 201 | 0.02 | Y | jr_8017A4AC | |||
| 16 | func_8015F448 | STRUCT | 1 | 188 | 188 | 0.02 | Y | jr_8015AE2C | |||
| 17 | func_8014032C | STRUCT | 1 | 183 | 183 | 0.02 | Y | main | |||
| 18 | func_80135A4C | STRUCT | 1 | 181 | 181 | 0.02 | n | jr_8012ACE0 | |||
| 19 | func_8017AE2C | STRUCT | 1 | 174 | 174 | 0.02 | Y | jr_8017A4AC | |||
| 20 | func_80154C24 | STRUCT | 1 | 173 | 173 | 0.02 | Y | jr_8015444C | |||
| 21 | func_8018308C | STRUCT | 1 | 166 | 166 | 0.02 | Y | jr_80182268 | |||
| 22 | func_80160534 | STRUCT | 1 | 161 | 161 | 0.02 | Y | jr_8015AE2C | |||
| 23 | func_80180C90 | STRUCT | 1 | 160 | 160 | 0.02 | Y | jr_8017A4AC | |||
| 24 | func_801299C8 | STRUCT | 1 | 158 | 158 | 0.02 | n | a | |||
| 25 | func_80135260 | STRUCT | 1 | 136 | 136 | 0.02 | n | jr_8012ACE0 | |||
| 26 | func_80183834 | STRUCT | 1 | 135 | 135 | 0.02 | Y | jr_80182268 | |||
| 27 | func_80181948 | STRUCT | 1 | 132 | 132 | 0.01 | Y | jr_8017A4AC | |||
| 28 | func_80185E68 | STRUCT | 1 | 132 | 132 | 0.01 | Y | jr_80182268 | 131 | STRUCT: 131 mismatch | .run/backlog_drafts/func_80185E68.c |
| 29 | func_801555F4 | STRUCT | 1 | 131 | 131 | 0.01 | Y | jr_8015444C | |||
| 30 | func_8015CD20 | STRUCT | 1 | 129 | 129 | 0.01 | Y | jr_8015AE2C | |||
| 31 | func_8012AAAC | STRUCT | 1 | 125 | 125 | 0.01 | n | a | |||
| 32 | func_80140608 | STRUCT | 1 | 123 | 123 | 0.01 | Y | main | |||
| 33 | func_801588CC | STRUCT | 1 | 122 | 122 | 0.01 | Y | jr_8015444C | |||
| 34 | func_80181F08 | STRUCT | 1 | 117 | 117 | 0.01 | Y | jr_8017A4AC | |||
| 35 | func_80135888 | STRUCT | 1 | 113 | 113 | 0.01 | n | jr_8012ACE0 | |||
| 36 | func_80179B74 | STRUCT | 1 | 111 | 111 | 0.01 | Y | jr_80178D40 | |||
| 37 | func_801594E8 | STRUCT | 1 | 108 | 108 | 0.01 | Y | jr_8015444C | |||
| 38 | 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 |
|
| 39 | func_80135D20 | STRUCT | 1 | 100 | 100 | 0.01 | n | jr_8012ACE0 | |||
| 40 | func_801820DC | STRUCT | 1 | 94 | 94 | 0.01 | Y | jr_8017A4AC | 0 | none — MATCH (switch on entity state at 0x34, inner jtbl on (s8)(u70>>8)) | .run/backlog_drafts/func_801820DC.c |
(+19 more STRUCT fns — see .run/worklist.json)
PINS — 20 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.89 | Y | after | 23 | none — MATCH | .run/backlog_drafts/func_8014E5B4.c |
| 2 | func_80151C54 | PINS | 134 | 52 | 6968 | 0.79 | Y | after | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | .run/backlog_drafts/func_80151C54.c |
| 3 | func_80151B98 | PINS | 134 | 47 | 6298 | 0.71 | Y | after | 15 | PINS: 15 mismatch | .run/backlog_drafts/func_80151B98.c |
| 4 | func_80163764 | PINS | 134 | 42 | 5628 | 0.64 | 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 |
| 5 | func_80146AFC | PINS | 134 | 40 | 5360 | 0.61 | Y | after | 13 | none — MATCH | .run/backlog_drafts/func_80146AFC.c |
| 6 | func_80131A34 | PINS | 134 | 37 | 4958 | 0.56 | 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 |
| 7 | func_80151664 | PINS | 134 | 35 | 4690 | 0.53 | Y | after | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | .run/backlog_drafts/func_80151664.c |
| 8 | func_80170CF0 | PINS | 134 | 30 | 4020 | 0.45 | Y | jr_8016AB6C | 17 | PINS: 17 mismatch | .run/backlog_drafts/func_80170CF0.c |
| 9 | func_80141B90 | PINS | 134 | 29 | 3886 | 0.44 | Y | main | 4 | PINS: 4 mismatch | .run/backlog_drafts/func_80141B90.c |
| 10 | func_8016F0E4 | PINS | 134 | 26 | 3484 | 0.39 | Y | jr_8016AB6C | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | .run/backlog_drafts/func_8016F0E4.c |
| 11 | func_801733FC | PINS | 134 | 25 | 3350 | 0.38 | 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 |
| 12 | func_80131CA8 | PINS | 134 | 19 | 2546 | 0.29 | Y | jr_8012ACE0 | 0 | none — MATCH (call-through-fnptr dispatcher: explicit return 1/return 0) | .run/backlog_drafts/func_80131CA8.c |
| 13 | func_80156600 | PINS | 134 | 18 | 2412 | 0.27 | Y | jr_8015444C | none — MATCH (simple counted scan, do-while form per Ghidra-C) | .run/backlog_drafts/func_80156600.c |
|
| 14 | func_80161208 | PINS | 134 | 14 | 1876 | 0.21 | Y | jr_8015AE2C | 0 | none — MATCH expected (param saved across call → natural $s0, no pin needed) | .run/backlog_drafts/func_80161208.c |
| 15 | func_80184C0C | PINS | 1 | 48 | 48 | 0.01 | Y | jr_80182268 | 1 | none — MATCH (array-of-struct %lo-fold for &D_8018AEB8[idx], stride 0x34) | .run/backlog_drafts/func_80184C0C.c |
| 16 | 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 |
| 17 | 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 |
| 18 | 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 |
| 19 | 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 |
| 20 | 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 — 131 fns, 77.9% 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 | 2.14 | Y | after | 127 | residual: 127 mismatch | .run/backlog_drafts/func_8014F4C0.c |
| 2 | func_8014ADE0 | WAVE | 134 | 139 | 18626 | 2.11 | 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.86 | 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.71 | 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.64 | Y | after | 83 | WAVE: 83 mismatch | .run/backlog_drafts/func_8014E284.c |
| 6 | func_8012CC88 | WAVE | 134 | 105 | 14070 | 1.59 | Y | jr_8012ACE0 | 0 | none — MATCH (105 ins, relocation-masked) | .run/backlog_drafts/func_8012CC88.c |
| 7 | func_80169228 | WAVE | 134 | 105 | 14070 | 1.59 | 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.58 | Y | jr_8015AE2C | 0 | none — MATCH (104 ins) | .run/backlog_drafts/func_80167714.c |
| 9 | func_801463A0 | WAVE | 134 | 101 | 13534 | 1.53 | 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.53 | 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.52 | 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.47 | Y | jr_8012ACE0 | 0 | none — MATCH (match_one 97/97) | .run/backlog_drafts/func_801379FC.c |
| 13 | func_8014CD80 | WAVE | 134 | 97 | 12998 | 1.47 | Y | after | 63 | WAVE: 63 mismatch | .run/backlog_drafts/func_8014CD80.c |
| 14 | func_80150170 | WAVE | 134 | 95 | 12730 | 1.44 | Y | after | 88 | WAVE: 88 mismatch | .run/backlog_drafts/func_80150170.c |
| 15 | func_8014D12C | WAVE | 134 | 93 | 12462 | 1.41 | Y | after | 53 | WAVE: 53 mismatch | .run/backlog_drafts/func_8014D12C.c |
| 16 | func_8014FFDC | WAVE | 134 | 93 | 12462 | 1.41 | Y | after | 1 | none — MATCH | .run/backlog_drafts/func_8014FFDC.c |
| 17 | func_801502EC | WAVE | 134 | 93 | 12462 | 1.41 | Y | after | 78 | WAVE: 78 mismatch | .run/backlog_drafts/func_801502EC.c |
| 18 | func_8014C6F4 | WAVE | 134 | 91 | 12194 | 1.38 | Y | after | 14 | WAVE: 14 mismatch | .run/backlog_drafts/func_8014C6F4.c |
| 19 | func_8012B4B8 | WAVE | 134 | 84 | 11256 | 1.27 | Y | jr_8012ACE0 | 0 | none — MATCH | .run/backlog_drafts/func_8012B4B8.c |
| 20 | func_8014D4C0 | WAVE | 134 | 84 | 11256 | 1.27 | Y | after | 44 | WAVE: 44 mismatch | .run/backlog_drafts/func_8014D4C0.c |
| 21 | func_80156670 | WAVE | 134 | 83 | 11122 | 1.26 | 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 |
|
| 22 | func_8014CF04 | WAVE | 134 | 82 | 10988 | 1.24 | Y | after | 27 | WAVE: 27 mismatch | .run/backlog_drafts/func_8014CF04.c |
| 23 | func_8012E138 | WAVE | 134 | 81 | 10854 | 1.23 | Y | jr_8012ACE0 | 0 | none — MATCH (81/81 ins, match_one proxy); reloaded ptr pinned to $a0 | .run/backlog_drafts/func_8012E138.c |
| 24 | func_8014D2A0 | WAVE | 134 | 80 | 10720 | 1.21 | Y | after | 27 | none — MATCH (80 ins, relocation-masked); loop-guard idiom per engine_core DEFINE_func_80164ACC | .run/backlog_drafts/func_8014D2A0.c |
| 25 | func_8012A1BC | WAVE | 134 | 78 | 10452 | 1.18 | 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 |
| 26 | func_80137178 | WAVE | 134 | 78 | 10452 | 1.18 | Y | jr_8012ACE0 | 15 | reg values all correct; prologue independent-addiu order + lazy sw placement differ | .run/backlog_drafts/func_80137178.c |
| 27 | func_8016163C | WAVE | 134 | 78 | 10452 | 1.18 | 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 |
| 28 | func_80163534 | WAVE | 134 | 76 | 10184 | 1.15 | 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 |
|
| 29 | func_8014D610 | WAVE | 134 | 74 | 9916 | 1.12 | Y | after | 60 | WAVE: 60 mismatch | .run/backlog_drafts/func_8014D610.c |
| 30 | func_8012E014 | WAVE | 134 | 73 | 9782 | 1.11 | Y | jr_8012ACE0 | 0 | none — MATCH (expected; straightforward struct-field + global-copy body) | .run/backlog_drafts/func_8012E014.c |
| 31 | func_80164418 | WAVE | 134 | 70 | 9380 | 1.06 | Y | jr_8015AE2C | 0 | none — MATCH (s16 stack array forces the spill; 2nd ratan2 reuses /dy/ in $a1) | .run/backlog_drafts/func_80164418.c |
| 32 | func_80161774 | WAVE | 134 | 69 | 9246 | 1.05 | 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 |
| 33 | func_80175308 | WAVE | 134 | 67 | 8978 | 1.02 | Y | jr_801734BC | 41 | WAVE: 41 mismatch | .run/backlog_drafts/func_80175308.c |
| 34 | func_801775E0 | WAVE | 134 | 67 | 8978 | 1.02 | 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 |
| 35 | func_80130C08 | WAVE | 134 | 65 | 8710 | 0.99 | 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 |
| 36 | func_80133298 | WAVE | 134 | 65 | 8710 | 0.99 | Y | jr_8012ACE0 | 0 | none — MATCH (65 ins, relocation-masked) | .run/backlog_drafts/func_80133298.c |
| 37 | func_80140D68 | WAVE | 134 | 65 | 8710 | 0.99 | 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 |
| 38 | func_8014A738 | WAVE | 134 | 62 | 8308 | 0.94 | Y | after | 46 | WAVE: 46 mismatch | .run/backlog_drafts/func_8014A738.c |
| 39 | func_80136F3C | WAVE | 134 | 61 | 8174 | 0.92 | 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 |
| 40 | func_8012A328 | WAVE | 134 | 60 | 8040 | 0.91 | Y | a | 0 | none — MATCH (60 ins, relocation-masked) | .run/backlog_drafts/func_8012A328.c |
(+91 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.41 | Y | o0 | 26 | WAVE: 26 mismatch | .run/backlog_drafts/func_8013C08C.c |
| 2 | func_8013C414 | O0 | 1 | 329 | 329 | 0.04 | 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 | 66 | WAVE: 66 mismatch | .run/backlog_drafts/func_8013B598.c |
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.52 | Y | jr_8015AE2C | 26 | WAVE: 26 mismatch | .run/backlog_drafts/func_80161A90.c |
STUB — 8 fns, 4.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.67 | Y | jr_8012ACE0 | 7 | STUB: 7 mismatch | .run/backlog_drafts/func_801330E0.c |
| 2 | func_80158638 | STUB | 134 | 87 | 11658 | 1.32 | Y | jr_8015444C | 1 | STUB: 1 mismatch | .run/backlog_drafts/func_80158638.c |
| 3 | func_8012EFB8 | STUB | 134 | 32 | 4288 | 0.48 | 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 |
| 4 | func_8016BA68 | STUB | 134 | 29 | 3886 | 0.44 | Y | jr_8016AB6C | 1 | STUB: 1 mismatch | .run/backlog_drafts/func_8016BA68.c |
| 5 | func_80162CCC | STUB | 134 | 23 | 3082 | 0.35 | Y | jr_8015AE2C | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | .run/backlog_drafts/func_80162CCC.c |
| 6 | func_8013CB84 | STUB | 1 | 249 | 249 | 0.03 | Y | main | |||
| 7 | func_8013D53C | STUB | 1 | 240 | 240 | 0.03 | Y | main | |||
| 8 | func_80138C60 | STUB | 1 | 62 | 62 | 0.01 | n | jr_801380E0 |