Index: src/hydrogen-instructions.cc |
diff --git a/src/hydrogen-instructions.cc b/src/hydrogen-instructions.cc |
index 6da6774aa8e87302bdd2a03a9f4f31f88d8216e7..206ab7e2accf5e496b6cd814eb1071c511cb21e7 100644 |
--- a/src/hydrogen-instructions.cc |
+++ b/src/hydrogen-instructions.cc |
@@ -1255,8 +1255,15 @@ static bool IsIdentityOperation(HValue* arg1, HValue* arg2, int32_t identity) { |
HValue* HAdd::Canonicalize() { |
- if (IsIdentityOperation(left(), right(), 0)) return left(); |
- if (IsIdentityOperation(right(), left(), 0)) return right(); |
+ // Adding 0 is an identity operation except in case of -0: -0 + 0 = +0 |
+ if (IsIdentityOperation(left(), right(), 0) && |
+ !left()->representation().IsDouble()) { // Left could be -0. |
+ return left(); |
+ } |
+ if (IsIdentityOperation(right(), left(), 0) && |
+ !left()->representation().IsDouble()) { // Right could be -0. |
+ return right(); |
+ } |
return this; |
} |