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 | |
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
-rwxr-xr-x | check.py | 4 | ||||
-rw-r--r-- | src/passes/RemoveImports.cpp | 17 | ||||
-rw-r--r-- | test/passes/lower-if-else.txt | 2 | ||||
-rw-r--r-- | test/passes/remove-imports.txt | 16 | ||||
-rw-r--r-- | test/passes/remove-imports.wast | 6 |
5 files changed, 32 insertions, 13 deletions
@@ -89,7 +89,9 @@ for t in sorted(os.listdir(os.path.join('test', 'passes'))): if t.endswith('.wast'): print '..', t passname = os.path.basename(t).replace('.wast', '') - actual, err = subprocess.Popen([os.path.join('bin', 'binaryen-shell'), '-print-before', '-print-after', '-' + passname, os.path.join('test', 'passes', t)], stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate() + cmd = [os.path.join('bin', 'binaryen-shell'), '-print-before', '-print-after', '-' + passname, os.path.join('test', 'passes', t)] + print ' ', ' '.join(cmd) + actual, err = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate() fail_if_not_identical(actual, open(os.path.join('test', 'passes', passname + '.txt')).read()) print '\n[ checking binaryen-shell testcases... ]\n' 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(); } }; diff --git a/test/passes/lower-if-else.txt b/test/passes/lower-if-else.txt index 2245f7230..27f2603df 100644 --- a/test/passes/lower-if-else.txt +++ b/test/passes/lower-if-else.txt @@ -1,4 +1,3 @@ -printing before: (module (memory 16777216 16777216) (func $ifs @@ -20,7 +19,6 @@ printing before: ) ) ) -printing after: (module (memory 16777216 16777216) (func $ifs diff --git a/test/passes/remove-imports.txt b/test/passes/remove-imports.txt index 07e47df5b..f28068a27 100644 --- a/test/passes/remove-imports.txt +++ b/test/passes/remove-imports.txt @@ -1,15 +1,23 @@ -printing before: (module (memory 1024 1024) (import $waka "somewhere" "waka") + (import $waka-ret "somewhere" "waka-ret" (result i32)) + (import $waka-ret-d "somewhere" "waka-ret-d" (result f64)) (func $nada - (call_import $f64-to-int) + (block + (call_import $waka) + (call_import $waka-ret) + (call_import $waka-ret-d) + ) ) ) -printing after: (module (memory 1024 1024) (func $nada - (nop) + (block + (nop) + (i32.const 0) + (f64.const 0) + ) ) ) diff --git a/test/passes/remove-imports.wast b/test/passes/remove-imports.wast index c6b79e9bf..00190a32d 100644 --- a/test/passes/remove-imports.wast +++ b/test/passes/remove-imports.wast @@ -1,7 +1,11 @@ (module (memory 1024 1024) (import $waka "somewhere" "waka") + (import $waka-ret "somewhere" "waka-ret" (result i32)) + (import $waka-ret-d "somewhere" "waka-ret-d" (result f64)) (func $nada - (call_import $f64-to-int) + (call_import $waka) + (call_import $waka-ret) + (call_import $waka-ret-d) ) ) |