summaryrefslogtreecommitdiff
path: root/src/asm2wasm.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/asm2wasm.h')
-rw-r--r--src/asm2wasm.h27
1 files changed, 17 insertions, 10 deletions
diff --git a/src/asm2wasm.h b/src/asm2wasm.h
index bf42a8a0e..fa3a3dd4c 100644
--- a/src/asm2wasm.h
+++ b/src/asm2wasm.h
@@ -633,11 +633,15 @@ void Asm2WasmBuilder::processAsm(Ref ast) {
if (body[i][0] == DEFUN) numFunctions++;
}
optimizingBuilder = make_unique<OptimizingIncrementalModuleBuilder>(&wasm, numFunctions, [&](PassRunner& passRunner) {
+ if (debug) {
+ passRunner.setDebug(true);
+ passRunner.setValidateGlobally(false);
+ }
// run autodrop first, before optimizations
passRunner.add<AutoDrop>();
// optimize relooper label variable usage at the wasm level, where it is easy
passRunner.add("relooper-jump-threading");
- });
+ }, debug, false /* do not validate globally yet */);
}
// first pass - do almost everything, but function imports and indirect calls
@@ -821,6 +825,10 @@ void Asm2WasmBuilder::processAsm(Ref ast) {
if (optimize) {
optimizingBuilder->finish();
PassRunner passRunner(&wasm);
+ if (debug) {
+ passRunner.setDebug(true);
+ passRunner.setValidateGlobally(false);
+ }
passRunner.add("post-emscripten");
passRunner.run();
}
@@ -859,7 +867,9 @@ void Asm2WasmBuilder::processAsm(Ref ast) {
Asm2WasmBuilder* parent;
- FinalizeCalls(Asm2WasmBuilder* parent) : parent(parent) {}
+ FinalizeCalls(Asm2WasmBuilder* parent) : parent(parent) {
+ name = "finalize-calls";
+ }
void visitCall(Call* curr) {
if (!getModule()->checkFunction(curr->target)) {
@@ -930,6 +940,10 @@ void Asm2WasmBuilder::processAsm(Ref ast) {
};
PassRunner passRunner(&wasm);
+ if (debug) {
+ passRunner.setDebug(true);
+ passRunner.setValidateGlobally(false);
+ }
passRunner.add<FinalizeCalls>(this);
passRunner.add<ReFinalize>(); // FinalizeCalls changes call types, need to percolate
passRunner.add<AutoDrop>(); // FinalizeCalls may cause us to require additional drops
@@ -1069,9 +1083,7 @@ Function* Asm2WasmBuilder::processFunction(Ref ast) {
auto name = ast[1]->getIString();
if (debug) {
- std::cout << "\nfunc: " << ast[1]->getIString().str << '\n';
- ast->stringify(std::cout);
- std::cout << '\n';
+ std::cout << "asm2wasming func: " << ast[1]->getIString().str << '\n';
}
auto function = new Function;
@@ -1141,11 +1153,6 @@ Function* Asm2WasmBuilder::processFunction(Ref ast) {
std::function<Expression* (Ref)> process = [&](Ref ast) -> Expression* {
AstStackHelper astStackHelper(ast); // TODO: only create one when we need it?
- if (debug) {
- std::cout << "at: ";
- ast->stringify(std::cout);
- std::cout << '\n';
- }
IString what = ast[0]->getIString();
if (what == STAT) {
return process(ast[1]); // and drop return value, if any