summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlon Zakai (kripken) <alonzakai@gmail.com>2017-02-11 13:09:04 -0800
committerAlon Zakai (kripken) <alonzakai@gmail.com>2017-02-16 22:45:35 -0800
commit41eee37bc153a68b0f0c46162e21f825d1784499 (patch)
treecc16f97c01fef7a61761bbcbecfecd53df9af365 /src
parentc6ea79d1532face076c2dfeb8eadb58319e4e5fd (diff)
downloadbinaryen-41eee37bc153a68b0f0c46162e21f825d1784499.tar.gz
binaryen-41eee37bc153a68b0f0c46162e21f825d1784499.tar.bz2
binaryen-41eee37bc153a68b0f0c46162e21f825d1784499.zip
optimize sign-extends to ne
Diffstat (limited to 'src')
-rw-r--r--src/passes/OptimizeInstructions.cpp4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/passes/OptimizeInstructions.cpp b/src/passes/OptimizeInstructions.cpp
index bb4748a97..ef18ea777 100644
--- a/src/passes/OptimizeInstructions.cpp
+++ b/src/passes/OptimizeInstructions.cpp
@@ -364,7 +364,7 @@ struct OptimizeInstructions : public WalkerPass<PostWalker<OptimizeInstructions,
if (getMaxBits(ext) + extraShifts < bits) {
return removeAlmostSignExt(binary);
}
- } else if (binary->op == EqInt32) {
+ } else if (binary->op == EqInt32 || binary->op == NeInt32) {
if (auto* c = binary->right->dynCast<Const>()) {
if (auto* ext = getSignExt(binary->left)) {
// we are comparing a sign extend to a constant, which means we can use a cheaper zext
@@ -374,7 +374,7 @@ struct OptimizeInstructions : public WalkerPass<PostWalker<OptimizeInstructions,
c->value = c->value.and_(Literal(lowBitMask(bits)));
return binary;
}
- if (c->value.geti32() == 0) {
+ if (binary->op == EqInt32 && c->value.geti32() == 0) {
// equal 0 => eqz
return Builder(*getModule()).makeUnary(EqZInt32, binary->left);
}