Revision: 8834
Author:   [email protected]
Date:     Thu Aug  4 09:43:20 2011
Log:      Revert "tighten invariants of HValue::InferRange"

This change reportedly causes a slowdown or inifinite loop on ARM.  Revert
pending investigation.

[email protected]
BUG=
TEST=

Review URL: http://codereview.chromium.org/7566040
http://code.google.com/p/v8/source/detail?r=8834

Modified:
 /branches/bleeding_edge/src/hydrogen-instructions.cc
 /branches/bleeding_edge/test/mjsunit/math-floor.js
 /branches/bleeding_edge/test/mjsunit/math-round.js

=======================================
--- /branches/bleeding_edge/src/hydrogen-instructions.cc Wed Aug 3 03:44:20 2011 +++ /branches/bleeding_edge/src/hydrogen-instructions.cc Thu Aug 4 09:43:20 2011
@@ -862,10 +862,19 @@


 Range* HValue::InferRange() {
-  // Untagged integer32 cannot be -0, all other representations can.
-  Range* result = new Range();
-  result->set_can_be_minus_zero(!representation().IsInteger32());
-  return result;
+  if (representation().IsTagged()) {
+    // Tagged values are always in int32 range when converted to integer,
+    // but they can contain -0.
+    Range* result = new Range();
+    result->set_can_be_minus_zero(true);
+    return result;
+  } else if (representation().IsNone()) {
+    return NULL;
+  } else {
+    // Untagged integer32 cannot be -0 and we don't compute ranges for
+    // untagged doubles.
+    return new Range();
+  }
 }


=======================================
--- /branches/bleeding_edge/test/mjsunit/math-floor.js Wed Aug 3 03:44:20 2011 +++ /branches/bleeding_edge/test/mjsunit/math-floor.js Thu Aug 4 09:43:20 2011
@@ -51,17 +51,6 @@
   testFloor(-Infinity, -Infinity);
   testFloor(NaN, NaN);

-  // Ensure that a negative zero coming from Math.floor is properly handled
-  // by other operations.
-  function ifloor(x) {
-    return 1 / Math.floor(x);
-  }
-  assertEquals(-Infinity, ifloor(-0));
-  assertEquals(-Infinity, ifloor(-0));
-  assertEquals(-Infinity, ifloor(-0));
-  %OptimizeFunctionOnNextCall(ifloor);
-  assertEquals(-Infinity, ifloor(-0));
-
   testFloor(0, 0.1);
   testFloor(0, 0.49999999999999994);
   testFloor(0, 0.5);
@@ -140,19 +129,3 @@
 for (var i = 0; i < 500; i++) {
   test();
 }
-
-
-// Regression test for a bug where a negative zero coming from Math.floor
-// was not properly handled by other operations.
-function floorsum(i, n) {
-  var ret = Math.floor(n);
-  while (--i > 0) {
-    ret += Math.floor(n);
-  }
-  return ret;
-}
-assertEquals(-0, floorsum(1, -0));
-%OptimizeFunctionOnNextCall(floorsum);
-// The optimized function will deopt.  Run it with enough iterations to try
-// to optimize via OSR (triggering the bug).
-assertEquals(-0, floorsum(100000, -0));
=======================================
--- /branches/bleeding_edge/test/mjsunit/math-round.js Wed Aug 3 03:44:20 2011 +++ /branches/bleeding_edge/test/mjsunit/math-round.js Thu Aug 4 09:43:20 2011
@@ -1,4 +1,4 @@
-// Copyright 2011 the V8 project authors. All rights reserved.
+// Copyright 2010 the V8 project authors. All rights reserved.
 // Redistribution and use in source and binary forms, with or without
 // modification, are permitted provided that the following conditions are
 // met:
@@ -44,21 +44,6 @@
 testRound(-Infinity, -Infinity);
 testRound(NaN, NaN);

-// Regression test for a bug where a negative zero coming from Math.round
-// was not properly handled by other operations.
-function roundsum(i, n) {
-  var ret = Math.round(n);
-  while (--i > 0) {
-    ret += Math.round(n);
-  }
-  return ret;
-}
-assertEquals(-0, roundsum(1, -0));
-%OptimizeFunctionOnNextCall(roundsum);
-// The optimized function will deopt.  Run it with enough iterations to try
-// to optimize via OSR (triggering the bug).
-assertEquals(-0, roundsum(100000, -0));
-
 testRound(1, 0.5);
 testRound(1, 0.7);
 testRound(1, 1);

--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to