Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,38 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## [0.11.35] - 2026-06-09

**In-place select + spill-cost ranking — the first VCR codegen-quality release
(#209/#242, VCR-SEL-002).**

- **In-place select (#283):** the stack selector's `Select` lowering reuses
`val2`'s register as the destination when `val2` is a consumed temp (not a
live param, distinct from cond/val1), eliding the `EQ` "keep val2"
conditional move — one `IT;MOV` per qualifying select instead of two, which
is what native emits for a clamp `(x>k)?k:x`. Falls back to the fresh-dst
two-move form when the guards don't hold (#193 param-clobber class).
Measured `.text`: control_step 378→354 B (−6.3 %), flight_seam inlined
1058→1020 B (−3.6 %), flat 1294→1244 B (−3.9 %). All four differential
fixtures RESULT-identical (control_step 13/13 `0x00210A55`, flight_seam
inlined+flat `0x07FDF307`, div_const 338/338).
- **Spill-cost ranking (#285, VCR-RA-001 wiring step 2):** the Chaitin/Briggs
colourer picks optimistic spill candidates by cost/degree (cost = def+use
occurrence count) instead of degree-only; the uncosted API reproduces the
historic choice exactly. Pure and unwired — fixture ELFs bit-identical.
- **Allocator substrate (#279#281, unwired/flag-gated):** SelectMove/Select
modeled in `reg_effect`; allocator driver + `SYNTH_SHADOW_ALLOC` shadow
pass; const-CSE rematerialization-avoidance behind `SYNTH_CONST_CSE`.
- **VCR traceability (#282, #284):** VCR-SEL-002/VCR-RA-002 filed;
tool-qualification top-of-V (VCR-TQ-001/002: DO-178C/ISO 26262/IEC 61508/
EN 50128 classification + evidence pillars); release-plan tags
(`release-vX.Y`, queryable via `rivet list --filter`).

Falsification: this release is wrong if any module produces a different
*result* than wasmtime where `val2`'s register was still needed after a select
— watched by the four differentials and gale's on-target baselines
(filter_axis 37 / control_step 158 / flat_flight 255 / controller_step 162).

## [0.11.34] - 2026-06-05

**Un-wire the default-on `mul`+`add``mla` fusion — it regresses on-target until
Expand Down
34 changes: 17 additions & 17 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ resolver = "2"
# semver to publish, so the convention now catches up: workspace
# version follows the release tag, bumped pre-tag in the release
# checklist. See docs/release-process.md.
version = "0.11.34"
version = "0.11.35"
edition = "2024"
rust-version = "1.88"
authors = ["PulseEngine Team"]
Expand Down
2 changes: 1 addition & 1 deletion MODULE.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ module(
name = "synth",
# Kept in lockstep with [workspace.package] version in Cargo.toml.
# Both are bumped pre-tag — see docs/release-process.md.
version = "0.11.34",
version = "0.11.35",
)

# Bazel dependencies
Expand Down
2 changes: 1 addition & 1 deletion crates/synth-backend-awsm/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,6 @@ categories.workspace = true
description = "aWsm backend integration for the Synth compiler"

[dependencies]
synth-core = { path = "../synth-core", version = "0.11.34" }
synth-core = { path = "../synth-core", version = "0.11.35" }
anyhow.workspace = true
thiserror.workspace = true
4 changes: 2 additions & 2 deletions crates/synth-backend-riscv/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ categories.workspace = true
description = "RISC-V encoder, ELF builder, PMP allocator, and bare-metal startup for synth"

[dependencies]
synth-core = { path = "../synth-core", version = "0.11.34" }
synth-synthesis = { path = "../synth-synthesis", version = "0.11.34" }
synth-core = { path = "../synth-core", version = "0.11.35" }
synth-synthesis = { path = "../synth-synthesis", version = "0.11.35" }
anyhow.workspace = true
thiserror.workspace = true
tracing.workspace = true
Expand Down
2 changes: 1 addition & 1 deletion crates/synth-backend-wasker/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,6 @@ categories.workspace = true
description = "Wasker backend integration for the Synth compiler"

[dependencies]
synth-core = { path = "../synth-core", version = "0.11.34" }
synth-core = { path = "../synth-core", version = "0.11.35" }
anyhow.workspace = true
thiserror.workspace = true
4 changes: 2 additions & 2 deletions crates/synth-backend/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ default = ["arm-cortex-m"]
arm-cortex-m = ["synth-synthesis"]

[dependencies]
synth-core = { path = "../synth-core", version = "0.11.34" }
synth-synthesis = { path = "../synth-synthesis", version = "0.11.34", optional = true }
synth-core = { path = "../synth-core", version = "0.11.35" }
synth-synthesis = { path = "../synth-synthesis", version = "0.11.35", optional = true }
anyhow.workspace = true
thiserror.workspace = true
16 changes: 8 additions & 8 deletions crates/synth-cli/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -27,18 +27,18 @@ verify = ["synth-verify"]
# Path deps carry `version` so `cargo publish` rewrites them to the
# crates.io coordinate. Bumping the workspace version requires
# updating these in lockstep — see docs/release-process.md.
synth-core = { path = "../synth-core", version = "0.11.34" }
synth-frontend = { path = "../synth-frontend", version = "0.11.34" }
synth-synthesis = { path = "../synth-synthesis", version = "0.11.34" }
synth-backend = { path = "../synth-backend", version = "0.11.34" }
synth-core = { path = "../synth-core", version = "0.11.35" }
synth-frontend = { path = "../synth-frontend", version = "0.11.35" }
synth-synthesis = { path = "../synth-synthesis", version = "0.11.35" }
synth-backend = { path = "../synth-backend", version = "0.11.35" }

# Optional external backends
synth-backend-awsm = { path = "../synth-backend-awsm", version = "0.11.34", optional = true }
synth-backend-wasker = { path = "../synth-backend-wasker", version = "0.11.34", optional = true }
synth-backend-riscv = { path = "../synth-backend-riscv", version = "0.11.34", optional = true }
synth-backend-awsm = { path = "../synth-backend-awsm", version = "0.11.35", optional = true }
synth-backend-wasker = { path = "../synth-backend-wasker", version = "0.11.35", optional = true }
synth-backend-riscv = { path = "../synth-backend-riscv", version = "0.11.35", optional = true }

# Optional verification (requires z3)
synth-verify = { path = "../synth-verify", version = "0.11.34", optional = true, features = ["z3-solver", "arm"] }
synth-verify = { path = "../synth-verify", version = "0.11.35", optional = true, features = ["z3-solver", "arm"] }

# Optional PulseEngine WASM optimizer
# Uncomment when loom crate is available:
Expand Down
2 changes: 1 addition & 1 deletion crates/synth-frontend/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ description = "WASM/WAT parser and module decoder frontend for the Synth compile
# Internal path deps carry an explicit version so `cargo publish`
# can rewrite to the crates.io coordinate. `path` is used for
# in-workspace builds; `version` is what crates.io sees.
synth-core = { path = "../synth-core", version = "0.11.34" }
synth-core = { path = "../synth-core", version = "0.11.35" }

wasmparser.workspace = true
wasm-encoder.workspace = true
Expand Down
2 changes: 1 addition & 1 deletion crates/synth-opt/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ categories.workspace = true
description = "Peephole optimization passes for the Synth compiler"

[dependencies]
synth-cfg = { path = "../synth-cfg", version = "0.11.34" }
synth-cfg = { path = "../synth-cfg", version = "0.11.35" }

[dev-dependencies]
criterion = { version = "0.5", features = ["html_reports"] }
Expand Down
6 changes: 3 additions & 3 deletions crates/synth-synthesis/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@ categories.workspace = true
description = "WASM-to-ARM instruction selection and peephole optimizer"

[dependencies]
synth-core = { path = "../synth-core", version = "0.11.34" }
synth-cfg = { path = "../synth-cfg", version = "0.11.34" }
synth-opt = { path = "../synth-opt", version = "0.11.34" }
synth-core = { path = "../synth-core", version = "0.11.35" }
synth-cfg = { path = "../synth-cfg", version = "0.11.35" }
synth-opt = { path = "../synth-opt", version = "0.11.35" }
serde.workspace = true
anyhow.workspace = true
thiserror.workspace = true
Expand Down
8 changes: 4 additions & 4 deletions crates/synth-verify/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,12 @@ arm = ["synth-synthesis"]

[dependencies]
# Core dependencies (always required)
synth-core = { path = "../synth-core", version = "0.11.34" }
synth-cfg = { path = "../synth-cfg", version = "0.11.34" }
synth-opt = { path = "../synth-opt", version = "0.11.34" }
synth-core = { path = "../synth-core", version = "0.11.35" }
synth-cfg = { path = "../synth-cfg", version = "0.11.35" }
synth-opt = { path = "../synth-opt", version = "0.11.35" }

# ARM synthesis (optional, behind 'arm' feature)
synth-synthesis = { path = "../synth-synthesis", version = "0.11.34", optional = true }
synth-synthesis = { path = "../synth-synthesis", version = "0.11.35", optional = true }

# SMT solver for formal verification
z3 = { version = "0.19", features = ["static-link-z3"], optional = true }
Expand Down
Loading