diff options
author | Heejin Ahn <aheejin@gmail.com> | 2021-10-14 15:42:55 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-14 15:42:55 -0700 |
commit | 0a1ac51b1e7e88f0ce89793c71333bb8bc7335d0 (patch) | |
tree | 3e42e4162b94fe537ca0260e236044d80c9ac06c /src | |
parent | bf665976b1526ca7cf11bacf5745563dfe193206 (diff) | |
download | binaryen-0a1ac51b1e7e88f0ce89793c71333bb8bc7335d0.tar.gz binaryen-0a1ac51b1e7e88f0ce89793c71333bb8bc7335d0.tar.bz2 binaryen-0a1ac51b1e7e88f0ce89793c71333bb8bc7335d0.zip |
[wasm-metadce] Add support for tags (#4250)
This adds support for tag-using instructions (`throw` and `catch`) to
wasm-metadce. We had to use a hacky workaround in
emscripten-core/emscripten#15266 because of the lack of this support;
after this lands we can remove it.
Diffstat (limited to 'src')
-rw-r--r-- | src/tools/wasm-metadce.cpp | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/tools/wasm-metadce.cpp b/src/tools/wasm-metadce.cpp index 23a2d0fcc..00fa87ce2 100644 --- a/src/tools/wasm-metadce.cpp +++ b/src/tools/wasm-metadce.cpp @@ -263,6 +263,12 @@ struct MetaDCEGraph { } void visitGlobalGet(GlobalGet* curr) { handleGlobal(curr->name); } void visitGlobalSet(GlobalSet* curr) { handleGlobal(curr->name); } + void visitThrow(Throw* curr) { handleTag(curr->tag); } + void visitTry(Try* curr) { + for (auto tag : curr->catchTags) { + handleTag(tag); + } + } private: MetaDCEGraph* parent; @@ -282,6 +288,17 @@ struct MetaDCEGraph { parent->nodes[parent->functionToDCENode[getFunction()->name]] .reaches.push_back(dceName); } + + void handleTag(Name name) { + Name dceName; + if (!getModule()->getTag(name)->imported()) { + dceName = parent->tagToDCENode[name]; + } else { + dceName = parent->importIdToDCENode[parent->getTagImportId(name)]; + } + parent->nodes[parent->functionToDCENode[getFunction()->name]] + .reaches.push_back(dceName); + } }; PassRunner runner(&wasm); |