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.cpp19
1 files changed, 8 insertions, 11 deletions
diff --git a/src/passes/ReorderLocals.cpp b/src/passes/ReorderLocals.cpp
index 3315d0e02..f5736930a 100644
--- a/src/passes/ReorderLocals.cpp
+++ b/src/passes/ReorderLocals.cpp
@@ -65,15 +65,16 @@ struct ReorderLocals : public WalkerPass<PostWalker<ReorderLocals>> {
return counts[a] > counts[b];
});
// sorting left params in front, perhaps slightly reordered. verify and fix.
- for (size_t i = 0; i < curr->params.size(); i++) {
- assert(newToOld[i] < curr->params.size());
+ size_t numParams = curr->sig.params.size();
+ for (size_t i = 0; i < numParams; i++) {
+ assert(newToOld[i] < numParams);
}
- for (size_t i = 0; i < curr->params.size(); i++) {
+ for (size_t i = 0; i < numParams; i++) {
newToOld[i] = i;
}
// sort vars, and drop unused ones
- auto oldVars = curr->vars;
- curr->vars.clear();
+ std::vector<Type> oldVars;
+ std::swap(oldVars, curr->vars);
for (size_t i = curr->getVarIndexBase(); i < newToOld.size(); i++) {
Index index = newToOld[i];
if (counts[index] > 0) {
@@ -102,15 +103,11 @@ struct ReorderLocals : public WalkerPass<PostWalker<ReorderLocals>> {
: func(func), oldToNew(oldToNew) {}
void visitLocalGet(LocalGet* curr) {
- if (func->isVar(curr->index)) {
- curr->index = oldToNew[curr->index];
- }
+ curr->index = oldToNew[curr->index];
}
void visitLocalSet(LocalSet* curr) {
- if (func->isVar(curr->index)) {
- curr->index = oldToNew[curr->index];
- }
+ curr->index = oldToNew[curr->index];
}
};
ReIndexer reIndexer(curr, oldToNew);