Commit Graph

234 Commits

Author SHA1 Message Date
b00f899913 Update to Cranelift 0.65, wasmparser 0.57 2020-06-15 18:00:48 -07:00
1bbaafb819 Middleware for LLVM. 2020-06-16 00:56:43 +08:00
af46df5e4c Merge remote-tracking branch 'origin/master' into middleware 2020-06-13 00:55:47 +08:00
dc5c6dd10a Always put allocas at the beginning of the entry block.
Fixes a bug where we allocated stck space for struct return in every call of a function in a loop.
2020-06-08 22:01:22 -07:00
5ec1addae1 Use middleware reader 2020-06-08 13:30:38 -07:00
ce543fd4ed NFC. Don't re-lookup frame. It can't have changed, simply reorder operations. 2020-06-06 21:02:10 -07:00
b2c0ef4f95 NFC. Use const_zero() method or free function instead of const_int(0) and const_float(0.0). 2020-06-06 21:02:10 -07:00
fcbffb0b3e cargo fmt 2020-06-02 17:15:57 -07:00
153a32a9cd Factor this complex iterator into its own variable. 2020-06-02 17:15:31 -07:00
75b1f4c725 Call blocktype_params_results once to get params and results.
Co-authored-by: Syrus Akbary <me@syrusakbary.com>
2020-06-02 17:15:22 -07:00
1990e83ca9 Add two new functions to abi.rs, is_sret and pack_values_for_register_return.
Pull the implementations out of wasm.rs and code.rs respectively, and simplify them.
2020-06-02 16:50:46 -07:00
870f241fb7 cargo clippy 2020-06-02 15:46:18 -07:00
a03a5e1775 Also make type_to_llvm_ptr return a CompileError instead of using unimplemented!. 2020-06-02 15:46:18 -07:00
7bdd387474 Use blocktype_params_results in lieu of blocktype_to_types.
Remove read_info.rs entirely.

Add `to_compile_error` that converts a WasmResult into a Result<_, CompileError>, use it with `wptype_to_type`. This is a candidate for being moved into shared code.

Many functions had to change to deal with propagating CompileError.
2020-06-02 15:46:16 -07:00
04f2db1b82 Export wptype_to_type from wasmer_compiler.
Also fix up its error message when it fails.

Use it in compiler-llvm and remove one of compiler-llvm's copies of this function.
2020-06-02 15:45:31 -07:00
fa3242ce11 Fix bug updating phi nodes when branching up. 2020-06-02 15:44:39 -07:00
c3d26ef639 Reset the value stack correctly when entering the 'else' side of an if-else. 2020-06-02 15:44:39 -07:00
46159ee2a6 Fix value stack after return instruction in multi-value function. 2020-06-02 15:44:39 -07:00
95c55ab40d NFC. Pull this mapping into two mappings, I think it's nicer. 2020-06-02 15:44:39 -07:00
f39a38779b Update function prologue, epilogue and CFG instructions.
The function prologue now skips the sret argument if there is one.

The function epilogue packs values before return.

Br/BrIf/BrTable/Block/Loop/If/Else/End are updated to support multiple values.
As part of this, `read_info::blocktype_to_type` is removed. `blocktype_to_types` and `blocktype_to_param_types` take its place.

