summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
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");