wasmer/lib/llvm-backend
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
..
2019-08-22 18:57:26 -07:00
2019-10-25 17:22:25 +00:00
2019-08-22 22:58:08 -07:00
2019-10-23 13:40:35 -07:00
2019-09-30 22:50:04 -07:00

Wasmer logo

Build Status License Join the Wasmer Community Number of downloads from crates.io Read our API documentation

Wasmer LLVM backend

Wasmer is a standalone JIT WebAssembly runtime, aiming to be fully compatible with Emscripten, Rust and Go. Learn more.

This crate represents the LLVM backend integration for Wasmer.

Usage

Usage in Wasmer Standalone

If you are using the wasmer CLI, you can specify the backend with:

wasmer run program.wasm --backend=llvm

Usage in Wasmer Embedded

If you are using Wasmer Embedded, you can specify the LLVM backend to the compile_with function:

use wasmer_llvm_backend::LLVMCompiler;

// ...
let module = wasmer_runtime_core::compile_with(&wasm_binary[..], &LLVMCompiler::new());