diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/passes/OptimizeInstructions.cpp | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/src/passes/OptimizeInstructions.cpp b/src/passes/OptimizeInstructions.cpp index ad667f888..cdfa29138 100644 --- a/src/passes/OptimizeInstructions.cpp +++ b/src/passes/OptimizeInstructions.cpp @@ -862,8 +862,9 @@ private: return; } } else if (curr->op == ShlInt32) { - // shifting a 0 is a 0, unless the shift has side effects - if (left && Bits::getEffectiveShifts(left) == 0 && !EffectAnalyzer(passOptions, curr->right).hasSideEffects()) { + // shifting a 0 is a 0, or anything by 0 has no effect, all unless the shift has side effects + if (((left && left->value.geti32() == 0) || (right && Bits::getEffectiveShifts(right) == 0)) && + !EffectAnalyzer(passOptions, curr->right).hasSideEffects()) { replaceCurrent(left); return; } |