summaryrefslogtreecommitdiff
path: root/src/asm2wasm.h
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2016-08-23 15:05:40 -0700
committerAlon Zakai <alonzakai@gmail.com>2016-09-07 09:55:07 -0700
commit323e32bc1ca73c92d81b7fe28fd54e62c2218801 (patch)
tree93d1394679d6eb2a2cb18b3621b2ea036f984336 /src/asm2wasm.h
parente125ae76b29b84563892263663e66ff072852c99 (diff)
downloadbinaryen-323e32bc1ca73c92d81b7fe28fd54e62c2218801.tar.gz
binaryen-323e32bc1ca73c92d81b7fe28fd54e62c2218801.tar.bz2
binaryen-323e32bc1ca73c92d81b7fe28fd54e62c2218801.zip
autodrop must be run before we optimize in asm2wasm, as otherwise its input is not yet valid
then after finalizeCalls, we must autodrop again to drop things that finalizeCalls changed
Diffstat (limited to 'src/asm2wasm.h')
-rw-r--r--src/asm2wasm.h7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/asm2wasm.h b/src/asm2wasm.h
index 10d065400..7cc671597 100644
--- a/src/asm2wasm.h
+++ b/src/asm2wasm.h
@@ -523,7 +523,10 @@ void Asm2WasmBuilder::processAsm(Ref ast) {
for (unsigned i = 1; i < body->size(); i++) {
if (body[i][0] == DEFUN) numFunctions++;
}
- optimizingBuilder = make_unique<OptimizingIncrementalModuleBuilder>(&wasm, numFunctions);
+ optimizingBuilder = make_unique<OptimizingIncrementalModuleBuilder>(&wasm, numFunctions, [&](PassRunner& passRunner) {
+ // run autodrop first, before optimizations
+ passRunner.add<AutoDrop>();
+ });
}
// first pass - do almost everything, but function imports and indirect calls
@@ -786,7 +789,7 @@ void Asm2WasmBuilder::processAsm(Ref ast) {
};
PassRunner passRunner(&wasm);
passRunner.add<FinalizeCalls>(this);
- passRunner.add<AutoDrop>();
+ passRunner.add<AutoDrop>(); // FinalizeCalls may cause us to require additional drops
if (optimize) passRunner.add("vacuum"); // autodrop can add some garbage
passRunner.run();