mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-09-26 21:36:06 -04:00
978a086ebb
From the S76 func_80039308 agent (518 ins, 402 -> 154, length exact). Writing a varying-address load as a struct member (((VMask*)q)->w rather than *(u32*)q) sets MEM_IN_STRUCT_P, which lets true_dependence prove the load cannot alias a scalar-global store. Both loads hoist above both stores and three load-delay nops vanish — semantically identical C, different alias info. It also needed a 16-byte s16 sav[8] memory local because reload rounds every spill slot to BIGGEST_ALIGNMENT=8 — the same law §463 derived from alter_reg on a different function via a different agent that had not seen it. Two independent derivations, and a second use for the law: it tells you when a stack layout can only come from a declared local, never from spilling.