Revert "[turbofan] Weakening of types must weaken ranges inside unions."
This reverts commit 4c1f4b796d
.
TBR=rossberg@chromium.org
Review URL: https://codereview.chromium.org/722943003
Cr-Commit-Position: refs/heads/master@{#25312}
This commit is contained in:
parent
4c1f4b796d
commit
c513297f9f
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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>();
|
||||
|
@ -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();
|
Loading…
Reference in New Issue
Block a user