Simplifications and cleanup of range analysis code.

Landing two patches contributed by Andy Wingo:

http://codereview.chromium.org/7514040/ and

http://codereview.chromium.org/7516001/
Review URL: http://codereview.chromium.org/7520022

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@8753 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 1cad334d
...@@ -481,7 +481,6 @@ void HValue::RegisterUse(int index, HValue* new_value) { ...@@ -481,7 +481,6 @@ void HValue::RegisterUse(int index, HValue* new_value) {
void HValue::AddNewRange(Range* r) { void HValue::AddNewRange(Range* r) {
if (!HasRange()) ComputeInitialRange(); if (!HasRange()) ComputeInitialRange();
if (!HasRange()) range_ = new Range();
ASSERT(HasRange()); ASSERT(HasRange());
r->StackUpon(range_); r->StackUpon(range_);
range_ = r; range_ = r;
...@@ -862,27 +861,22 @@ void HInstanceOf::PrintDataTo(StringStream* stream) { ...@@ -862,27 +861,22 @@ void HInstanceOf::PrintDataTo(StringStream* stream) {
Range* HValue::InferRange() { Range* HValue::InferRange() {
if (representation().IsTagged()) { if (representation().IsInteger32 ()) {
// Tagged values are always in int32 range when converted to integer, // Untagged integer32 cannot be -0.
// but they can contain -0. return new Range ();
} else {
// Tagged values, untagged doubles, and values with unknown representation
// can contain -0.
Range* result = new Range(); Range* result = new Range();
result->set_can_be_minus_zero(true); result->set_can_be_minus_zero(true);
return result; 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() { Range* HConstant::InferRange() {
if (has_int32_value_) { if (has_int32_value_) {
Range* result = new Range(int32_value_, int32_value_); return new Range(int32_value_, int32_value_);
result->set_can_be_minus_zero(false);
return result;
} }
return HValue::InferRange(); return HValue::InferRange();
} }
...@@ -891,8 +885,7 @@ Range* HConstant::InferRange() { ...@@ -891,8 +885,7 @@ Range* HConstant::InferRange() {
Range* HPhi::InferRange() { Range* HPhi::InferRange() {
if (representation().IsInteger32()) { if (representation().IsInteger32()) {
if (block()->IsLoopHeader()) { if (block()->IsLoopHeader()) {
Range* range = new Range(kMinInt, kMaxInt); return new Range();
return range;
} else { } else {
Range* range = OperandAt(0)->range()->Copy(); Range* range = OperandAt(0)->range()->Copy();
for (int i = 1; i < OperandCount(); ++i) { for (int i = 1; i < OperandCount(); ++i) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment