diff options
Diffstat (limited to 'src/tools/wasm-ctor-eval.cpp')
-rw-r--r-- | src/tools/wasm-ctor-eval.cpp | 43 |
1 files changed, 25 insertions, 18 deletions
diff --git a/src/tools/wasm-ctor-eval.cpp b/src/tools/wasm-ctor-eval.cpp index e6883e351..3923d137c 100644 --- a/src/tools/wasm-ctor-eval.cpp +++ b/src/tools/wasm-ctor-eval.cpp @@ -663,11 +663,6 @@ void evalCtors(Module& wasm, CtorEvalExternalInterface interface(linkedInstances); try { - // flatten memory, so we do not depend on the layout of data segments - if (!MemoryUtils::flatten(wasm.memory)) { - Fatal() << " ...stopping since could not flatten memory\n"; - } - // create an instance for evalling EvallingModuleInstance instance(wasm, &interface, linkedInstances); // we should not add new globals from here on; as a result, using @@ -712,6 +707,16 @@ void evalCtors(Module& wasm, } } +static bool canEval(Module& wasm) { + // Check if we can flatten memory. We need to do so currently because of how + // we assume memory is simple and flat. TODO + if (!MemoryUtils::flatten(wasm)) { + std::cout << " ...stopping since could not flatten memory\n"; + return false; + } + return true; +} + } // anonymous namespace // @@ -808,19 +813,21 @@ int main(int argc, const char* argv[]) { Fatal() << "error in validating input"; } - evalCtors(wasm, ctors, keptExports); - - // Do some useful optimizations after the evalling - { - PassRunner passRunner(&wasm); - passRunner.add("memory-packing"); // we flattened it, so re-optimize - // TODO: just do -Os for the one function - passRunner.add("remove-unused-names"); - passRunner.add("dce"); - passRunner.add("merge-blocks"); - passRunner.add("vacuum"); - passRunner.add("remove-unused-module-elements"); - passRunner.run(); + if (canEval(wasm)) { + evalCtors(wasm, ctors, keptExports); + + // Do some useful optimizations after the evalling + { + PassRunner passRunner(&wasm); + passRunner.add("memory-packing"); // we flattened it, so re-optimize + // TODO: just do -Os for the one function + passRunner.add("remove-unused-names"); + passRunner.add("dce"); + passRunner.add("merge-blocks"); + passRunner.add("vacuum"); + passRunner.add("remove-unused-module-elements"); + passRunner.run(); + } } if (options.extra.count("output") > 0) { |