Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PCC: draw the rest of the owl: fully-working PCC on hello-world Wasm on aarch64 #7281

Merged
merged 2 commits into from
Oct 19, 2023

Commits on Oct 19, 2023

  1. 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
    ```
    cfallin committed Oct 19, 2023
    Configuration menu
    Copy the full SHA
    f21afa9 View commit details
    Browse the repository at this point in the history
  2. Review feedback.

    cfallin committed Oct 19, 2023
    Configuration menu
    Copy the full SHA
    9b0d02a View commit details
    Browse the repository at this point in the history