diff options
author | Alon Zakai <alonzakai@gmail.com> | 2015-11-22 15:39:06 -0800 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2015-11-22 15:39:06 -0800 |
commit | f5beae2835377e452c95c5b64a90a75b97b3234e (patch) | |
tree | 9c5a35534f31ca8fd6f4b5d262ccaba869d2bb56 /src | |
parent | 45a011e1071ba511b3deee134219dd2f9eb6c8aa (diff) | |
download | binaryen-f5beae2835377e452c95c5b64a90a75b97b3234e.tar.gz binaryen-f5beae2835377e452c95c5b64a90a75b97b3234e.tar.bz2 binaryen-f5beae2835377e452c95c5b64a90a75b97b3234e.zip |
emit constants instead of callImport when there is a type necessary
Diffstat (limited to 'src')
-rw-r--r-- | src/passes/RemoveImports.cpp | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/src/passes/RemoveImports.cpp b/src/passes/RemoveImports.cpp index 07465f9d6..06865a8f9 100644 --- a/src/passes/RemoveImports.cpp +++ b/src/passes/RemoveImports.cpp @@ -13,20 +13,27 @@ namespace wasm { struct RemoveImports : public Pass { MixedArena* allocator; + std::map<Name, Import*> importsMap; void prepare(PassRunner* runner, Module *module) override { allocator = runner->allocator; + importsMap = module->importsMap; } void visitCallImport(CallImport *curr) override { - replaceCurrent(allocator->alloc<Nop>()); + WasmType type = importsMap[curr->target]->type.result; + if (type == none) { + replaceCurrent(allocator->alloc<Nop>()); + } else { + Literal nopLiteral; + nopLiteral.type = type; + replaceCurrent(allocator->alloc<Const>()->set(nopLiteral)); + } } void visitModule(Module *curr) { - auto imports = curr->imports; - for (auto import : imports) { - curr->removeImport(import->name); - } + curr->importsMap.clear(); + curr->imports.clear(); } }; |