diff options
Diffstat (limited to 'src/tools/wasm-ctor-eval.cpp')
-rw-r--r-- | src/tools/wasm-ctor-eval.cpp | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/src/tools/wasm-ctor-eval.cpp b/src/tools/wasm-ctor-eval.cpp index 160e4a4f2..67c9f9707 100644 --- a/src/tools/wasm-ctor-eval.cpp +++ b/src/tools/wasm-ctor-eval.cpp @@ -32,6 +32,7 @@ #include "wasm-interpreter.h" #include "wasm-builder.h" #include "ast/memory-utils.h" +#include "ast/global-utils.h" using namespace wasm; @@ -153,10 +154,14 @@ public: // prepare scratch memory stack.resize(STACK_SIZE); // fill usable values for stack imports - auto total = STACK_START + STACK_SIZE; - globals["STACKTOP"] = Literal(int32_t(STACK_START)); - globals["STACK_MAX"] = Literal(int32_t(STACK_START + STACK_SIZE)); + if (auto* stackTop = GlobalUtils::getGlobalInitializedToImport(wasm, "env", "STACKTOP")) { + globals[stackTop->name] = Literal(int32_t(STACK_START)); + } + if (auto* stackMax = GlobalUtils::getGlobalInitializedToImport(wasm, "env", "STACK_MAX")) { + globals[stackMax->name] = Literal(int32_t(STACK_START)); + } // tell the module to accept writes up to the stack end + auto total = STACK_START + STACK_SIZE; memorySize = total / Memory::kPageSize; } @@ -398,6 +403,17 @@ int main(int argc, const char* argv[]) { } evalCtors(wasm, ctors); + // Do some useful optimizations after the evalling + { + PassRunner passRunner(&wasm); + passRunner.add("memory-packing"); // we flattened it, so re-optimize + passRunner.add("remove-unused-names"); + passRunner.add("dce"); + passRunner.add("merge-blocks"); + passRunner.add("vacuum"); + passRunner.run(); + } + if (options.extra.count("output") > 0) { if (options.debug) std::cerr << "writing..." << std::endl; ModuleWriter writer; |