Parallelize with rayon
This commit is contained in:
parent
ae091d5319
commit
f83420bbf7
|
@ -6,6 +6,7 @@ use crate::ir::{ExportKind, FuncDecl, FunctionBody, ImportKind, Module, Type, Va
|
||||||
use crate::passes::rpo::RPO;
|
use crate::passes::rpo::RPO;
|
||||||
use crate::Operator;
|
use crate::Operator;
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
|
use rayon::prelude::*;
|
||||||
use std::borrow::Cow;
|
use std::borrow::Cow;
|
||||||
|
|
||||||
pub mod stackify;
|
pub mod stackify;
|
||||||
|
@ -689,10 +690,19 @@ pub fn compile(module: &Module<'_>) -> anyhow::Result<Vec<u8>> {
|
||||||
into_mod.section(&elem);
|
into_mod.section(&elem);
|
||||||
|
|
||||||
let mut code = wasm_encoder::CodeSection::new();
|
let mut code = wasm_encoder::CodeSection::new();
|
||||||
for (func, func_decl) in module.funcs().skip(num_func_imports) {
|
let bodies = module
|
||||||
let body = func_decl.body().unwrap();
|
.funcs()
|
||||||
log::debug!("Compiling {}", func);
|
.skip(num_func_imports)
|
||||||
let body = WasmFuncBackend::new(body)?.compile()?;
|
.collect::<Vec<_>>()
|
||||||
|
.par_iter()
|
||||||
|
.map(|(func, func_decl)| -> Result<wasm_encoder::Function> {
|
||||||
|
let body = func_decl.body().unwrap();
|
||||||
|
log::debug!("Compiling {}", func);
|
||||||
|
WasmFuncBackend::new(body)?.compile()
|
||||||
|
})
|
||||||
|
.collect::<Result<Vec<_>>>()?;
|
||||||
|
|
||||||
|
for body in bodies {
|
||||||
code.function(&body);
|
code.function(&body);
|
||||||
}
|
}
|
||||||
into_mod.section(&code);
|
into_mod.section(&code);
|
||||||
|
|
Loading…
Reference in a new issue