diff options
Diffstat (limited to 'src/passes/RemoveUnusedNames.cpp')
-rw-r--r-- | src/passes/RemoveUnusedNames.cpp | 24 |
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"); |