summaryrefslogtreecommitdiff
path: root/src/passes/ReorderLocals.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/passes/ReorderLocals.cpp')
-rw-r--r--src/passes/ReorderLocals.cpp7
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();
}