| Index: src/hydrogen-instructions.cc
|
| diff --git a/src/hydrogen-instructions.cc b/src/hydrogen-instructions.cc
|
| index ea32f9609710d9f615671ce2f065cca0b7377c73..53f395344148c0c40996b134c71134b15405a61e 100644
|
| --- a/src/hydrogen-instructions.cc
|
| +++ b/src/hydrogen-instructions.cc
|
| @@ -1696,14 +1696,6 @@ void HCheckFunction::PrintDataTo(StringStream* stream) {
|
| }
|
|
|
|
|
| -HValue* HCheckFunction::Canonicalize() {
|
| - return (value()->IsConstant() &&
|
| - HConstant::cast(value())->UniqueValueIdsMatch(target_unique_id_))
|
| - ? NULL
|
| - : this;
|
| -}
|
| -
|
| -
|
| const char* HCheckInstanceType::GetCheckName() {
|
| switch (check_) {
|
| case IS_SPEC_OBJECT: return "object";
|
| @@ -1751,9 +1743,10 @@ Range* HValue::InferRange(Zone* zone) {
|
| result = new(zone) Range(Smi::kMinValue, Smi::kMaxValue);
|
| result->set_can_be_minus_zero(false);
|
| } else {
|
| - // Untagged integer32 cannot be -0, all other representations can.
|
| result = new(zone) Range();
|
| - result->set_can_be_minus_zero(!representation().IsInteger32());
|
| + result->set_can_be_minus_zero(!CheckFlag(kAllUsesTruncatingToInt32));
|
| + // TODO(jkummerow): The range cannot be minus zero when the upper type
|
| + // bound is Integer32.
|
| }
|
| return result;
|
| }
|
| @@ -1771,7 +1764,8 @@ Range* HChange::InferRange(Zone* zone) {
|
| Range* result = (input_range != NULL)
|
| ? input_range->Copy(zone)
|
| : HValue::InferRange(zone);
|
| - if (to().IsInteger32()) result->set_can_be_minus_zero(false);
|
| + result->set_can_be_minus_zero(!to().IsSmiOrInteger32() ||
|
| + !CheckFlag(kAllUsesTruncatingToInt32));
|
| return result;
|
| }
|
|
|
| @@ -1816,9 +1810,8 @@ Range* HAdd::InferRange(Zone* zone) {
|
| CheckFlag(kAllUsesTruncatingToInt32)) {
|
| ClearFlag(kCanOverflow);
|
| }
|
| - if (!CheckFlag(kAllUsesTruncatingToInt32)) {
|
| - res->set_can_be_minus_zero(a->CanBeMinusZero() && b->CanBeMinusZero());
|
| - }
|
| + res->set_can_be_minus_zero(!CheckFlag(kAllUsesTruncatingToInt32) &&
|
| + a->CanBeMinusZero() && b->CanBeMinusZero());
|
| return res;
|
| } else {
|
| return HValue::InferRange(zone);
|
| @@ -1835,9 +1828,8 @@ Range* HSub::InferRange(Zone* zone) {
|
| CheckFlag(kAllUsesTruncatingToInt32)) {
|
| ClearFlag(kCanOverflow);
|
| }
|
| - if (!CheckFlag(kAllUsesTruncatingToInt32)) {
|
| - res->set_can_be_minus_zero(a->CanBeMinusZero() && b->CanBeZero());
|
| - }
|
| + res->set_can_be_minus_zero(!CheckFlag(kAllUsesTruncatingToInt32) &&
|
| + a->CanBeMinusZero() && b->CanBeZero());
|
| return res;
|
| } else {
|
| return HValue::InferRange(zone);
|
| @@ -1856,11 +1848,9 @@ Range* HMul::InferRange(Zone* zone) {
|
| // precise and therefore not the same as converting to Double and back.
|
| ClearFlag(kCanOverflow);
|
| }
|
| - if (!CheckFlag(kAllUsesTruncatingToInt32)) {
|
| - bool m0 = (a->CanBeZero() && b->CanBeNegative()) ||
|
| - (a->CanBeNegative() && b->CanBeZero());
|
| - res->set_can_be_minus_zero(m0);
|
| - }
|
| + res->set_can_be_minus_zero(!CheckFlag(kAllUsesTruncatingToInt32) &&
|
| + ((a->CanBeZero() && b->CanBeNegative()) ||
|
| + (a->CanBeNegative() && b->CanBeZero())));
|
| return res;
|
| } else {
|
| return HValue::InferRange(zone);
|
| @@ -1873,16 +1863,9 @@ Range* HDiv::InferRange(Zone* zone) {
|
| Range* a = left()->range();
|
| Range* b = right()->range();
|
| Range* result = new(zone) Range();
|
| - if (!CheckFlag(kAllUsesTruncatingToInt32)) {
|
| - if (a->CanBeMinusZero()) {
|
| - result->set_can_be_minus_zero(true);
|
| - }
|
| -
|
| - if (a->CanBeZero() && b->CanBeNegative()) {
|
| - result->set_can_be_minus_zero(true);
|
| - }
|
| - }
|
| -
|
| + result->set_can_be_minus_zero(!CheckFlag(kAllUsesTruncatingToInt32) &&
|
| + (a->CanBeMinusZero() ||
|
| + (a->CanBeZero() && b->CanBeNegative())));
|
| if (!a->Includes(kMinInt) || !b->Includes(-1)) {
|
| ClearFlag(HValue::kCanOverflow);
|
| }
|
| @@ -1912,9 +1895,8 @@ Range* HMod::InferRange(Zone* zone) {
|
| Range* result = new(zone) Range(left_can_be_negative ? -positive_bound : 0,
|
| a->CanBePositive() ? positive_bound : 0);
|
|
|
| - if (left_can_be_negative && !CheckFlag(kAllUsesTruncatingToInt32)) {
|
| - result->set_can_be_minus_zero(true);
|
| - }
|
| + result->set_can_be_minus_zero(!CheckFlag(kAllUsesTruncatingToInt32) &&
|
| + left_can_be_negative);
|
|
|
| if (!a->Includes(kMinInt) || !b->Includes(-1)) {
|
| ClearFlag(HValue::kCanOverflow);
|
| @@ -2464,7 +2446,9 @@ Range* HBitwise::InferRange(Zone* zone) {
|
| ? static_cast<int32_t>(-limit) : 0;
|
| return new(zone) Range(min, static_cast<int32_t>(limit - 1));
|
| }
|
| - return HValue::InferRange(zone);
|
| + Range* result = HValue::InferRange(zone);
|
| + result->set_can_be_minus_zero(false);
|
| + return result;
|
| }
|
| const int32_t kDefaultMask = static_cast<int32_t>(0xffffffff);
|
| int32_t left_mask = (left()->range() != NULL)
|
| @@ -2476,9 +2460,11 @@ Range* HBitwise::InferRange(Zone* zone) {
|
| int32_t result_mask = (op() == Token::BIT_AND)
|
| ? left_mask & right_mask
|
| : left_mask | right_mask;
|
| - return (result_mask >= 0)
|
| - ? new(zone) Range(0, result_mask)
|
| - : HValue::InferRange(zone);
|
| + if (result_mask >= 0) return new(zone) Range(0, result_mask);
|
| +
|
| + Range* result = HValue::InferRange(zone);
|
| + result->set_can_be_minus_zero(false);
|
| + return result;
|
| }
|
|
|
|
|
| @@ -2490,7 +2476,6 @@ Range* HSar::InferRange(Zone* zone) {
|
| ? left()->range()->Copy(zone)
|
| : new(zone) Range();
|
| result->Sar(c->Integer32Value());
|
| - result->set_can_be_minus_zero(false);
|
| return result;
|
| }
|
| }
|
| @@ -2515,7 +2500,6 @@ Range* HShr::InferRange(Zone* zone) {
|
| ? left()->range()->Copy(zone)
|
| : new(zone) Range();
|
| result->Sar(c->Integer32Value());
|
| - result->set_can_be_minus_zero(false);
|
| return result;
|
| }
|
| }
|
| @@ -2532,7 +2516,6 @@ Range* HShl::InferRange(Zone* zone) {
|
| ? left()->range()->Copy(zone)
|
| : new(zone) Range();
|
| result->Shl(c->Integer32Value());
|
| - result->set_can_be_minus_zero(false);
|
| return result;
|
| }
|
| }
|
| @@ -3145,11 +3128,6 @@ HType HInstanceOf::CalculateInferredType() {
|
| }
|
|
|
|
|
| -HType HDeleteProperty::CalculateInferredType() {
|
| - return HType::Boolean();
|
| -}
|
| -
|
| -
|
| HType HInstanceOfKnownGlobal::CalculateInferredType() {
|
| return HType::Boolean();
|
| }
|
| @@ -3666,13 +3644,6 @@ HInstruction* HShr::New(
|
| #undef H_CONSTANT_DOUBLE
|
|
|
|
|
| -void HIn::PrintDataTo(StringStream* stream) {
|
| - key()->PrintNameTo(stream);
|
| - stream->Add(" ");
|
| - object()->PrintNameTo(stream);
|
| -}
|
| -
|
| -
|
| void HBitwise::PrintDataTo(StringStream* stream) {
|
| stream->Add(Token::Name(op_));
|
| stream->Add(" ");
|
|
|