mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-09-26 13:33:34 -04:00
77dc52c633
From the S76 func_80011380 agent, which upgraded an empirical closeness-6 plateau to a floor proved from the gcc sources in tools/reference/. The target needs MULT(MULT(i,2),2) unmerged, but fold-const.c:882 split_tree decomposes any MULT whose op1 is TREE_CONSTANT — all 20 spellings measured collapse to one sll 2, and STRIP_NOPS eats NON_LVALUE_EXPR so the usual |0 +0 *1 &~0 ^0 >>0 shields cannot protect it. Both escapes cost an instruction, each for a named reason: a stmt-expr gives the exact 5-insn RTL but its BLOCK_END note breaks the adjacency that stupid.c:497-508 needs for a copy to conflict with its source, so the copy self-coalesces and final.c deletes it; and (t = i*2)*2 with register s32 t reaches exact length and shape but expand_decl's zero-byte (use) brackets make t the longest interval, seizing $v0 and rotating the register ring. Clinching fact that the target has no variable there: its 4th insn sll $v1,$a0,1 reads $a0, not insn 2's dest. Bonus: expand_binop allocates the PLUS dest before force_reg'ing the symbol, so the symbol pseudo loses stupid_reg_compare's tie-break — that is the la-on-$a0 colour. Recorded as the TEMPLATE for a wall claim: name the pass, cite file and line, measure each escape, and give the byte fact ruling out the alternative. A wall asserted without that is a belief (§473).