Reviewers: rossberg,

Message:
Committed patchset #1 (id:1) manually as
c513297f9fdd1f4e6d19e0941fef55e22fb79d69 (tree was closed).

Description:
Revert "[turbofan] Weakening of types must weaken ranges inside unions."

This reverts commit 4c1f4b796d1c455fc6a023abe145a5e48c4b7b1f.

[email protected]

Committed:
https://chromium.googlesource.com/v8/v8/+/c513297f9fdd1f4e6d19e0941fef55e22fb79d69

Please review this at https://codereview.chromium.org/722943003/

Base URL: https://chromium.googlesource.com/v8/v8.git@master

Affected files (+6, -78 lines):
  M src/compiler/typer.cc
  M src/types.h
  M src/types.cc
  M test/cctest/test-types.cc
  D test/mjsunit/regress/regress-weakening-multiplication.js


Index: test/mjsunit/regress/regress-weakening-multiplication.js
diff --git a/test/mjsunit/regress/regress-weakening-multiplication.js b/test/mjsunit/regress/regress-weakening-multiplication.js
deleted file mode 100644
index dcf00114b7e46dfebb505eaeff57c484663c6fcb..0000000000000000000000000000000000000000
--- a/test/mjsunit/regress/regress-weakening-multiplication.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright 2014 the V8 project authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-function f() {
-  for (var j = 1; j < 1; j *= -8) {
-  }
-  for (var i = 1; i < 1; j += 2) {
-    j * -1;
-  }
-}
-f();
Index: src/compiler/typer.cc
diff --git a/src/compiler/typer.cc b/src/compiler/typer.cc
index 20a39d94493ff1eed1463e1a142d7cd037c90655..97b43f4aefb989ac69e732a14c3fa77b954920a9 100644
--- a/src/compiler/typer.cc
+++ b/src/compiler/typer.cc
@@ -1119,9 +1119,10 @@ Bounds Typer::Visitor::TypeJSLoadNamed(Node* node) {
 // in the graph. In the current implementation, we are
 // increasing the limits to the closest power of two.
 Type* Typer::Visitor::Weaken(Type* current_type, Type* previous_type) {
-  Type::RangeType* previous = previous_type->GetRange();
-  Type::RangeType* current = current_type->GetRange();
-  if (previous != NULL && current != NULL) {
+  if (current_type->IsRange() && previous_type->IsRange()) {
+    Type::RangeType* previous = previous_type->AsRange();
+    Type::RangeType* current = current_type->AsRange();
+
     double current_min = current->Min()->Number();
     Handle<Object> new_min = current->Min();

@@ -1151,9 +1152,7 @@ Type* Typer::Visitor::Weaken(Type* current_type, Type* previous_type) {
       }
     }

-    return Type::Union(current_type,
-                       Type::Range(new_min, new_max, typer_->zone()),
-                       typer_->zone());
+    return Type::Range(new_min, new_max, typer_->zone());
   }
   return current_type;
 }
Index: src/types.cc
diff --git a/src/types.cc b/src/types.cc
index b423beea0833e4be55865ff0e7d9fa463226afc4..d595b049d214a158cdb74056b884e1b26bd1e87e 100644
--- a/src/types.cc
+++ b/src/types.cc
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.

-#include <iomanip>
-
 #include "src/types.h"

 #include "src/ostreams.h"
@@ -1019,12 +1017,8 @@ void TypeImpl<Config>::PrintTo(std::ostream& os, PrintDimension dim) {
     } else if (this->IsConstant()) {
       os << "Constant(" << Brief(*this->AsConstant()->Value()) << ")";
     } else if (this->IsRange()) {
-      std::ostream::fmtflags saved_flags = os.setf(std::ios::fixed);
-      std::streamsize saved_precision = os.precision(0);
       os << "Range(" << this->AsRange()->Min()->Number() << ", "
          << this->AsRange()->Max()->Number() << ")";
-      os.flags(saved_flags);
-      os.precision(saved_precision);
     } else if (this->IsContext()) {
       os << "Context(";
       this->AsContext()->Outer()->PrintTo(os, dim);
Index: src/types.h
diff --git a/src/types.h b/src/types.h
index aafaf07fb5ddc054378ea7a53be68545bb2006ef..1d506d0ca2eba3a2fa898ebde2530f20d5e421ee 100644
--- a/src/types.h
+++ b/src/types.h
@@ -464,11 +464,6 @@ class TypeImpl : public Config::Base {
   double Min();
   double Max();

-  // Extracts a range from the type. If the type is a range, it just
-  // returns it; if it is a union, it returns the range component.
-  // Note that it does not contain range for constants.
-  RangeType* GetRange();
-
   int NumClasses();
   int NumConstants();

@@ -556,6 +551,7 @@ class TypeImpl : public Config::Base {
   static bool Contains(RangeType* lhs, RangeType* rhs);
   static bool Contains(RangeType* range, i::Object* val);

+  RangeType* GetRange();
   static int UpdateRange(
       RangeHandle type, UnionHandle result, int size, Region* region);

Index: test/cctest/test-types.cc
diff --git a/test/cctest/test-types.cc b/test/cctest/test-types.cc
index ad4660735928e384b7b986d9d5f8c2f5d8e3e2f9..e564c6c0808ab20f29d0fde37b12380d55343dcf 100644
--- a/test/cctest/test-types.cc
+++ b/test/cctest/test-types.cc
@@ -1831,48 +1831,6 @@ struct Tests : Rep {
     */
   }

-  TypeHandle RangeToHandle(typename Type::RangeType* range) {
-    return T.Range(range->Min(), range->Max());
-  }
-
-  void GetRange() {
-    // GetRange(Range(a, b)) = Range(a, b).
-    for (TypeIterator it1 = T.types.begin(); it1 != T.types.end(); ++it1) {
-      TypeHandle type1 = *it1;
-      if (type1->IsRange()) {
-        typename Type::RangeType* range = type1->GetRange();
-        CHECK(type1->Equals(RangeToHandle(range)));
-      }
-    }
-
-    // GetRange(Union(Constant(x), Range(min,max))) == Range(min, max).
-    for (TypeIterator it1 = T.types.begin(); it1 != T.types.end(); ++it1) {
- for (TypeIterator it2 = T.types.begin(); it2 != T.types.end(); ++it2) {
-        TypeHandle type1 = *it1;
-        TypeHandle type2 = *it2;
-        if (type1->IsConstant() && type2->IsRange()) {
-          TypeHandle u = T.Union(type1, type2);
-
-          CHECK(type2->Equals(RangeToHandle(u->GetRange())));
-        }
-      }
-    }
-
-    // GetRange is monotone whenever it is defined.
-    for (TypeIterator it1 = T.types.begin(); it1 != T.types.end(); ++it1) {
- for (TypeIterator it2 = T.types.begin(); it2 != T.types.end(); ++it2) {
-        TypeHandle type1 = *it1;
-        TypeHandle type2 = *it2;
-        if (type1->GetRange() != NULL && type2->GetRange() != NULL &&
-            type1->Is(type2)) {
-          TypeHandle r1 = RangeToHandle(type1->GetRange());
-          TypeHandle r2 = RangeToHandle(type2->GetRange());
-          CHECK(r1->Is(r2));
-        }
-      }
-    }
-  }
-
   template<class Type2, class TypeHandle2, class Region2, class Rep2>
   void Convert() {
     Types<Type2, TypeHandle2, Region2> T2(
@@ -2072,13 +2030,6 @@ TEST(Distributivity) {
 }


-TEST(GetRange) {
-  CcTest::InitializeVM();
-  ZoneTests().GetRange();
-  HeapTests().GetRange();
-}
-
-
 TEST(Convert) {
   CcTest::InitializeVM();
   ZoneTests().Convert<HeapType, Handle<HeapType>, Isolate, HeapRep>();


--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to