Revision (<<< Hide revision tags) (Show revision tags >>>) Date Author Comments
Revision tags: dev, v36.0.9, v44.0.1, v43.0.2, v36.0.8, v24.0.8, v44.0.0, v43.0.1, v42.0.2, v36.0.7, v24.0.7, v43.0.0, v42.0.1, v41.0.4, v42.0.0, v40.0.4, v36.0.6, v24.0.6, v41.0.3, v41.0.2, v41.0.1, v36.0.5, v40.0.3, v41.0.0, v36.0.4, v39.0.2, v40.0.2, v40.0.1, v40.0.0, v39.0.1, v39.0.0, v38.0.4, v37.0.3, v36.0.3, v24.0.5, v38.0.3, v38.0.2, v38.0.1, v37.0.2, v37.0.1, v37.0.0, v36.0.2, v36.0.1, v36.0.0, v35.0.0, v24.0.4, v33.0.2, v34.0.2, v34.0.1, v33.0.1, v24.0.3, v32.0.1, v34.0.0, v33.0.0, v32.0.0, v31.0.0, v30.0.2, v30.0.1, v30.0.0, v29.0.1, v29.0.0, v28.0.1, v28.0.0, v27.0.0
# 60fc557c 05-Nov-2024 Alex Crichton <[email protected]>

Refactor how wasm features are calculated for `*.wast` tests (#9560)

* Refactor how wasm features are calculated for `*.wast` tests

This commit refactors the `tests/wast.rs` test suite which runs a

Refactor how wasm features are calculated for `*.wast` tests (#9560)

* Refactor how wasm features are calculated for `*.wast` tests

This commit refactors the `tests/wast.rs` test suite which runs all of
the upstream spec tests as `*.wast` files as well as our own
`misc_testsuite` which has its own suite of `*.wast` files. Previously
the set of wasm features active for each test was a sort of random
mishmash and convoluted set of conditionals which was updated and edited
over time as upstream proposal test suites evolved. This was then
mirrored into our own conventions for `misc_testsuite` as well. Overall
though this has a number of downsides I'm trying to fix here:

* The calculation of what features are enabled is quite complicated and
effectively a random mishmash of `||` conditionals with hierarchies
that don't make any sense beyond "this is just required to get things
to pass".

* There is no means of per-test configuration. For example
`canonicalize-nans.wast` had hardcoded logic in `tests/wast.rs` that
it needed a different setting turned on in `Config`.

* There was no easy means to write tests for Wasmtime which take a union
of a number of proposals together without having lots of sub-folders
that may not make sense.

* Tests that require a particular proposal had to have duplicate logic
for Winch as it doesn't support the full suite of features of all
proposals that Cranelift does.

The new system implemented in this commit takes a leaf out of the
`disas` tests. There is a new `TestConfig` structure in the
`tests/wast.rs` harness which is decoded from each test (leading `;;!`
comments) which enables specifying, in each test, what's required. This
encompasses many wasm proposals but additionally captures other behavior
like nan-canonicalization. This means that all test files in
`misc_testsuite/**/*.wast` are now manually annotated with what wasm
features they require and what's needed to run. This makes per-test
configuration much easier, per-config-setting much easier, and blanket
ignore-by-proposal for Winch much easier as well.

For spec tests we can't modify the contents of the upstream `*.wast`
files. To handle this they're handled specially where `TestConfig` is
manually created and manipulated for each spec proposal and the main
test suite itself. This enables per-proposal configuration that doesn't
leak into any others and makes it more obvious what proposals are doing
what.

* Hack around Winch support for aarch64

show more ...


Revision tags: v26.0.1, v25.0.3, v24.0.2, v26.0.0, v21.0.2, v22.0.1, v23.0.3, v25.0.2, v24.0.1, v25.0.1, v25.0.0, v24.0.0, v23.0.2, v23.0.1, v23.0.0, v22.0.0, v21.0.1, v21.0.0, v20.0.2, v20.0.1, v20.0.0, v17.0.3, v19.0.2, v18.0.4, v19.0.1, v19.0.0
# 0dee5a7f 18-Mar-2024 Alex Crichton <[email protected]>

Skip type checks on tables that don't need it (#8172)

* Enhance `typed-funcrefs.wast` test with more cases

Have the same function with slightly different variations to compare
codegen between the

Skip type checks on tables that don't need it (#8172)

* Enhance `typed-funcrefs.wast` test with more cases

Have the same function with slightly different variations to compare
codegen between the possible strategies.

* Skip type checks on tables that don't need it

This commit implements an optimization to skip type checks in
`call_indirect` for tables that don't require it. With the
function-references proposal it's possible to have tables of a single
type of function as opposed to today's default `funcref` which is a
heterogenous set of functions. In this situation it's possible that a
`call_indirect`'s type tag matches the type tag of a
`table`-of-typed-`funcref`-values, meaning that it's impossible for the
type check to fail.

The type check of a function pointer in `call_indirect` is refactored
here to take the table's type into account. Various things are shuffled
around to ensure that the right traps still show up in the right places
but the important part is that, when possible, the type check is omitted
entirely.

* Update crates/cranelift/src/func_environ.rs

Co-authored-by: Jamey Sharp <[email protected]>

---------

Co-authored-by: Jamey Sharp <[email protected]>

show more ...