Move native signatures out of Module (#2362)
After compilation there's actually no need to hold onto the native signature for a wasm function type, so this commit moves out the `ir::Signature` value from a `Module` into a separate field that's deallocated when compilation is finished. This simplifies the `SignatureRegistry` because it only needs to track wasm functino types and it also means less work is done for `Func::wrap`.
This commit is contained in:
@@ -12,8 +12,9 @@ use wasmtime_environ::wasm::{
|
||||
GlobalIndex, MemoryIndex, SignatureIndex, TableIndex,
|
||||
};
|
||||
use wasmtime_environ::{
|
||||
BuiltinFunctionIndex, CompileError, CompiledFunction, Compiler, FunctionBodyData, Module,
|
||||
ModuleTranslation, Relocation, RelocationTarget, TrapInformation, VMOffsets,
|
||||
entity::PrimaryMap, BuiltinFunctionIndex, CompileError, CompiledFunction, Compiler,
|
||||
FunctionBodyData, Module, ModuleTranslation, Relocation, RelocationTarget, TrapInformation,
|
||||
VMOffsets,
|
||||
};
|
||||
|
||||
/// A compiler that compiles a WebAssembly module with Lightbeam, directly translating the Wasm file.
|
||||
@@ -32,7 +33,7 @@ impl Compiler for Lightbeam {
|
||||
}
|
||||
let func_index = translation.module.func_index(i);
|
||||
|
||||
let env = FuncEnvironment::new(isa.frontend_config().pointer_bytes(), &translation.module);
|
||||
let env = FuncEnvironment::new(isa.frontend_config().pointer_bytes(), translation);
|
||||
let mut codegen_session: CodeGenSession<_> = CodeGenSession::new(
|
||||
translation.function_body_inputs.len() as u32,
|
||||
&env,
|
||||
@@ -180,15 +181,18 @@ struct FuncEnvironment<'module_environment> {
|
||||
/// The module-level environment which this function-level environment belongs to.
|
||||
module: &'module_environment Module,
|
||||
|
||||
native_signatures: &'module_environment PrimaryMap<SignatureIndex, ir::Signature>,
|
||||
|
||||
/// Offsets to struct fields accessed by JIT code.
|
||||
offsets: VMOffsets,
|
||||
}
|
||||
|
||||
impl<'module_environment> FuncEnvironment<'module_environment> {
|
||||
fn new(pointer_bytes: u8, module: &'module_environment Module) -> Self {
|
||||
fn new(pointer_bytes: u8, translation: &'module_environment ModuleTranslation<'_>) -> Self {
|
||||
Self {
|
||||
module,
|
||||
offsets: VMOffsets::new(pointer_bytes, module),
|
||||
module: &translation.module,
|
||||
offsets: VMOffsets::new(pointer_bytes, &translation.module),
|
||||
native_signatures: &translation.native_signatures,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -227,7 +231,7 @@ impl lightbeam::ModuleContext for FuncEnvironment<'_> {
|
||||
}
|
||||
|
||||
fn signature(&self, index: u32) -> &Self::Signature {
|
||||
&self.module.signatures[SignatureIndex::from_u32(index)].1
|
||||
&self.native_signatures[SignatureIndex::from_u32(index)]
|
||||
}
|
||||
|
||||
fn defined_table_index(&self, table_index: u32) -> Option<u32> {
|
||||
|
||||
Reference in New Issue
Block a user