Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(138)

Unified Diff: dart/frog/leg/ssa/nodes.dart

Issue 9536012: Special case -0.0 when constant folding. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 8 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: dart/frog/leg/ssa/nodes.dart
diff --git a/dart/frog/leg/ssa/nodes.dart b/dart/frog/leg/ssa/nodes.dart
index 44ddba7e0d4705517dd0117e34ae30c3d6407b53..f2b0e3ffecf83bf5e4d0ab350699139605d716cb 100644
--- a/dart/frog/leg/ssa/nodes.dart
+++ b/dart/frog/leg/ssa/nodes.dart
@@ -122,6 +122,7 @@ class HGraph {
HLiteral trueLiteral;
HLiteral falseLiteral;
HLiteral nanLiteral;
+ HLiteral negativeZeroLiteral;
Map<int, HLiteral> intLiterals;
Map<double, HLiteral> doubleLiterals;
Map<num, HLiteral> numLiterals;
@@ -172,8 +173,20 @@ class HGraph {
return nanLiteral;
}
+ HLiteral addNewNegativeZeroLiteral() {
+ if (negativeZeroLiteral === null) {
+ negativeZeroLiteral = new HLiteral.internal(-0.0, HType.DOUBLE);
+ entry.addAtExit(negativeZeroLiteral);
+ }
+ return negativeZeroLiteral;
+ }
+
HLiteral addNewLiteralDouble(double value) {
if (value.isNaN()) return addNewLiteralNaN(); // Avoid hashing NaN.
+ if (value == 0 && value.isNegative()) {
+ // Avoid hashing -0.0 as it compares equal to 0.0.
+ return addNewNegativeZeroLiteral();
+ }
if (doubleLiterals === null) doubleLiterals = new Map<double, HLiteral>();
HLiteral result = doubleLiterals[value];
if (result === null) {

Powered by Google App Engine
This is Rietveld 408576698