mirror of
https://github.com/fluencelabs/wasmer
synced 2025-03-27 05:01:02 +00:00
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>
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());