diff options
Diffstat (limited to 'src/passes/ReorderLocals.cpp')
-rw-r--r-- | src/passes/ReorderLocals.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/passes/ReorderLocals.cpp b/src/passes/ReorderLocals.cpp index e378408b6..7f64c00f3 100644 --- a/src/passes/ReorderLocals.cpp +++ b/src/passes/ReorderLocals.cpp @@ -31,12 +31,17 @@ struct ReorderLocals : public WalkerPass<PostWalker<ReorderLocals>> { std::map<Name, uint32_t> counts; void visitFunction(Function *curr) { - sort(curr->locals.begin(), curr->locals.end(), [this](NameType a, NameType b) -> bool { + auto& locals = curr->locals; + sort(locals.begin(), locals.end(), [this](NameType a, NameType b) -> bool { if (this->counts[a.name] == this->counts[b.name]) { return strcmp(a.name.str, b.name.str) > 0; } return this->counts[a.name] > this->counts[b.name]; }); + // drop completely unused locals + while (locals.size() > 0 && counts[locals.back().name] == 0) { + locals.pop_back(); + } counts.clear(); } |