You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Follow-up to #178 (mitigated in PR #179 by declining linear-memory ops to select_with_stack).
What to fix
The optimized ir_to_armMemLoad/MemStore lowering emits ADD R12, R12, Raddr; LDR Rd, [R12, #offset], but the actual output has the ADD with garbage registers (e.g. adds r4, r5, r1), dropping the address operand — for both dynamic and constant addresses. Root-cause why the hardcoded Reg::R12/r_addr ADD comes out remapped/garbled (a register-allocation or peephole interaction is the prime suspect; note issue_104 store-load tests passed, so some patterns worked — the divergence is a clue).
Follow-up to #178 (mitigated in PR #179 by declining linear-memory ops to
select_with_stack).What to fix
The optimized
ir_to_armMemLoad/MemStorelowering emitsADD R12, R12, Raddr; LDR Rd, [R12, #offset], but the actual output has the ADD with garbage registers (e.g.adds r4, r5, r1), dropping the address operand — for both dynamic and constant addresses. Root-cause why the hardcodedReg::R12/r_addrADD comes out remapped/garbled (a register-allocation or peephole interaction is the prime suspect; noteissue_104store-load tests passed, so some patterns worked — the divergence is a clue).Done when
select_with_stacksemantics).is_linear_memory_opdecline inoptimize_full(PR fix(opt): decline linear-memory ops — optimized path miscompiled addresses (#178) #179) is removed.#[ignore]dissue_104_i32_loadstore_csetests are re-enabled and pass.--no-optimizeoutput for representative memory patterns.Until then, memory-using modules compile correctly but unoptimized (the PR #179 fallback).