CtxType::func is updated to cache and return attributes. The allows the caller to place 'sret' on the call site, even though it's present on the FunctionValue. This helps some utility functions that check the callsite for presence of sret.
2020-06-02 15:44:39 -07:00
83195a1498 Use abi::func_type_to_llvm when producing an LLVM function type from wasm types.
This renames `func_sig_to_llvm` to `func_type_to_llvm` and deletes the old version in intrinsics::. The new version returns a list of attributes along with the type. Update callers to set these attributes on the function or call site.
2020-06-02 15:44:39 -07:00
e5ea5789ea Use args_to_call and rets_from_call in both calls and indirect calls. 2020-06-02 15:44:39 -07:00
2812a3330f Use abi::args_to_call in indirect calls too. 2020-06-02 15:44:39 -07:00
f762690dfb Use abi::args_to_call when placing a direct call. 2020-06-02 15:44:39 -07:00
6e98f39568 Remove commented-out debugging cruft.
This was made obsolete by PR #79.
2020-06-02 11:03:36 -07:00
903c1b23be Update lib/compiler-llvm/src/translator/code.rs
Co-authored-by: nlewycky <nick@wasmer.io>
2020-06-01 14:12:44 -07:00
2a9ce436f9 Added LLVM callbacks 2020-06-01 13:54:26 -07:00
d597a97aa1 Annotate atomicrmw and cmpxchg with volatile if needed. 2020-05-28 14:04:19 -07:00
fd64edf4c8 Return a FunctionCache instead of its members. 2020-05-27 16:28:00 -07:00
fce259befa Cache lookup of memory_grow and memory_size functions. 2020-05-27 14:55:46 -07:00
74355b0b03 NFC. Move looking up a function in the same wasm module to CtxType.
This is a straight refactor, this doesn't add caching yet.
2020-05-27 14:55:46 -07:00
9eba8f798f Implement all TODOs for TBAA labels. 2020-05-27 12:18:02 -07:00
a46a249b0c Merge pull request #60 from wasmerio/llvm-dupe-type-code
Code cleanup. Remove reimplementation of type_to_llvm_ptr, use the one in intrinsics instead.
2020-05-26 15:49:00 -07:00
b035ebada2 Code cleanup. Remove reimplementation of type_to_llvm_ptr, use the one in intrinsics instead. 2020-05-26 15:22:24 -07:00
bd8ffd6a17 Remove dead argument from CtxType::memory. 2020-05-26 14:59:59 -07:00
7a1ac7b843 Don't mark loads and stores volatile when they're bounds checked at runtime. 2020-05-26 14:57:11 -07:00
3d654d2c25 Add function that marks loads/store volatile. Static/dynamic condition is TODO.
Now that we apply three annotations to every user memory access, factor it out into a new function to apply them.

We do this for the load and stores, but not yet the atomicrmw's.
2020-05-26 14:57:11 -07:00
2089c0a163 Support variable memory indices in the TBAA labelling too. 2020-05-26 14:57:11 -07:00
07ec1fc004 Make memory_index a variable, we'll be reusing it soon. 2020-05-26 14:57:11 -07:00
c82fe5fe8f Add a MemoryIndex parameter to resolve_memory_ptr.
It's always zero today, but it won't always be.
2020-05-26 14:57:05 -07:00
8a6f3beef5 memory_plans is a member, we don't need to pass it around. 2020-05-26 11:25:32 -07:00
b7747ec9de Merge branch 'master' into llvm-probestack 2020-05-26 09:40:33 -07:00
630be7733d Add llvm 'readonly' attribute to calls of the memory size function.
In passing, delete a lot of dead code. Remove old VM intrinsics for memory.size, memory.grow and breakpoints.
2020-05-22 16:55:57 -07:00
300c684742 Emit stack probes in LLVM. 2020-05-22 09:42:58 -07:00
3764e7b9f8 Change load_object_file to take a RelocationTarget instead of a LocalFunctionIndex.
This removes its last connection to the implementation details of having a wasm_module, which we don't want to have to rely on when building trampolines.

There currently isn't a RelocationTarget for a trampoline function that refers to itself (none of been observed to done so yet), so we make the RelocationTarget optional.
2020-05-21 13:40:08 -07:00
02f7e58c01 Change load_object_file to take a callback that converts symbol names into relocation targets.
This change means that load_object_file no longer needs a ModuleInfo, which trampoline generation doesn't have.
2020-05-21 13:32:03 -07:00
a3a4a74596 Plain refactor the ELF loading to its own file. NFC. 2020-05-21 12:18:22 -07:00
a47a3068f4 Remove #![allow(unused_imports, dead_code)] and fix resulting issues.
Fix nearly-all issues found by clippy too.
2020-05-20 17:18:23 -07:00
dde6bc5269 Remove the C++ code.
This is replaced in reborn by the engines.
2020-05-20 15:41:11 -07:00
c522e01165 Remove redundant close-and-reopen of impl block.
Move trap_if_misaligned up so it can join the impl block above it.
2020-05-20 14:18:34 -07:00