Revert "Revert "Upgrade to 5.0.71.48"" DO NOT MERGE
This reverts commit f2e3994fa5148cc3d9946666f0b0596290192b0e,
and updates the x64 makefile properly so it doesn't break that
build.
FPIIM-449
Change-Id: Ib83e35bfbae6af627451c926a9650ec57c045605
(cherry picked from commit 109988c7ccb6f3fd1a58574fa3dfb88beaef6632)
diff --git a/src/crankshaft/hydrogen-instructions.cc b/src/crankshaft/hydrogen-instructions.cc
index e2e026f..a9c6228 100644
--- a/src/crankshaft/hydrogen-instructions.cc
+++ b/src/crankshaft/hydrogen-instructions.cc
@@ -765,7 +765,6 @@
bool HInstruction::CanDeoptimize() {
- // TODO(titzer): make this a virtual method?
switch (opcode()) {
case HValue::kAbnormalExit:
case HValue::kAccessArgumentsAt:
@@ -777,13 +776,11 @@
case HValue::kBoundsCheckBaseIndexInformation:
case HValue::kCallFunction:
case HValue::kCallNewArray:
- case HValue::kCallStub:
case HValue::kCapturedObject:
case HValue::kClassOfTestAndBranch:
case HValue::kCompareGeneric:
case HValue::kCompareHoleAndBranch:
case HValue::kCompareMap:
- case HValue::kCompareMinusZeroAndBranch:
case HValue::kCompareNumericAndBranch:
case HValue::kCompareObjectEqAndBranch:
case HValue::kConstant:
@@ -811,7 +808,6 @@
case HValue::kLoadNamedField:
case HValue::kLoadNamedGeneric:
case HValue::kLoadRoot:
- case HValue::kMapEnumLength:
case HValue::kMathMinMax:
case HValue::kParameter:
case HValue::kPhi:
@@ -832,7 +828,6 @@
return false;
case HValue::kAdd:
- case HValue::kAllocateBlockContext:
case HValue::kApplyArguments:
case HValue::kBitwise:
case HValue::kBoundsCheck:
@@ -1107,12 +1102,6 @@
}
-std::ostream& HAllocateBlockContext::PrintDataTo(
- std::ostream& os) const { // NOLINT
- return os << NameOf(context()) << " " << NameOf(function());
-}
-
-
std::ostream& HControlInstruction::PrintDataTo(
std::ostream& os) const { // NOLINT
os << " goto (";
@@ -1428,12 +1417,12 @@
// static
HInstruction* HAdd::New(Isolate* isolate, Zone* zone, HValue* context,
- HValue* left, HValue* right, Strength strength,
+ HValue* left, HValue* right,
ExternalAddType external_add_type) {
// For everything else, you should use the other factory method without
// ExternalAddType.
DCHECK_EQ(external_add_type, AddOfExternalAndTagged);
- return new (zone) HAdd(context, left, right, strength, external_add_type);
+ return new (zone) HAdd(context, left, right, external_add_type);
}
@@ -1733,12 +1722,6 @@
}
-std::ostream& HCallStub::PrintDataTo(std::ostream& os) const { // NOLINT
- os << CodeStub::MajorName(major_key_) << " ";
- return HUnaryCall::PrintDataTo(os);
-}
-
-
std::ostream& HUnknownOSRValue::PrintDataTo(std::ostream& os) const { // NOLINT
const char* type = "expression";
if (environment_->is_local_index(index_)) type = "local";
@@ -2733,7 +2716,6 @@
bit_field_, has_int32_value && Smi::IsValid(int32_value_));
double_value_ = n;
bit_field_ = HasDoubleValueField::update(bit_field_, true);
- // TODO(titzer): if this heap number is new space, tenure a new one.
}
Initialize(r);
@@ -2906,7 +2888,6 @@
DCHECK(IsLinked());
if (block()->graph()->has_osr() &&
block()->graph()->IsStandardConstant(this)) {
- // TODO(titzer): this seems like a hack that should be fixed by custom OSR.
return true;
}
if (HasNoUses()) return true;
@@ -2963,6 +2944,8 @@
res = new (zone) HConstant(std::numeric_limits<double>::quiet_NaN());
} else if (handle->IsNull()) {
res = new(zone) HConstant(0);
+ } else if (handle->IsString()) {
+ res = new(zone) HConstant(String::ToNumber(Handle<String>::cast(handle)));
}
return res != NULL ? Just(res) : Nothing<HConstant*>();
}
@@ -3327,31 +3310,6 @@
}
-bool HCompareMinusZeroAndBranch::KnownSuccessorBlock(HBasicBlock** block) {
- if (FLAG_fold_constants && value()->IsConstant()) {
- HConstant* constant = HConstant::cast(value());
- if (constant->HasDoubleValue()) {
- *block = IsMinusZero(constant->DoubleValue())
- ? FirstSuccessor() : SecondSuccessor();
- return true;
- }
- }
- if (value()->representation().IsSmiOrInteger32()) {
- // A Smi or Integer32 cannot contain minus zero.
- *block = SecondSuccessor();
- return true;
- }
- *block = NULL;
- return false;
-}
-
-
-void HCompareMinusZeroAndBranch::InferRepresentation(
- HInferRepresentationPhase* h_infer) {
- ChangeRepresentation(value()->representation());
-}
-
-
std::ostream& HGoto::PrintDataTo(std::ostream& os) const { // NOLINT
return os << *SuccessorAt(0);
}
@@ -3388,7 +3346,7 @@
// (false). Therefore, any comparisons other than ordered relational
// comparisons must cause a deopt when one of their arguments is undefined.
// See also v8:1434
- if (Token::IsOrderedRelationalCompareOp(token_) && !is_strong(strength())) {
+ if (Token::IsOrderedRelationalCompareOp(token_)) {
SetFlag(kAllowUndefinedAsNaN);
}
}
@@ -3955,24 +3913,23 @@
#define H_CONSTANT_DOUBLE(val) \
HConstant::New(isolate, zone, context, static_cast<double>(val))
-#define DEFINE_NEW_H_SIMPLE_ARITHMETIC_INSTR(HInstr, op) \
- HInstruction* HInstr::New(Isolate* isolate, Zone* zone, HValue* context, \
- HValue* left, HValue* right, Strength strength) { \
- if (FLAG_fold_constants && left->IsConstant() && right->IsConstant()) { \
- HConstant* c_left = HConstant::cast(left); \
- HConstant* c_right = HConstant::cast(right); \
- if ((c_left->HasNumberValue() && c_right->HasNumberValue())) { \
- double double_res = c_left->DoubleValue() op c_right->DoubleValue(); \
- if (IsInt32Double(double_res)) { \
- return H_CONSTANT_INT(double_res); \
- } \
- return H_CONSTANT_DOUBLE(double_res); \
- } \
- } \
- return new (zone) HInstr(context, left, right, strength); \
+#define DEFINE_NEW_H_SIMPLE_ARITHMETIC_INSTR(HInstr, op) \
+ HInstruction* HInstr::New(Isolate* isolate, Zone* zone, HValue* context, \
+ HValue* left, HValue* right) { \
+ if (FLAG_fold_constants && left->IsConstant() && right->IsConstant()) { \
+ HConstant* c_left = HConstant::cast(left); \
+ HConstant* c_right = HConstant::cast(right); \
+ if ((c_left->HasNumberValue() && c_right->HasNumberValue())) { \
+ double double_res = c_left->DoubleValue() op c_right->DoubleValue(); \
+ if (IsInt32Double(double_res)) { \
+ return H_CONSTANT_INT(double_res); \
+ } \
+ return H_CONSTANT_DOUBLE(double_res); \
+ } \
+ } \
+ return new (zone) HInstr(context, left, right); \
}
-
DEFINE_NEW_H_SIMPLE_ARITHMETIC_INSTR(HAdd, +)
DEFINE_NEW_H_SIMPLE_ARITHMETIC_INSTR(HMul, *)
DEFINE_NEW_H_SIMPLE_ARITHMETIC_INSTR(HSub, -)
@@ -4198,9 +4155,8 @@
return new(zone) HMathMinMax(context, left, right, op);
}
-
HInstruction* HMod::New(Isolate* isolate, Zone* zone, HValue* context,
- HValue* left, HValue* right, Strength strength) {
+ HValue* left, HValue* right) {
if (FLAG_fold_constants && left->IsConstant() && right->IsConstant()) {
HConstant* c_left = HConstant::cast(left);
HConstant* c_right = HConstant::cast(right);
@@ -4219,12 +4175,11 @@
}
}
}
- return new (zone) HMod(context, left, right, strength);
+ return new (zone) HMod(context, left, right);
}
-
HInstruction* HDiv::New(Isolate* isolate, Zone* zone, HValue* context,
- HValue* left, HValue* right, Strength strength) {
+ HValue* left, HValue* right) {
// If left and right are constant values, try to return a constant value.
if (FLAG_fold_constants && left->IsConstant() && right->IsConstant()) {
HConstant* c_left = HConstant::cast(left);
@@ -4243,13 +4198,11 @@
}
}
}
- return new (zone) HDiv(context, left, right, strength);
+ return new (zone) HDiv(context, left, right);
}
-
HInstruction* HBitwise::New(Isolate* isolate, Zone* zone, HValue* context,
- Token::Value op, HValue* left, HValue* right,
- Strength strength) {
+ Token::Value op, HValue* left, HValue* right) {
if (FLAG_fold_constants && left->IsConstant() && right->IsConstant()) {
HConstant* c_left = HConstant::cast(left);
HConstant* c_right = HConstant::cast(right);
@@ -4274,24 +4227,22 @@
return H_CONSTANT_INT(result);
}
}
- return new (zone) HBitwise(context, op, left, right, strength);
+ return new (zone) HBitwise(context, op, left, right);
}
-
-#define DEFINE_NEW_H_BITWISE_INSTR(HInstr, result) \
- HInstruction* HInstr::New(Isolate* isolate, Zone* zone, HValue* context, \
- HValue* left, HValue* right, Strength strength) { \
- if (FLAG_fold_constants && left->IsConstant() && right->IsConstant()) { \
- HConstant* c_left = HConstant::cast(left); \
- HConstant* c_right = HConstant::cast(right); \
- if ((c_left->HasNumberValue() && c_right->HasNumberValue())) { \
- return H_CONSTANT_INT(result); \
- } \
- } \
- return new (zone) HInstr(context, left, right, strength); \
+#define DEFINE_NEW_H_BITWISE_INSTR(HInstr, result) \
+ HInstruction* HInstr::New(Isolate* isolate, Zone* zone, HValue* context, \
+ HValue* left, HValue* right) { \
+ if (FLAG_fold_constants && left->IsConstant() && right->IsConstant()) { \
+ HConstant* c_left = HConstant::cast(left); \
+ HConstant* c_right = HConstant::cast(right); \
+ if ((c_left->HasNumberValue() && c_right->HasNumberValue())) { \
+ return H_CONSTANT_INT(result); \
+ } \
+ } \
+ return new (zone) HInstr(context, left, right); \
}
-
DEFINE_NEW_H_BITWISE_INSTR(HSar,
c_left->NumberValueAsInteger32() >> (c_right->NumberValueAsInteger32() & 0x1f))
DEFINE_NEW_H_BITWISE_INSTR(HShl,
@@ -4299,9 +4250,8 @@
#undef DEFINE_NEW_H_BITWISE_INSTR
-
HInstruction* HShr::New(Isolate* isolate, Zone* zone, HValue* context,
- HValue* left, HValue* right, Strength strength) {
+ HValue* left, HValue* right) {
if (FLAG_fold_constants && left->IsConstant() && right->IsConstant()) {
HConstant* c_left = HConstant::cast(left);
HConstant* c_right = HConstant::cast(right);
@@ -4314,7 +4264,7 @@
return H_CONSTANT_INT(static_cast<uint32_t>(left_val) >> right_val);
}
}
- return new (zone) HShr(context, left, right, strength);
+ return new (zone) HShr(context, left, right);
}