Skip to content

release: v0.9.0#113

Merged
avrabe merged 1 commit into
mainfrom
release/v0.9.0
May 14, 2026
Merged

release: v0.9.0#113
avrabe merged 1 commit into
mainfrom
release/v0.9.0

Conversation

@avrabe
Copy link
Copy Markdown
Contributor

@avrabe avrabe commented May 14, 2026

Summary

Bump workspace version 0.8.0 → 0.9.0.

Measurement and harvest release. First objective measurements of LOOM against wasm-opt -O3 across multiple workloads, plus harvesting of v0.8.0's infrastructure into concrete wins on component-shaped fixtures.

Merged PRs

PR Title
#110 feat(measurement): corpus-wide LOOM vs wasm-opt harness + measured wins on components (PR-P)
#111 feat(opt): span-based CSE replacement for pure Call exprs (PR-K2)
#112 feat(opt): grow Souper rule set to 12 identities, wire into pipeline (PR-L2)

Real measured wins (first time)

Workload Baseline LOOM wasm-opt -O3 LOOM Δ% wasm-opt Δ%
gale 1,941 1,846 1,925 −4.9% −0.8%
calculator_root (2.3MB) 2,337,724 2,327,794 (errors) −0.4% n/a
simple_component 261 212 (errors) −18.8% n/a
calc_component 442 392 (errors) −11.3% n/a

Two strategic facts established:

  1. LOOM beats wasm-opt -O3 on gale by 4.1 points at total-file level. First measured workload where LOOM dominates.
  2. PR-M (v0.8.0) delivers −11% to −19% on small adapter-heavy components. The percentage dilutes on large components. The strategic moat is real: wasm-opt cannot process Component-Model components at all (errors out on every one).

Two surprises discovered during measurement

  1. PR-L (v0.8.0) was never wired into the optimizer pipeline. The module existed but loom optimize never called it. PR-L2 adds the missing registration. Discovered via --stats per-pass breakdown.
  2. The Z3 verifier models every Call as a fresh symbolic constant, so PR-K2's cross-call CSE dedup is rejected by the validator with a counterexample. The replacement infrastructure ships, but the tests stay #[ignore]'d until PR-K3 (verifier-side change to model pure calls as uninterpreted functions f(args)).

Deferred to v1.0.0

  • PR-K3: verifier-side Call modeling (unblocks the entire cross-call dedup feature).
  • PR-L3: power-of-2 mul/div → shift rules.
  • PR-Q: land a real corpus (httparse, nom_numbers, etc.) so harness has more rows.

🤖 Generated with Claude Code

Bump workspace version 0.8.0 → 0.9.0.

Measurement and harvest release. Three PRs landed in parallel via
worktree-isolated agents:

  #110  PR-P   corpus-wide LOOM vs wasm-opt -O3 measurement harness
  #111  PR-K2  span-based CSE replacement infrastructure + verifier-gap
  #112  PR-L2  Souper rule set: 3 → 12 identities, wire into pipeline

First objective measured wins:

| Workload | LOOM Δ% | wasm-opt Δ% |
|----------|--------:|------------:|
| gale | -4.9% | -0.8% (LOOM wins by 4.1 pts)
| simple_component | -18.8% | n/a (wasm-opt errors)
| calc_component | -11.3% | n/a (wasm-opt errors)
| calculator_root | -0.4% | n/a (wasm-opt errors)

LOOM beats wasm-opt on gale; PR-M's adapter spec delivers double-
digit wins on adapter-heavy components. wasm-opt cannot process
Component-Model components at all — LOOM's strategic moat.

Critical finding (PR-K2): the Z3 verifier models every Call as a
fresh symbolic constant, so cross-call CSE dedup is rejected even
when the replacement is correct. PR-K3 (verifier-side) will model
pure+no-trap calls as uninterpreted-function applications.
@avrabe avrabe merged commit 49eaba0 into main May 14, 2026
9 of 18 checks passed
@avrabe avrabe deleted the release/v0.9.0 branch May 14, 2026 17:25
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.

1 participant