-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
PCC: draw the rest of the owl: fully-working PCC on hello-world Wasm …
…on aarch64 (#7281) * PCC: draw the rest of the owl: fully-working PCC on hello-world Wasm on aarch64 This needed a bit more inference / magic than I was hoping for at first, specifically around constants and adds. Some instructions can now generate facts on their output registers, even if not stated. This breaks away from the "breadcrumbs" idea, but seems to be the most practical solution to a general problem that we have mini-lowering steps in various places without careful preservation of PCC facts. Two particular aspects: - Constants: amodes on aarch64 can decompose into new constant-generation instructions, and we need precise ranges on those to properly check them. To avoid making the ISLE rules nightmarish, it's best to reuse the existing semantics definitions of the Add* ALU insts, and add a few rules for MovK/MovZ/MovN. - Adds: similarly, amodes decompose into de-novo add instructions with no facts. To handle this, there's now a notion of "propagating" facts that cause an instruction with a propagating fact on the input to generate a fact on the output. Together, these heuristics mean that we'll eagerly generate a fact for `mem(mt0, 0, 0) + 8 -> mem(mt0, 8, 8)`, but we won't, for example, generate ranges on every single integer operation. With these changes and a few other misc fixes, this PR can now check a nontrivial "hello world" Wasm on aarch64 down to the machine-code level: ``` $ target/release/wasmtime compile -C enable-pcc=y ../wasm-tests/helloworld-rs.wasm ``` * Review feedback.
- Loading branch information
Showing
63 changed files
with
911 additions
and
588 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.