summaryrefslogtreecommitdiff
path: root/src/tools/wasm-ctor-eval.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/wasm-ctor-eval.cpp')
-rw-r--r--src/tools/wasm-ctor-eval.cpp22
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;