summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2017-07-12 11:37:10 -0700
committerAlon Zakai (kripken) <alonzakai@gmail.com>2017-07-13 11:54:03 -0700
commitf755250db869781db4206eee8db00c8060ac398b (patch)
tree79438c54ab0857c9d0a706b1a7a0cbe86e40802b /src
parentb85e8b51464d0ea1d76d08c2a1b53648e9b7ed9c (diff)
downloadbinaryen-f755250db869781db4206eee8db00c8060ac398b.tar.gz
binaryen-f755250db869781db4206eee8db00c8060ac398b.tar.bz2
binaryen-f755250db869781db4206eee8db00c8060ac398b.zip
optimize shifts of 0
Diffstat (limited to 'src')
-rw-r--r--src/passes/OptimizeInstructions.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/passes/OptimizeInstructions.cpp b/src/passes/OptimizeInstructions.cpp
index d1b419a06..c6006d712 100644
--- a/src/passes/OptimizeInstructions.cpp
+++ b/src/passes/OptimizeInstructions.cpp
@@ -517,6 +517,12 @@ struct OptimizeInstructions : public WalkerPass<PostWalker<OptimizeInstructions,
}
}
}
+ // some operations have no effect TODO: many more
+ if (right->value == Literal(int32_t(0))) {
+ if (binary->op == ShlInt32 || binary->op == ShrUInt32 || binary->op == ShrSInt32) {
+ return binary->left;
+ }
+ }
// the square of some operations can be merged
if (auto* left = binary->left->dynCast<Binary>()) {
if (left->op == binary->op) {