summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2016-01-05 09:54:43 -0800
committerAlon Zakai <alonzakai@gmail.com>2016-01-05 09:54:43 -0800
commit4c9e463f2c2012f72d701d96f62f1c4e03a27595 (patch)
tree5112ee35e5d0fd0affe766e3f946c4db48d18ee0 /src
parent680fdff9b7bad8653548fb4145c983ded41d466a (diff)
downloadbinaryen-4c9e463f2c2012f72d701d96f62f1c4e03a27595.tar.gz
binaryen-4c9e463f2c2012f72d701d96f62f1c4e03a27595.tar.bz2
binaryen-4c9e463f2c2012f72d701d96f62f1c4e03a27595.zip
fix RemoveUnusedNames
Diffstat (limited to 'src')
-rw-r--r--src/passes/RemoveUnusedNames.cpp24
1 files changed, 11 insertions, 13 deletions
diff --git a/src/passes/RemoveUnusedNames.cpp b/src/passes/RemoveUnusedNames.cpp
index 9c0b4a83f..62de48567 100644
--- a/src/passes/RemoveUnusedNames.cpp
+++ b/src/passes/RemoveUnusedNames.cpp
@@ -24,25 +24,23 @@
namespace wasm {
struct RemoveUnusedNames : public Pass {
- std::set<Name> used;
-
- void prepare(PassRunner* runner, Module *module) override {
- struct Scanner : public WasmWalker {
- std::set<Name>& used;
- Scanner(std::set<Name>& used) : used(used) {}
- void visitBreak(Break *curr) override {
- used.insert(curr->name);
- }
- };
- Scanner scanner(used);
- scanner.startWalk(module);
+ // We maintain a list of branches that we saw in children, then when we reach
+ // a parent block, we know if it was branched to
+ std::set<Name> branchesSeen;
+
+ void visitBreak(Break *curr) override {
+ branchesSeen.insert(curr->name);
}
void visitBlock(Block *curr) override {
- if (curr->name.is() && used.count(curr->name) == 0) {
+ if (curr->name.is() && branchesSeen.count(curr->name) == 0) {
curr->name = Name();
}
}
+
+ void visitFunction(Function *curr) override {
+ branchesSeen.clear();
+ }
};
static RegisterPass<RemoveUnusedNames> registerPass("remove-unused-names", "removes names from locations that are never branched to");