Commit Graph

212 Commits

Author SHA1 Message Date
Syrus Akbary
1a91f0e9ca
Merge branch 'master' into feature/llvm-nan-but-fast 2019-10-25 12:52:47 -07:00
bors[bot]
03a5b1fbf4
Merge #901
901: Set target triple and datalayout when creating the LLVM module. r=nlewycky a=nlewycky

We were giving LLVM a triple and datalayout only when producing native code from the LLVM IR. With this change, we tell LLVM as early as possible so that the entire optimization stack knows that it's safe to use target-specific constructs (including target intrinsics `@llvm.x86.sse2.ucomieq.sd`) as well as cost models (for autovectorization) and knowing the bitwidth of the registers so that we can know it's profitable to eliminate redundant extend/truncate casts.

Co-authored-by: Nick Lewycky <nick@wasmer.io>
2019-10-25 17:57:11 +00:00
bors[bot]
83c63d0b27
Merge #904
904: Use getelementptr instruction instead of int_to_ptr and ptr_to_int. r=nlewycky a=nlewycky

The main part of this change is that we no longer turn pointers into integers to do arithmetic on them, then turn them back into pointers. Doing so is a signal to LLVM that it should not attempt to analyze the provenance of the pointers, disabling some optimizations. Using getelementptr allows us to perform arithmetic on pointers while keeping them in pointer types, which LLVM can then analyze.

Most of the textual change is a refactoring to reorder the operations. Previously the bounds checking and determining of the base and bounds were combined because you could put both into the same match, since both actions are performed differently depending on whether the memory is static or dynamic. In this case, we simply check the type twice and do two different things, with comments labelling the steps.

Co-authored-by: Nick Lewycky <nick@wasmer.io>
2019-10-25 17:22:25 +00:00
Nick Lewycky
9c71561927 Rewrite resolve_memory_ptr to use GEPs as much as possible.
ptr_to_int and int_to_ptr are not treated the same as type-safe pointer operations. LLVM intentionally performs fewer optimizations to code using the former as compared with the latter. We don't need that in our code, standard pointer optimizations are safe for us.
2019-10-24 18:15:32 -07:00
Nick Lewycky
894c5084f3 Insert allocas as a contiguous block at the top of the entry block.
This minimizes the chance we accidentally get categorized as having a dynamic alloca.
2019-10-23 19:21:12 -07:00
Nick Lewycky
bc64b4ce6c Set target triple and datalayout when creating the LLVM module. 2019-10-23 16:04:29 -07:00
bors[bot]
d2f9047952
Merge #899
899: Remove dead intrinsics. r=Hywan a=nlewycky



Co-authored-by: Nick Lewycky <nick@wasmer.io>
2019-10-23 12:32:09 +00:00
Nick Lewycky
6410da9c24 Remove dead intrinsics. 2019-10-22 23:36:18 -07:00
Nick Lewycky
92f0b1b2e3 Thread whether state tracking is enabled into the LLVM backend. 2019-10-22 23:15:05 -07:00
bors[bot]
cf1f4c781e
Merge #887
887: Get aggressive about running cargo check over all packages with all features. r=nlewycky a=nlewycky

Fixes the one issue uncovered. The capstone disassembling support in the LLVM backend was broken. Fixed by removing it. Instead, use the `--llvm-object-file` flag to get a finished object file to disassemble with any disassembler.


Co-authored-by: Nick Lewycky <nick@wasmer.io>
Co-authored-by: Mark McCaskey <mark@wasmer.io>
2019-10-21 22:43:09 +00:00
Nick Lewycky
3d3aef6df3 Merge branch 'master' of github.com:wasmerio/wasmer into feature/llvm-nan-but-fast 2019-10-21 12:33:35 -07:00
Nick Lewycky
813f6414e0 Remove dead functions, don't leave them commented out. 2019-10-21 11:16:51 -07:00
Nick Lewycky
10dddf9904 Fix repeated typo in comment. 2019-10-18 16:34:45 -07:00
Nick Lewycky
b180a2e14c Get aggressive about running cargo check over all packages with all features.
Fixes the one issue uncovered. The capstone disassembling support in the LLVM backend was broken. Fixed by removing it. Instead, use the `--llvm-object-file` flag to get a finished object file to disassemble with any disassembler.
2019-10-17 15:37:35 -07:00
Nick Lewycky
2c5c1b1c2c For floating point operations, allow inputs to be arbitrary, including SNaNs.
Instead of ensuring outputs are arithmetic NaNs on every function, we tag them as pending such a check, so that a sequence of computation can have a single canonicalization step at the end.

There's an extra wriggle for SIMD. The Wasm type system only indicates them as V128, so it's possible that we might do computations as F32x4Add, I8x16Add, F64x2Add in a row with no other computations in between. Thus, most SIMD functions apply pending canonicalizations to their inputs, even integer SIMD operations.
2019-10-17 11:55:01 -07:00
bors[bot]
2695093a03
Merge #863
863: Rewrite Min/Max to handle all cases correctly. Fixes 545 spectest failures. r=nlewycky a=nlewycky

# Description
The llvm backend was not quite following the Wasm spec for {F32,F64,F32x4xF64x2}{Min,Max}. We used the `@llvm.minnum` and `@llvm.maxnum` intrinsics which don't handle the corner cases the same. When we tried to use `@llvm.minimum` and `@llvm.maximum` which do, we get an internal error from the x86 backend. I was hoping that crash would go away with the upgrade to LLVM 9, but it does not.

Reimplement these operations using plain LLVM instructions.

# Review

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


Co-authored-by: Nick Lewycky <nick@wasmer.io>
2019-10-09 22:24:07 +00:00
bors[bot]
88f126a00b
Merge #870
870: Fix unused value warning due to inkwell API change. NFC. r=nlewycky a=nlewycky

# Description
Fix unused value warning due to inkwell API change. No functionality change.

Co-authored-by: Nick Lewycky <nick@wasmer.io>
2019-10-08 23:56:10 +00:00
Nick Lewycky
c61cbf6c0b Add a comment. 2019-10-08 11:25:10 -07:00
Nick Lewycky
afddbb2b2a Remove unused value warning due to inkwell API change. NFC. 2019-10-07 17:16:52 -07:00
Nick Lewycky
9cdfb48d0c The i1 argument is actually named "is_zero_undef" which we want to be false.
Fixes the test failures that showed up on mac.
2019-10-07 17:11:59 -07:00
Nick Lewycky
749691ca2a Add a comment explaining why we don't use the intrinsics for these. 2019-10-04 11:50:11 -07:00
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