Commit Graph

4198 Commits

Author SHA1 Message Date
Nick Lewycky
d1ce8ee20d Give that panic! a message. Also, make it an unreachable!. 2019-11-26 12:20:44 -08:00
Nick Lewycky
fa576093c2 Fix ExtraInfo on F32Add and similar.
We want to ignore the incoming pending NaN state (since the pending will propagate to the output if there was one on the input), and we want to add a new pending NaN state if we can (that is to say, if it isn't cancelled out by both inputs having arithmetic state). Do this by discarding the pending states on the inputs, intersecting them (to keep only the arithmetic state), then union in a pending nan state (which might do nothing, if it's arithmetic).

If the above sounds confusing, keep in mind that when a value is arithmetic, the act of performing the "NaN canonicalization" is a no-op. Thus, being arithmetic cancels out pending NaN states.
2019-11-26 12:20:44 -08:00
Nick Lewycky
a06c858087 Make ExtraInfo bitand check for pending validity.
Unfortunately, this is quite buggy. For something as simple as F32Sub, to combine two ExtraInfos, we want to add a new pending_f32_nan(), unless both of the inputs are arithmetic_f32(). In this commit, we incorrectly calculate that we don't need a pending_f32_nan if either one of the inputs was arithmetic_f32().
2019-11-26 12:20:43 -08:00
Nick Lewycky
284948b6d4 Refactor so as to convert ExtraInfo when potentially canonicalizing.
It seemed like a good idea at the time, but in practice we discard the extra info all or almost all of the time.

This also introduces a new bug. In an operation like multiply, it's valid to multiply two values, one with a pending NaN and one without. As written, in the SIMD case (because of the two kinds of pending in play), we assert.
2019-11-26 12:20:43 -08:00
Nick Lewycky
26c8fd52c8 Initial implementation of "known to be arithmetic NaN / not NaN". 2019-11-26 12:20:43 -08:00
Nick Lewycky
fafc7ad38c Add "known to not contain non-arithmetic NaNs" to ExtraInfo in LLVM backend.
Not wired up yet.
2019-11-26 12:20:43 -08:00
bors[bot]
7715be9ccb
Merge #1017
1017: Add a 'clear' method to map. r=nlewycky a=nlewycky

# Description
Motivated by work on the `nlewycky/inkwell-lifetimes` branch. No callers yet on master, but we use it on the branch and I'd like to merge in pieces.


Co-authored-by: Nick Lewycky <nick@wasmer.io>
2019-11-25 22:54:12 +00:00
Nick Lewycky
4e2440daec Add a 'clear' method to map. 2019-11-25 14:53:25 -08:00
Syrus Akbary
95ccd99809
Added ARM reference 2019-11-25 11:25:05 -08:00
bors[bot]
a69c029c21
Merge #1016
1016: [fix 962] Activate pre_validation when llvm backend selected r=nlewycky a=pventuzelo

# Description

After analysis of issue https://github.com/wasmerio/wasmer/issues/962 by me and @nlewycky, it seems to be better to validate the wasm module before calling the llvm compiler.

This change will imply potential overhead in term of execution speed using llvm backend.

I will also suggest to set pre_validation to true for Singlepass by default:
5c1c786e35/lib/runtime-core/src/codegen.rs (L263-L269)

Additional improvement proposal for wasmer API & cli command options:
* add an API `compile_without_validation`.
* add a flag option in wasmer binary to deactivate `pre_validation` for all backend.

# Review

- [x] Add a short description of the the change to the CHANGELOG.md file


Co-authored-by: Patrick Ventuzelo <ventuzelo.patrick@gmail.com>
2019-11-25 18:38:52 +00:00
Patrick Ventuzelo
7ca0430a40 activate pre_validation when llvm backend selected 2019-11-25 13:17:07 +01:00
bors[bot]
5c1c786e35
Merge #1002
1002: Update the LLVM pass list. r=nlewycky a=nlewycky

# Description
Adds optimizations of loops, and inlinling and some simple interprocedural optimization.

Measured on the libsodium benchmarks, the new pass pipeline is a 2.35% geomean improvement. No major performance regressions known.

Co-authored-by: Nick Lewycky <nick@wasmer.io>
2019-11-23 05:11:44 +00:00
Syrus
9c0b6a01b2 Fixed Azure pipelines releases 2019-11-22 18:59:54 -08:00
bors[bot]
2f394c9f30
Merge #1009
1009: Fix LLVM crash on `return` with a float on the stack and a crash with gas metering. r=nlewycky a=nlewycky

# Description
This PR fixes some matters of testing. The return+float bug is caught by the LLVM verifier, which was accidentally unconditionally disabled even when running "make test check". Add a new cargo feature named "test" which is enabled by all the test crates. When the "test" feature is passed to the llvm-backend, run the LLVM verifier.

Add a new crate `llvm-backend-test` which has one test so far, to ensure that this bug with the return+float does not crash LLVM. Include this new crate in runs of `make llvm`.

Fix LLVM crash on `return` when there is a float with pending NaN canonicalization on the stack.

Now that we run the verifier in testing, we discover another bug where `internal_field()` incorrectly labels a GEP with a TBAA label instead of the intended load. Fix this by labeling the correct instruction. No new test is introduced since this is already caught with `make bench-llvm`.

# Review

- [ ] Add a short description of the the change to the CHANGELOG.md file


