11213 Commits

Author SHA1 Message Date
Alex Crichton
299131ae2d Gracefully handle ENOTSUP for memfd_create (#6230)
* Gracefully handle ENOTSUP for `memfd_create`

Looks like in #6229 older kernels may not support memfd in which case we
can fall back to manual memory initialization gracefully.

Closes #6229

* Fix tests
2023-04-18 16:50:48 +00:00
T0b1-iOS
387db16d28 Remove unsigned variants of DataValue (#6218)
* remove unsigned variants of DataValue

* make value operation names more in-line with cranelift IR
2023-04-18 14:08:29 +00:00
Trevor Elliott
d4b771e5a3 Allow inline source and the path attribute in the host bindgen! macro (#6226)
* Allow inline source and the `path` attribute in the host bindgen! macro

* Report an error if `world` is passed with `interfaces`
2023-04-17 23:51:52 +00:00
Pat Hickey
9ee613a0b7 wasi-common: deprecate fd_allocate (#6217)
* wasi-common: remove allocate from WasiFile trait, always fail with NOTSUP

This operation from cloudabi is linux-specific, isn't even
supported across all linux filesystems, and has no support on macos
or windows. Rather than ship spotty support, it has been removed
from preview 2, and we are no longer supporting it in preview 1 as
well.

The preview 1 implementation will still check if fd is a file, and has
rights, just to reject those cases with the errors expected.

* wasi-tests: expect fd_allocate to always fail now.

rewrite the file_allocate test to just check for failure.

remove use of fd_allocate from fd_advise test, and remove test
configuration setting used for excluding use of fd_allocate on macos and
windows.
2023-04-17 21:35:28 +00:00
Alex Crichton
7ebff82861 Optimize sign extension via shifts (#6220)
* Optimize sign extension via shifts

This commit adds egraph optimization patterns for left-shifting a value
and then right-shifting it as a form of sign extending its lower bits.
This matches the behavior of the WebAssembly `i32.extend8_s`
instruction, for example. Note that the lowering of that WebAssembly
instruction does not use shifts, but historical versions of LLVM that
didn't support the instruction, or versions with the instruction
disabled, will use shifts instead.

A second rule for reduction-of-extend being the same as the original
value was added to keep an existing shift-related test passing as well.

* Add reference assemblies for new opts
2023-04-17 18:48:08 +00:00
Alex Crichton
9a4bd7c6df x64: Begin to lift SSE 4.1 requirement for SIMD support (#6216)
* x64: Change `use_sse41` to a constructor

This refactors the existing `use_sse41` extractor to instead be a
`constructor` to use with `if-let`.

* x64: Gate the `pblendw` instruction on SSE4.1 being enabled

This specialization of `shuffle` isn't a base case so adding an `if-let`
here should be sufficient for gating this instruction properly on
enabled CPU features.

* x64: Gate `pmuldq` lowerings on SSE 4.1

The specialized rules using these instructions can fall back to the
standard lowerings for non-SSE 4.1 instructions.
2023-04-17 16:09:58 +00:00
kevaundray
85118c8c26 Add clippy suggestions (#6203)
* add clippy suggestions

* revert &/ref change

* Update cranelift/isle/isle/src/parser.rs

Co-authored-by: Jamey Sharp <jamey@minilop.net>

---------

Co-authored-by: Jamey Sharp <jamey@minilop.net>
2023-04-17 15:53:34 +00:00
Alex Crichton
91de5de049 Update wasm-tools crates (#6215)
While bringing in no major updates for Wasmtime I've taken this
opportunity to list myself for `cargo vet` with wildcard audits of this
family of crates. That means I shouldn't need to further add any more
entries in the future for updating these crates and additionally any
other organizations using these audits will automatically be able to
have audits for version that I publish.

While here I also ran `cargo vet prune` which was able to remove a
number of our exemptions.
2023-04-15 00:07:32 +00:00
Saúl Cabrera
9dd0b59c2a winch(x64): Improve ABI support in trampolines (#6204)
This commit improves ABI support in Winch's trampolines mainly by:

* Adding support for the `fastcall` calling convention.
* By storing/restoring callee-saved registers.

One of the explicit goals of this change is to make tests available in the x86_64 target
as a whole and remove the need exclude the windows target.

This commit also introduces a `CallingConvention` enum, to better
reflect the subset of calling conventions that are supported by Winch.
2023-04-14 21:13:23 +00:00
Afonso Bordado
9e1ff9726c egraphs: Add bmask bit pattern optimization rule (#6196)
* egraphs: Add a bmask bit pattern optimization

* egraphs: Add more `ineg` rules

* egraphs: Add sshr rule

* egraphs: Simplify bmask rule

* egraphs: Add comutative version of bmask rule

* egraphs: Add more testcases

* egraphs: Cleanup rule comments

* egraphs: Add more `ineg` optimizations
2023-04-14 18:50:48 +00:00
Alex Crichton
2d25db047f x64: Lower SIMD requirement to SSE4.1 from SSE4.2 (#6206)
Cranelift only has one instruction SIMD which depends on SSE4.2 so this
commit adds a lowering rule for `pcmpgtq` which doesn't use SSE4.2 and
enables lowering the baseline requirement for SIMD support from SSE4.2
to SSE4.1.

The `has_sse42` setting is no longer enabled by default for Cranelift.
Additionally `enable_simd` no longer requires `has_sse42` on x64.
Finally the fuzz-generator for Wasmtime codegen settings now enables
flipping the `has_sse42` setting instead of unconditionally setting it
to `true`.

The specific lowering for `pcmpgtq` is copied from LLVM's lowering of
this instruction.
2023-04-14 17:24:43 +00:00
matt rice
26f9ce02bc For clarity in examples avoid importing/exporting functions of the same name. (#6211) 2023-04-14 15:32:05 +00:00
Pat Hickey
cc1c14ac91 wasmtime component bindgen: when tracing is enabled, emit an event for args & results (#6209)
* wasmtime component bindgen: when tracing is enabled, emit an event for arguments and results

This is consistient with what wiggle does (see
https://github.com/bytecodealliance/wasmtime/blob/main/crates/wiggle/generate/src/funcs.rs#L266), with the exceptions that
1. wiggle has a facility for disabling tracing on a per-function basis,
a requirement which was driven by functions which pass secrets into wasm. this will be added to wasmtime-wit-bindgen at a later date.
2. wiggle doesn't actually emit an event when calling a function which
takes no arguments (see `&& func.params.len() > 0` in predicate), in
this case we emit an event with the body `"call"`, to ensure these calls
are observable.

* review feedback: add call and return messages to events

* consistiency: dont drop `guest` from `wit-bindgen guest export` in span
2023-04-13 22:58:53 +00:00
Trevor Elliott
9425a252bb Rework only_interfaces to the interfaces field (#6210)
* Rework `only_interfaces` to the `interfaces` field

* Fix the docs

* Remove only_interfaces test from the component-macro package
2023-04-13 22:02:56 +00:00
Brendan Burns
7b5819b55a Small follow up fix for http tests. (#6207) 2023-04-13 14:37:49 +00:00
T0b1-iOS
3956a6aa0f remove unsigned_add_overflow_condition (#6199) 2023-04-13 14:30:44 +00:00
Karl Meakin
91e36f3449 Clarify the representation of icmp output (#6202)
* Clarify the representation of `icmp` output

* Reformat

* "ie" => "i.e."

* Update `fcmp` documentation as well
2023-04-12 20:05:44 +00:00
Karl Meakin
42528d82b8 Add multi_lane precondition to bitselect => {u,s}{min,max} rewrite (#6201) 2023-04-12 19:04:30 +00:00
Pat Hickey
d1d381e298 add a wasi-test to show a dir_fd always gets ERRNO_BADF on appropriate fd_ operations (#6197)
* add a wasi-test to show a dir_fd always gets ERRNO_BADF on appropriate fd_ operations.

This is a conformance test for the current behavior of preview 1 in wasi-common. It is debatable whether this is the right errno, I think for most of these ERRNO_ISDIR would be more descriptive, but this is the behavior we have.

* Add comments to all the fd op failures explaining closest linux/posix behavior
2023-04-12 16:57:53 +00:00
T0b1-iOS
f684a5fbee remove iadd_cout and isub_bout (#6198) 2023-04-11 23:39:32 +00:00
Karl Meakin
c0166f78f9 ISLE: simplify select/bitselect when both choices are the same (#6141) 2023-04-11 22:41:19 +00:00
Karl Meakin
b9a58148cf ISLE: split algebraic.isle into several files (#6140)
* ISLE: split algebraic.isle into several files

* delete `algebraic.clif`

* Add `README.md`

* Remove old `algebraic.clif` tests

---------

Co-authored-by: Jamey Sharp <jsharp@fastly.com>
2023-04-11 21:39:18 +00:00
T0b1-iOS
569089e473 Add {u,s}{add,sub,mul}_overflow instructions (#5784)
* add `{u,s}{add,sub,mul}_overflow` with interpreter

* add `{u,s}{add,sub,mul}_overflow` for x64

* add `{u,s}{add,sub,mul}_overflow` for aarch64

* 128bit filetests for `{u,s}{add,sub,mul}_overflow`

* `{u,s}{add,sub,mul}_overflow` emit tests for x64

* `{u,s}{add,sub,mul}_overflow` emit tests for aarch64

* Initial review changes

* add `with_flags_extended` helper

* add `with_flags_chained` helper
2023-04-11 20:16:04 +00:00
Afonso Bordado
4c32dd7786 riscv64: Delete SelectIf instruction (#5888)
* riscv64: Delete `SelectIf` instruction

* riscv64: Fix typo in comment

Co-authored-by: Trevor Elliott <awesomelyawesome@gmail.com>

* riscv64: Improve `bmask` codegen

* riscv64: Use `lower_bmask` in `select_spectre_guard`

* riscv64: Use `lower_bmask` to extend values in `select_spectre_guard`

Co-authored-by: Trevor Elliott <awesomelyawesome@gmail.com>

---------

Co-authored-by: Trevor Elliott <awesomelyawesome@gmail.com>
2023-04-11 17:33:32 +00:00
Afonso Bordado
9acb649f17 cranelift-native: Detect RISC-V extensions using /proc/cpuinfo (#6192)
* cranelift-native: Move riscv to separate module

* cranelift-native: Read /proc/cpuinfo to parse RISC-V extensions

* ci: Add QEMU cpuinfo emulation patch

This patch emulates the /proc/cpuinfo interface for RISC-V. This
allows us to do feature detection for the RISC-V backend.

It has been queued for QEMU 8.1 so we should remove it as soon as
that is available.

* ci: Enable QEMU RISC-V extensions

* cranelift-native: Cleanup ISA string parsing

Co-Authored-By: Jamey Sharp <jsharp@fastly.com>

* cranelift-native: Rework `/proc/cpuinfo` parsing

Co-Authored-By: Jamey Sharp <jsharp@fastly.com>

---------

Co-authored-by: Jamey Sharp <jsharp@fastly.com>
2023-04-11 17:31:42 +00:00
kevaundray
f2393b8f27 Removes debug assertion that was related to issue 796 (#6175)
* fix typo: behaviour -> behavior

* remove debug assertion since 796 has been merged

* Update data_value.rs
2023-04-11 16:52:11 +00:00
bjorn3
0478ead3f8 Handle signature() for more libcalls (#6174)
* Handle signature() for more libcalls

This is necessary to be able to call them in the interpreter. All the
remaining libcalls which signature() doesn't handle are never used in
clif ir. Only in code compiled by a backend.

* Fix libcall declarations in cranelift-frontend

* Add function signatures

* Use correct pointer type instead of I64
2023-04-11 16:50:41 +00:00
bjorn3
52440f0fc8 Remove ImmutableRegisterState and replace {get,set}_value in State with current_frame{,_mut} (#6179)
* Remove ImmutableRegisterState

It was introduced for an SCCP optimization pass, but a simplified
version of this will likely use the egraph infrastructure instead.

* Replace {get,set}_value in State with current_frame{,_mut}

The outer Interpreter needs this anyway and only offering one way to
get locals simplifies things.

* Update comment
2023-04-11 12:15:22 +00:00
bjorn3
96a60aa26b Make cranelift-interpreter non-generic over value (#6178)
* Make cranelift-interpreter non-generic over value

Fixes #5793

* Review suggestion

Co-authored-by: Jamey Sharp <jamey@minilop.net>

* Fix fuzz target

* Update doc comments

---------

Co-authored-by: Jamey Sharp <jamey@minilop.net>
2023-04-11 11:13:29 +00:00
Brendan Burns
3ff6e0fe03 Some improvements to the wasi-http client implementation of write. (#6161)
* Improve write implementation for streams

* Add trailers implementation for responses.

* Improve tests.

* Update tests.
2023-04-11 03:26:19 +00:00
Trevor Elliott
85f0c68008 Add only_interfaces and with to the bindgen! macro. (#6160)
* Add `only_interfaces` and `with` to the `bindgen!` macro.

* Add a version of the empty_error test for `only_interfaces` and `with`

* Review feedback

* Add docs
2023-04-10 23:28:52 +00:00
kevaundray
4053ae9e08 Minir typo/Grammar fixes (#6187)
* fix typo

* add test to check that Option<EntityRef> is twice as large as EntityRef

* grammar

* grammar

* reverse snakecase -- Not sure if folks want this type of change
2023-04-10 19:39:25 +00:00
Alex Crichton
435b6894d7 x64: Clarify and shrink up ModRM/SIB encoding (#6181)
I noticed recently that for the `ImmRegRegShift` addressing mode
Cranelift will unconditionally emit at least a 1-byte immediate for the
offset to be added to the register addition computation, even when the
offset is zero. In this case though the instruction encoding can be
slightly more compact and remove a byte. This commit started off by
applying this optimization, which resulted in the `*.clif` test changes
in this commit.

Further reading this code, however, I personally found it quite hard to
follow what was happening with all the various branches and ModRM/SIB
bits. I reviewed these encodings in the x64 architecture manual and
attempted to improve the logic for encoding here. The new version in
this commit is intended to be functionally equivalent to the prior
version where dropping a zero-offset from the `ImmRegRegShift` variant
is the only change.
2023-04-10 19:37:19 +00:00
Chris Fallin
8f1a7773a3 Revert "ISLE: rewrite loose inequalities to strict inequalities and strict inequalities to equalities (#6130)" (#6193)
This reverts commit 57e42d0c46.

Fixes #6185.
2023-04-10 18:43:15 +00:00
Alex Crichton
dbd000c1ce Change asm to __asm__ in helpers.c (#6188)
This is an attempt to fix #6177 since according to [this reference][1]
some modes of compilation require `__asm__` instead of `asm`.

[1]: https://en.cppreference.com/w/c/language/asm
2023-04-10 17:47:25 +00:00
bjorn3
b9fb31e9a7 Re-export cranelift-control from cranelift-codegen (#6173)
This makes it easier to keep the versions of both in sync and avoids
having to specify another dependency for a single type.
2023-04-10 16:49:43 +00:00
Jamey Sharp
ac2bd1f305 cranelift: Rename a filetest with the wrong extension (#6190)
This test was committed with a `.isle` extension instead of `.clif`, so
it wasn't actually running in the test suite. Fortunately, it still
passes.
2023-04-10 16:27:42 +00:00
Alex Crichton
83a8ca77cd Mirror default-owned change for guests in wit-bindgen (#6189)
This commit is a mirror of bytecodealliance/wit-bindgen#547 into the
`bindgen!` macro for Wasmtime. The new default is to generate only one
Rust type per WIT type input, regardless of if the representation can be
slightly more optimal in niche cases with more borrows. This should make
the macro easier to work with in the limit ideally.

Closes #6124
2023-04-10 16:27:13 +00:00
kevaundray
2d1dbb17af fix doc comment (#6183) 2023-04-10 14:23:49 +00:00
Chris Dickinson
a97e82c6e2 doc: fix StackSlot reference to FunctionBuilder (#6182)
`FunctionBuilder::create_stackslot` was split into `create_sized_stack_slot`
and `create_dynamic_stack_slot`. This updates the doc in the `StackBuilder`
docstring to refer to the new methods.

Fixes #5838.
2023-04-09 21:14:19 +00:00
Alexa VanHattum
71d3b638f3 Clarify instructions.rs documentation for ushr/ashr (narrow values) (#6186) 2023-04-09 20:01:49 +00:00
kevaundray
e3dbad9cc2 add result type assertion (#6184) 2023-04-09 19:55:15 +00:00
Dan Gohman
e84305b445 Add a WASI test for a creating an absolute-path symlink. (#6166)
Wasmtime disallows guests from using `path_symlink` to create
absolute-path symlinks, as they could confuse other code into
accessing resources on the host that the guest otherwise doesn't
have access to.

This patch adds a test for this behavior.
2023-04-08 06:13:50 +00:00
bjorn3
bada17beab Various cranelift interpreter improvements (#6176)
* Remove the validate_address State trait method

It isn't used anywhere

* Expose the inner Function of a Frame

This is necessary to create your own interpreter that reuses most of
cranelift-interpreter. For example to use a different State
implementation.

* Support the symbol_value and tls_value instructions in the interpreter
2023-04-07 15:22:13 +00:00
bjorn3
e1777710b1 Don't override declare_*_in_func in cranelift-jit (#6169)
Instead remove the colocated flag for hotplug mode in define_function.
This prevents issues if declare_*_in_func wasn't used due to eg the
function being from a previously serialized module and now deserialized
into JITModule.
2023-04-06 18:44:12 +00:00
Chris Fallin
230e2135d6 Cranelift: remove non-egraphs optimization pipeline and use_egraphs option. (#6167)
* Cranelift: remove non-egraphs optimization pipeline and `use_egraphs` option.

This PR removes the LICM, GVN, and preopt passes, and associated support
pieces, from `cranelift-codegen`. Not to worry, we still have
optimizations: the egraph framework subsumes all of these, and has been
on by default since #5181.

A few decision points:

- Filetests for the legacy LICM, GVN and simple_preopt were removed too.
  As we built optimizations in the egraph framework we wrote new tests
  for the equivalent functionality, and many of the old tests were
  testing specific behaviors in the old implementations that may not be
  relevant anymore. However if folks prefer I could take a different
  approach here and try to port over all of the tests.

- The corresponding filetest modes (commands) were deleted too. The
  `test alias_analysis` mode remains, but no longer invokes a separate
  GVN first (since there is no separate GVN that will not also do alias
  analysis) so the tests were tweaked slightly to work with that. The
  egrpah testsuite also covers alias analysis.

- The `divconst_magic_numbers` module is removed since it's unused
  without `simple_preopt`, though this is the one remaining optimization
  we still need to build in the egraphs framework, pending #5908. The
  magic numbers will live forever in git history so removing this in the
  meantime is not a major issue IMHO.

- The `use_egraphs` setting itself was removed at both the Cranelift and
  Wasmtime levels. It has been marked deprecated for a few releases now
  (Wasmtime 6.0, 7.0, upcoming 8.0, and corresponding Cranelift
  versions) so I think this is probably OK. As an alternative if anyone
  feels strongly, we could leave the setting and make it a no-op.

* Update test outputs for remaining test differences.
2023-04-06 18:11:03 +00:00
Andrew Brown
465913eb2c ci: use version tag of install-openvino-action (#6168)
In #6089, I accidentally left in a change that pegged the
`install-openvino-action` to a commit instead of the latest released
version. This change uses the latest released version.

(Run all CI actions: prtest:full)
2023-04-06 18:04:59 +00:00
bjorn3
67c85b883e Remove the DataContext wrapper around DataDescription (#6170)
* Remove the DataContext wrapper around DataDescription

It doesn't have much of a purpose while making it harder to for example
rewrite the function and data object declarations within it as is
necessary for deserializing a serialized module.

* Derive Debug for DataDescription
2023-04-06 17:13:55 +00:00
bjorn3
e1812b611b Rename define_function to define_function_with_control_plane (#6165)
And add a define_function convenience function which uses a default
control plane.
2023-04-06 16:14:13 +00:00
Andrew Brown
5ba0d696b7 ci: unpin the wasi-nn tasks from an older Ubuntu (#6089)
* ci: unpin the wasi-nn tasks from an older Ubuntu

Previously, OpenVINO's lack of APT packages for Ubuntu 22.04 (`jammy`)
prevented us from upgrading the GitHub runner to use `ubuntu-latest`. I
updated the `install-openvino-action` to substitute in the `focal`
packages in this case (this is what the OpenVINO team considers the fix)
so this pin should no longer be necessary. Fixes #5408.

(Run all CI actions: prtest:full)

* vet: audit the openvino version bump
2023-04-06 15:44:16 +00:00