Do more Vec reserving.

This commit is contained in:
Dan Gohman
2019-02-22 17:10:23 -08:00
parent 538ef20f50
commit e2f79ae405
3 changed files with 27 additions and 20 deletions

View File

@@ -160,6 +160,9 @@ impl<'data> cranelift_wasm::ModuleEnvironment<'data> for ModuleEnvironment<'data
fn reserve_func_types(&mut self, num: u32) {
self.result.module.functions.reserve_exact(cast::usize(num));
self.result
.function_body_inputs
.reserve_exact(cast::usize(num));
}
fn declare_func_type(&mut self, sig_index: SignatureIndex) {

View File

@@ -154,7 +154,6 @@ fn make_trampoline(
builder.switch_to_block(block0);
builder.seal_block(block0);
let mut callee_args = Vec::new();
let (vmctx_ptr_val, values_vec_ptr_val) = {
let params = builder.func.dfg.ebb_params(block0);
(params[0], params[1])
@@ -162,8 +161,12 @@ fn make_trampoline(
// Load the argument values out of `values_vec`.
let mflags = ir::MemFlags::trusted();
for (i, r) in signature.params.iter().enumerate() {
let value = match r.purpose {
let callee_args = signature
.params
.iter()
.enumerate()
.map(|(i, r)| {
match r.purpose {
// i - 1 because vmctx isn't passed through `values_vec`.
ir::ArgumentPurpose::Normal => builder.ins().load(
r.value_type,
@@ -173,9 +176,9 @@ fn make_trampoline(
),
ir::ArgumentPurpose::VMContext => vmctx_ptr_val,
other => panic!("unsupported argument purpose {}", other),
};
callee_args.push(value);
}
})
.collect::<Vec<_>>();
let new_sig = builder.import_signature(signature.clone());

View File

@@ -87,11 +87,12 @@ impl<'data> RawCompiledModule<'data> {
// Compute indices into the shared signature table.
let signatures = {
let signature_registry = compiler.signatures();
let mut signatures = PrimaryMap::new();
for sig in translation.module.signatures.values() {
signatures.push(signature_registry.register(sig));
}
signatures
translation
.module
.signatures
.values()
.map(|sig| signature_registry.register(sig))
.collect::<PrimaryMap<_, _>>()
};
// Make all code compiled thus far executable.