Skip to content

wasm: compact sparse mir_locals and RLE-encode local declarations in Emit.zig - #141

Merged
cataggar merged 1 commit into
wazigfrom
wasm-compact-locals-111
Nov 4, 2026
Merged

cataggar merged 1 commit into
wazigfrom
wasm-compact-locals-111

Conversation

@cataggar

@cataggar cataggar commented Nov 4, 2026

Copy link
Copy Markdown
Owner

Summary

  • Add Mir.Optimize.compactLocals in src/codegen/wasm/Optimize.zig (invoked at the end of CodeGen.generateInner after dead sp_local epilogue stripping) to eliminate unused interior mir_locals slots, group live non-parameter locals by canonical std.wasm.Valtype (.i32, .i64, .f32, .f64, .v128) while preserving relative order within each type, and remap active bottom_stack_local / sp_local and .local_get / .local_set / .local_tee instruction operands.
  • Update Emit.lower in src/codegen/wasm/Emit.zig to run-length encode consecutive identical std.wasm.Valtype entries via encodeLocals, emitting at most 5 (count, valtype) runs per function instead of N (1, valtype) entries.
  • Add unit tests in src/codegen/wasm/Optimize.zig and end-to-end wasm32-wasi behavior tests in test/behavior/wasm.zig.

Closes #111

@cataggar
cataggar enabled auto-merge (squash) November 4, 2026 17:41
Add Mir.Optimize.compactLocals to eliminate unused interior local slots,
group live non-parameter locals by canonical std.wasm.Valtype (.i32,
.i64, .f32, .f64, .v128) while preserving relative order, and remap
prologue locals and .local_get/.local_set/.local_tee operands.

Update Emit.lower to run-length encode consecutive identical Valtype
runs in each function's Code section header via encodeLocals, reducing
local declaration entries to at most 5 runs per function.

Closes #111

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@cataggar
cataggar merged commit a99c449 into wazig Nov 4, 2026
2 checks passed
@cataggar
cataggar deleted the wasm-compact-locals-111 branch November 4, 2026 17:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

wasm: compact sparse mir_locals and RLE-encode local declarations in Emit.zig

1 participant