diff options
Diffstat (limited to 'src/passes/CoalesceLocals.cpp')
-rw-r--r-- | src/passes/CoalesceLocals.cpp | 8 |
1 files changed, 2 insertions, 6 deletions
diff --git a/src/passes/CoalesceLocals.cpp b/src/passes/CoalesceLocals.cpp index ef0699436..63912db19 100644 --- a/src/passes/CoalesceLocals.cpp +++ b/src/passes/CoalesceLocals.cpp @@ -342,17 +342,13 @@ void CoalesceLocals::applyIndices(std::vector<Index>& indices, Expression* root) if (action.isGet()) { auto* get = (*action.origin)->cast<GetLocal>(); get->index = indices[get->index]; - } else { + } else if (action.isSet()) { auto* set = (*action.origin)->cast<SetLocal>(); set->index = indices[set->index]; // in addition, we can optimize out redundant copies and ineffective sets GetLocal* get; if ((get = set->value->dynCast<GetLocal>()) && get->index == set->index) { - if (set->isTee()) { - *action.origin = get; - } else { - ExpressionManipulator::nop(set); - } + action.removeCopy(); continue; } // remove ineffective actions |