Stream: git-wasmtime

Topic: wasmtime / PR #14230 Make `LastStores` a proper lattice


view this post on Zulip Wasmtime GitHub notifications bot (Aug 28 2026 at 22:23):

fitzgen opened PR #14230 from fitzgen:alias-analysis-lattice to bytecodealliance:main:

There were two ways in which alias analysis's LastStores state was not a proper lattice, which made the order we processed the worklist and called LastStores::meet observable:

  1. We didn't have a single, canonical bottom value for the last store to a region. We were taking the first instruction in a block as an identifier for control-flow join points so that we would get different MemoryLocs for different control-flow joins, which is necessary to avoid illegally forwarding a value loaded inside one control-flow join to a load in another, different control-flow join. However, this meant that we effectively had multiple bottom elements, which made the path we descended through the "lattice" observable. The solution here was to create a separate LastStore dataflow value that has a single, canonical bottom element, and a distinct MemoryVersion value that is the same as LastStore but replaces its bottom value with a variant that identifies the associated control-flow join point. We use LastStore in our LastStores lattice, when we need a bottom element, and we use MemoryVersion in our MemoryLoc keys, to distinguish between different regions where we don't know anything about the contents of memory.

  2. We computed the observed-stores set while we computed the fixpoint of the initial LastStores inputs to each block. This was incorrect, however, because a LastStores could transiently contain a LastStore::Inst that disappears in later iterations of the fixpoint, and which instructions do or don't transiently appear in LastStores in that way depends on the order in which we call LastStores::meet. Therefore, observing stores while computing the fixpoint might or might not observe an instruction depending on the worklist processing order. The solution in this case was to only compute the observed-stores set after we've computed the LastStores fixpoint, at which point there are no transient LastStore::Insts anymore.

<!--
Please make sure you include the following information:

Our development process is documented in the Wasmtime book:
https://docs.wasmtime.dev/contributing-development-process.html

Please review the Bytecode Alliance's AI tool usage policy at
https://github.com/bytecodealliance/governance/blob/main/AI_TOOL_POLICY.md

Please ensure all communication follows the code of conduct:
https://github.com/bytecodealliance/wasmtime/blob/main/CODE_OF_CONDUCT.md
-->

view this post on Zulip Wasmtime GitHub notifications bot (Aug 28 2026 at 22:24):

fitzgen requested wasmtime-compiler-reviewers for a review on PR #14230.

view this post on Zulip Wasmtime GitHub notifications bot (Aug 28 2026 at 22:24):

fitzgen requested wasmtime-core-reviewers for a review on PR #14230.

view this post on Zulip Wasmtime GitHub notifications bot (Aug 28 2026 at 22:24):

fitzgen requested cfallin for a review on PR #14230.

view this post on Zulip Wasmtime GitHub notifications bot (Aug 28 2026 at 23:44):

github-actions[bot] added the label cranelift on PR #14230.


Last updated: Aug 30 2026 at 09:07 UTC