Co-authored-by: Nick Lewycky <nick@wasmer.io>
2019-11-23 02:18:07 +00:00
Nick Lewycky
91671d5347 Add changelog entry. 2019-11-22 17:16:54 -08:00
Nick Lewycky
3ef9f769df Fix TBAA crash with LLVM + the gas middleware. 2019-11-22 17:03:31 -08:00
Nick Lewycky
681219b06c Fix bug in LLVM lowering of 'return' when the stack has a float on it. 2019-11-22 17:03:31 -08:00
Nick Lewycky
85666fc522 Add new llvm-backend-test crate. 2019-11-22 17:03:23 -08:00
Nick Lewycky
2433d365af Add new test feature, enabled in test crates.
When test feature is enabled, turn on LLVM verifier. This was previously never enabled.
2019-11-22 16:51:44 -08:00
Syrus
8f50dab0f2 Trying to improve release process 2019-11-22 12:23:23 -08:00
Syrus Akbary
2fdf39f7fe
Merge pull request #1008 from wasmerio/release-0.11.0
Prepare for 0.11.0 release
2019-11-22 11:23:47 -08:00
Mark McCaskey
bb1e7a8d78 Prepare for 0.11.0 release 2019-11-22 11:18:06 -08:00
bors[bot]
bcd7bb4918
Merge #713
713: Add AArch64 support for singlepass. r=syrusakbary a=losfair

This PR includes:

- Support for AArch64 (ARM64) in Singlepass backend. Implemented with a combination of x86_64 instruction translation and native code generation.
- State tracing and backtraces on AArch64/Singlepass. (Tiering is not implemented for this pair because there's no other backend supporting AArch64 yet)
- Debugging tools: `BlockTrace` middleware, and support for reading states of previous WebAssembly stack frames from middlewares.

Co-authored-by: losfair <zhy20000919@hotmail.com>
2019-11-22 18:24:57 +00:00
Syrus
183dd328d6 Make travis work only on test branches 2019-11-22 09:55:31 -08:00
Syrus
a691d3454c Skip serializing on singlepass 2019-11-22 09:49:17 -08:00
losfair
80fb5b4da8 Merge remote-tracking branch 'origin/feature/singlepass-aarch64' into feature/singlepass-aarch64 2019-11-22 23:39:07 +08:00
losfair
21e676667e Try pinning Rust version for arm64 build. 2019-11-22 23:37:06 +08:00
Nick Lewycky
9fe5e261ea Update the LLVM pass list.
Adds optimizations of loops, and inlinling and some simple interprocedural optimization.
2019-11-21 22:41:23 -08:00
Syrus
0834ccf661 Merge branch 'master' into feature/singlepass-aarch64
# Conflicts:
#	Makefile
2019-11-21 20:10:09 -08:00
bors[bot]
7bb570a7f9
Merge #997
997: Compiler tests r=MarkMcCaskey a=syrusakbary

# Description
This PR simplifies the testing part, making `wasmer_runtime_core` the one responsible for picking the default backend.

This makes tests much simpler, and reliable when trying to run in different backends (this PR solves an issue when trying to run wasitests on ARM machines).

<!-- 
Provide details regarding the change including motivation,
links to related issues, and the context of the PR.
-->

# Review

- [x] Add a short description of the the change to the CHANGELOG.md file


Co-authored-by: Syrus <me@syrusakbary.com>
Co-authored-by: Mark McCaskey <mark@wasmer.io>
Co-authored-by: Mark McCaskey <5770194+markmccaskey@users.noreply.github.com>
2019-11-22 03:32:27 +00:00
Mark McCaskey
180528241d Fix merge issue in wasi tests 2019-11-21 19:31:17 -08:00
Syrus
499d42a759 Fixed tests 2019-11-21 19:08:48 -08:00
Syrus
27b6acdb16 Fixed typo 2019-11-21 18:55:38 -08:00
Syrus
9a146c57fc Make docs compilation happy 2019-11-21 18:35:19 -08:00
Syrus
7b9485320d Revert "Autodetect default backend, add features for architecture type"
This reverts commit 31437a1e74.
2019-11-21 18:26:31 -08:00
Syrus
bcdbdf4c23 Updated Changelog 2019-11-21 18:24:16 -08:00
Syrus Akbary
9fcfbb778a
Merge pull request #1001 from d0iasm/readme-fix-make
Fix no rule to make target 'wasi'
2019-11-21 18:19:29 -08:00
Asami Doi
2154ba2ce7 Fix no rule to make target 'wasi' 2019-11-22 11:15:26 +09:00
Mark McCaskey
44f2e926ac
Merge branch 'master' into compiler-tests 2019-11-21 17:24:08 -08:00
Mark McCaskey
31437a1e74 Autodetect default backend, add features for architecture type 2019-11-21 17:22:21 -08:00
losfair
87f4183440 Merge remote-tracking branch 'origin/master' into feature/singlepass-aarch64 2019-11-22 09:09:01 +08:00
Syrus Akbary
b9138aaddd
Merge pull request #957 from wasmerio/feature/add-support-for-new-wasi
Add support for new WASI snapshot, backwards compat too
2019-11-21 16:17:30 -08:00
losfair
ee7b0d625a Skip push/pop code version on Windows. 2019-11-22 08:07:24 +08:00
losfair
5da44c3bf8 Add 'fault' placeholder for Windows. 2019-11-22 07:26:35 +08:00
Mark McCaskey
bdeec52152 Fix imports in test; copy manual implementations of Debug for wasi 2019-11-21 14:00:46 -08:00
Syrus
c3f93f1275 Fixed formatting 2019-11-21 13:38:22 -08:00
Syrus
aeb66ee48e Simplify compiler test options 2019-11-21 13:36:44 -08:00
Mark McCaskey
68fa9e2639 Merge branch 'feature/add-support-for-new-wasi' of github.com:wasmerio/wasmer into feature/add-support-for-new-wasi 2019-11-21 11:31:00 -08:00
Mark McCaskey
ddccdb92b8 More fixes for CI 2019-11-21 11:30:44 -08:00
losfair
daee31f885 Add changelog entry. 2019-11-22 03:30:05 +08:00