diff options
author | Alon Zakai <alonzakai@gmail.com> | 2016-08-23 15:05:40 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2016-09-07 09:55:07 -0700 |
commit | 323e32bc1ca73c92d81b7fe28fd54e62c2218801 (patch) | |
tree | 93d1394679d6eb2a2cb18b3621b2ea036f984336 /src/asm2wasm.h | |
parent | e125ae76b29b84563892263663e66ff072852c99 (diff) | |
download | binaryen-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.h | 7 |
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(); |