Nick Lewycky
1a7f00f0af
Rewrite Min/Max to handle all cases correctly.
...
Fixes 545 spectest failures.
2019-10-03 18:19:12 -07:00
Patrick Ventuzelo
726269a52c
fix missing info error
2019-09-17 12:05:00 +02:00
Patrick Ventuzelo
4190f01195
remove panic and unimplemented in llvm-backend and runtime-core
2019-09-17 12:03:03 +02:00
Nick Lewycky
59597b9e83
Switch from PIC+Default (small) to Static+Large. Should fix flaky test failures.
2019-09-16 10:49:39 -07:00
Nick Lewycky
8dd82c05e6
Implement atomic load and store instructions with actual atomics in the LLVM backend.
...
Includes a run of `cargo update` to pick up the newer inkwell required.
2019-09-13 12:05:55 -07:00
Syrus
d8471e2b6a
Improved docs with custom logo and favicon
2019-09-03 17:06:31 -07:00
losfair
bdcd73cd63
Unblock signals in LLVM trap handler.
2019-08-22 17:45:52 -07:00
losfair
d7c5bb904e
Only disallow dead code in llvm-backend for non-Windows environments.
2019-08-22 13:32:35 -07:00
losfair
6534c28aed
Allow dead code in llvm-backend.
2019-08-22 13:30:50 -07:00
losfair
e89ab43b98
Fix unused 'stackmaps' and 'module_info' on Windows
2019-08-22 13:25:52 -07:00
losfair
d868445d09
Fix unused import 'vm' on Windows
2019-08-22 13:19:46 -07:00
losfair
eef38429fc
Fix unused imports on Windows.
2019-08-22 13:14:05 -07:00
losfair
c7377a465f
Merge remote-tracking branch 'origin/master' into feature/llvm-osr
2019-08-21 15:49:25 -07:00
losfair
b0beb28ea7
Fix unused import on Windows.
2019-08-21 15:32:20 -07:00
losfair
56e735349d
Format everything
2019-08-21 15:23:56 -07:00
losfair
53ebcc355a
Disable LLVM stackmap on Windows
2019-08-21 15:23:11 -07:00
losfair
08ab8d16e1
Handle SIGILL in LLVM.
2019-08-21 15:05:10 -07:00
Nick Lewycky
e6ec261cd5
Remove commented out code.
2019-08-21 15:01:21 -07:00
losfair
bf9d915635
Fix a few issues from PR comments.
2019-08-21 14:53:33 -07:00
Nick Lewycky
2882c75957
No need to emit any alignment check for byte-aligned accesses.
2019-08-20 11:30:30 -07:00
Nick Lewycky
dcf70167da
Fix i64.atomic.load32_u and all alignment checks.
2019-08-20 11:03:22 -07:00
Nick Lewycky
0ba73ac50c
Correct flipped misalignment test.
2019-08-20 10:39:53 -07:00
losfair
90dcdfec1c
Cargo fmt
2019-08-19 19:17:50 -07:00
losfair
4e6267aa57
Correctly handle more than 5 WASM function parameters when reading state of a LLVM context.
2019-08-19 19:12:33 -07:00
losfair
124ad73e8a
Merge remote-tracking branch 'origin/master' into feature/llvm-osr
2019-08-19 13:06:59 -07:00
Nick Lewycky
c8378329c1
Expound upon Fence's empty implementation being correct.
2019-08-19 10:51:14 -07:00
Nick Lewycky
aecce465c7
Implement atomic.rmw operations including atomic.rmw.cmpxchg.
2019-08-19 10:51:14 -07:00
Nick Lewycky
f2077c204b
Implement fence correctly, atomic load/store as non-atomic.
...
Adds trap for misaligned accesses.
2019-08-19 10:51:14 -07:00
Brandon Fish
bccbbb3d8b
Add deny nonstandard-style and unused-mut lints
2019-08-15 20:18:29 -06:00
losfair
afa0600701
Cargo fmt
2019-08-15 19:13:00 -07:00
losfair
7028df23ef
Allow only integers for LLVM function param/return values.
2019-08-15 19:07:03 -07:00
losfair
0e0573c73c
Merge remote-tracking branch 'origin/master' into feature/llvm-osr
2019-08-14 16:33:26 -07:00
Nick Lewycky
2f3c9c3e2f
Mark memory.size VM intrinsics as not modifying state, and throw.trap/breakpoint as functions which do not return.
2019-08-13 21:50:54 -07:00
Brandon Fish
0bf33662d1
Add missing LLVM imported memory functions
2019-08-13 20:07:55 -06:00
Brandon Fish
137ac206af
Return compile error (llvm) for setting immutable global
2019-08-13 17:59:04 -06:00
losfair
44f71759f6
Use Vec::with_capacity in various places.
2019-08-10 03:23:29 +08:00
losfair
b8c18215aa
Refactor tier switching code
2019-08-10 02:32:14 +08:00
Syrus
d39d4b5f6d
Remove structopt dependency from LLVM
2019-08-08 19:42:41 -07:00
Nick Lewycky
b2c4501357
Add support for backend flags. Backend flags are opaque to src/bin/wasmer.rs.
...
Use them to implement three features in the LLVM backend, getting a valid ELF object file, the post-optimization LLVM IR and the pre-optimization LLVM IR.
Presently they are also global to the backend which is not ideal.
2019-08-08 17:05:31 -07:00
losfair
c1619026d5
Swap code lazily when tiering up from singlepass to LLVM.
...
Does not handle long-running functions, but should work at least.
2019-08-09 04:26:17 +08:00
losfair
0d604b754b
Commented out code for saving semantics of internal values.
2019-08-08 21:54:39 +08:00
Brandon Fish
2f70a199e4
Add deny dead_code lint and fix one error
2019-08-01 20:46:35 -06:00
Nick Lewycky
536f9813dc
Implement InternalEvent::Breakpoint in the llvm backend.
...
Enable now-working metering unit tests when run with the llvm backend.
2019-08-01 12:44:25 -07:00
losfair
9ed5094f86
Resolve semantics for more values.
2019-08-01 23:28:39 +08:00
Syrus
0dfa1f68a8
Formatted code
2019-07-31 23:51:12 -07:00
Syrus
a6461c3b14
Removed explicit hashbrown dependency
2019-07-31 23:18:38 -07:00
Nick Lewycky
931d556de1
Add support for internal fields.
2019-07-31 13:10:51 -07:00
Syrus Akbary
0256a6eb88
Merge branch 'master' into features/llvm-windows
2019-07-30 17:38:36 -07:00
Syrus
97c6956d98
Added llvm in windows support to Changelog
2019-07-30 15:56:25 -07:00
Syrus
89178732cc
Fixed unix errors
2019-07-30 15:23:03 -07:00
Nick Lewycky
bdb1c4c44e
Fix inkwell assertion due to treating vector as float. Fix llvm backend fatal error due to missing support for fminimum/fmaximum.
2019-07-30 14:59:04 -07:00
Syrus Akbary
12f8f3d085
First working version of LLVM in Windows
2019-07-30 14:47:53 -07:00
Nick Lewycky
3e7545a278
Fix the Trunc[SU] operations, makes conversions.wast pass.
2019-07-30 12:42:25 -07:00
losfair
0a7f95ee06
Allow a range of instruction offsets to be used in ip lookup.
2019-07-30 22:25:15 +08:00
Nick Lewycky
11f66d287b
Improve NaN handling by canonicalizing NaNs before most operations.
...
Not handled here is @llvm.minnum and @llvm.maxnum which should be replaced with
@llvm.minimum and @llvm.maximum, but using those currently leads to LLVM backend
fatal errors.
2019-07-28 22:53:48 -07:00
Nick Lewycky
2f021f0e2a
LLVM srem is undefined in cases where i32.rem_s and i64.rem_s are defined.
2019-07-28 22:53:48 -07:00
losfair
efb5277d1d
Stack parsing now works with LLVM.
2019-07-27 02:50:49 +08:00
Marek Vavruša
659f088c4f
llvm-backend: export FunctionCodeGenerator and ModuleCodeGenerator
...
This is in line with the singlepass-backend to be able to use LLVM MCG with
a StreamingCompiler.
2019-07-24 18:46:35 -07:00
losfair
cc4f0e31a6
TwoHalves & trying to get cowsay to compile again
2019-07-25 02:44:28 +08:00
Nick Lewycky
fe2bd6ad6c
Add missing names to LLVM instructions.
2019-07-23 13:19:27 -07:00
Nick Lewycky
18307bb79c
Improve panic/unreachable/unimplemented usage. Refactor a little.
2019-07-22 12:15:56 -07:00
losfair
0133b92bec
Populating LLVM stack maps into MSM/FSM.
2019-07-23 02:55:43 +08:00
Nick Lewycky
cd25356858
Fix shuffle and enable tests. Add support for new load_splat instructions.
...
Updates to wasmparser 0.34.0 and picks up a newer wasmerio/wabt.
2019-07-19 15:19:58 -07:00
Nick Lewycky
3e009c5971
Reformat.
2019-07-18 13:40:24 -07:00
Nick Lewycky
3be6a024aa
Fix bugs in V128 support based on results from testing against simd spec test.
...
These is one test failure remaining with V128 global variables.
* Fix trunc_sat. We need both the largest float that can be converted to an int
and the largest int, they are not the same number.
* Implement calling of functions that take V128 by passing in two i64's.
* Improve support for V128 in spectests. Parse binary modules with the same
features as the outer spectest. Fix compilation error involving Result in
emitted .rs file. Handle V128 in more cases when producing .rs file. Parse
the wast script with SIMD enabled.
* Adjust the WAVM spectest so that it parses with WABT and mostly passes with
wasmer. Wabt is particular about ints not having decimal places and floats
having decimal places. Wasmer does not support mutable globals or shared
memory. Tests of shuffles are disabled. Some assert_invalid tests that wabt
won't even parse are disabled.
2019-07-18 12:52:59 -07:00
losfair
2e030c9c4a
Parsing LLVM stackmaps.
2019-07-19 02:02:15 +08:00
losfair
a14a8e4c50
Emit stack map at critical points.
2019-07-18 02:43:04 +08:00
Nick Lewycky
eeac6d5d2d
Merge branch 'master' of github.com:wasmerio/wasmer into simd
2019-07-16 19:16:45 -07:00
Nick Lewycky
7fb88251d4
Simplify trap_if_not_representable_as_int.
...
Fix typo in function name. Use two fcmp instructions instead of unpacking the bits of the IEEE float and using integer arithmetic to determine details about its value.
2019-07-11 16:46:37 -07:00
Nick Lewycky
7045030532
Try a new list of optimization passes.
...
A few notes:
a) the inliner doesn't help because all the calls are indirect and not even opt -O2 can figure out which functions they're actually calling.
b) aggressive instruction combining is not a super-set of the instruction combiner. Instcombine is made up of a large number (probably 10,000s) of patterns, and some particularly slow ones were taken out and moved to the aggressive instruction combiner. Aggressive instcombine *only* runs that handful of optimizations, which fired zero times on our example wasm files.
c) NewGVN is not ready for production, it has asserts that fire when building sqlite or cowsay. This is why sqlite didn't build with the llvm backend.
d) Scalar-replacement-of-aggregates (sroa) is a strict superset of promote-memory-to-registers (mem2reg), and you probably want sroa because it's usually faster. It also fires 10,000s more times than mem2reg on lua.wasm.
e) Aggressive-dead-code-elimination was only deleting as much regular dead-code-elimination, but is slower because it depends on a postdominator tree (PDT) analysis that. Other passes don't need PDT so we'll have to build it for just this one pass (as opposed to regular dominator-tree which is reused by many passes). I've replaced this with bit-tracking dead-code-elimination which deletes more code than dce/adce.
2019-07-11 14:48:07 -07:00
Nick Lewycky
7f00dc3cdb
Reformat.
2019-07-10 15:33:32 -07:00
Nick Lewycky
8faff26c31
Give float_bits bitcast instruction a name.
2019-07-10 15:31:18 -07:00
Nick Lewycky
e4123433a1
Reformat.
2019-07-10 14:28:07 -07:00
Nick Lewycky
bb30434392
This .into_iter() call is equivalent to .iter() and will not move the array.
2019-07-10 13:54:36 -07:00
Nick Lewycky
fdc13563b8
Initial implementation of SIMD in the LLVM backend.
2019-07-10 13:54:32 -07:00
Nick Lewycky
77afcea9dc
Add V128 stubs to allow LLVM backend to build again.
2019-07-10 13:48:12 -07:00
Nick Lewycky
0a1bdd449e
Update to @llvm.minimum/@llvm.maximum which requires LLVM 8.
...
The @llvm.minnum/@llvm.maxnum intrinsics don't produce correct (for wasm) outputs in all cases.
2019-07-10 13:48:12 -07:00
Nick Lewycky
ea83924547
Update to LLVM 8.0.
2019-07-10 13:48:12 -07:00
Nick Lewycky
1e86e32d40
Use bitcast instead of alloca+load+ptrcast+store sequence.
2019-07-10 10:24:14 -07:00
losfair
a3dcc0e240
Merge remote-tracking branch 'origin/master' into feature/osr
2019-07-04 23:56:45 +08:00
Nick Lewycky
adb257a40f
Reformat.
2019-07-01 16:15:13 -07:00
Nick Lewycky
9fc713f9b1
Update for new wasmparser.rs version.
2019-07-01 16:11:38 -07:00
losfair
650f67a339
Merge remote-tracking branch 'origin/master' into feature/osr
2019-07-01 21:15:35 +08:00
losfair
967027003d
Full preemptive snapshot/resume.
2019-06-27 15:49:43 +08:00
Nick Lewycky
70247a0c6e
Simplify construction of floating point constants.
2019-06-25 16:05:22 -07:00
Nick Lewycky
55394b4f06
Void type in llvm may only be used as a function return type. You may not form a pointer to void or use it as a structure member.
...
Fixes assertion failure initializing llvm backend.
2019-06-25 16:05:22 -07:00
losfair
69944c1dc2
Fix ctx layout in LLVM.
2019-06-05 02:13:10 +08:00
Brandon Fish
66f9049a06
Reset LLVM related code to master
2019-06-02 19:36:26 -05:00
Brandon Fish
995ecefa92
Cargo fmt
2019-06-02 09:49:21 -05:00
losfair
8019505e65
Merge remote-tracking branch 'origin/feature/clif-cgapi' into feature/metering
2019-05-31 15:40:05 +08:00
losfair
b834b4ff36
Metering for LLVM.
2019-05-31 15:36:08 +08:00
Brandon Fish
8069cdac16
Merge branch 'master' into feature/clif-cgapi
2019-05-26 12:04:45 -05:00
Brandon Fish
6ca311f92d
Fix compilation errors and warnings
2019-05-26 11:13:37 -05:00
Brandon Fish
04d6ccc95c
Pass module info to FCG as Arc
2019-05-21 23:44:31 -05:00
Brandon Fish
e34e625009
Implement MCG.next_function in other backends
2019-05-19 11:45:16 -05:00
losfair
6aa87a0bbf
Add the internals
field and necessary structures for metering.
2019-05-17 01:10:21 +08:00
losfair
fac4c452c6
Fix LLVM backend.
2019-05-14 18:49:02 +08:00
Brandon Fish
2aefa731a6
Add deny for unreachable patterns and unused unsafe
2019-05-12 00:33:02 -05:00
Brandon Fish
85158ac22a
Add some initial deny for unused_imports and unused_variables
...
Additional unused variable fix on unix
Remove unused import on unix
Remove unused windows import
2019-05-11 09:23:25 -05:00
Brandon Fish
54095fcd67
Clean up commented out code in LLVM codegen
2019-05-07 22:53:48 -05:00