Reviewers: William Hesse,

Description:
Revert r8753.

It caused a regressions in compile time in the optimizing compiler. I'm
reverting until
the reason for this is identified and fixed.

[email protected]

Please review this at http://codereview.chromium.org/7453024/

SVN Base: http://v8.googlecode.com/svn/branches/bleeding_edge/

Affected files:
  M     src/hydrogen-instructions.cc


Index: src/hydrogen-instructions.cc
===================================================================
--- src/hydrogen-instructions.cc        (revision 8755)
+++ src/hydrogen-instructions.cc        (working copy)
@@ -481,6 +481,7 @@

 void HValue::AddNewRange(Range* r) {
   if (!HasRange()) ComputeInitialRange();
+  if (!HasRange()) range_ = new Range();
   ASSERT(HasRange());
   r->StackUpon(range_);
   range_ = r;
@@ -861,22 +862,27 @@


 Range* HValue::InferRange() {
-  if (representation().IsInteger32()) {
-    // Untagged integer32 cannot be -0.
-    return new Range ();
-  } else {
- // Tagged values, untagged doubles, and values with unknown representation
-    // can contain -0.
+  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();
   }
 }


 Range* HConstant::InferRange() {
   if (has_int32_value_) {
-    return new Range(int32_value_, int32_value_);
+    Range* result = new Range(int32_value_, int32_value_);
+    result->set_can_be_minus_zero(false);
+    return result;
   }
   return HValue::InferRange();
 }
@@ -885,7 +891,8 @@
 Range* HPhi::InferRange() {
   if (representation().IsInteger32()) {
     if (block()->IsLoopHeader()) {
-      return new Range();
+      Range* range = new Range(kMinInt, kMaxInt);
+      return range;
     } else {
       Range* range = OperandAt(0)->range()->Copy();
       for (int i = 1; i < OperandCount(); ++i) {


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

Reply via email to