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/compiler/js-intrinsic-lowering.cc b/src/compiler/js-intrinsic-lowering.cc
index ca5cb93..abeb110 100644
--- a/src/compiler/js-intrinsic-lowering.cc
+++ b/src/compiler/js-intrinsic-lowering.cc
@@ -49,20 +49,14 @@
return ReduceIncrementStatsCounter(node);
case Runtime::kInlineIsArray:
return ReduceIsInstanceType(node, JS_ARRAY_TYPE);
- case Runtime::kInlineIsDate:
- return ReduceIsInstanceType(node, JS_DATE_TYPE);
case Runtime::kInlineIsTypedArray:
return ReduceIsInstanceType(node, JS_TYPED_ARRAY_TYPE);
- case Runtime::kInlineIsFunction:
- return ReduceIsFunction(node);
case Runtime::kInlineIsRegExp:
return ReduceIsInstanceType(node, JS_REGEXP_TYPE);
case Runtime::kInlineIsJSReceiver:
return ReduceIsJSReceiver(node);
case Runtime::kInlineIsSmi:
return ReduceIsSmi(node);
- case Runtime::kInlineJSValueGetValue:
- return ReduceJSValueGetValue(node);
case Runtime::kInlineMathClz32:
return ReduceMathClz32(node);
case Runtime::kInlineMathFloor:
@@ -71,8 +65,6 @@
return ReduceMathSqrt(node);
case Runtime::kInlineValueOf:
return ReduceValueOf(node);
- case Runtime::kInlineIsMinusZero:
- return ReduceIsMinusZero(node);
case Runtime::kInlineFixedArrayGet:
return ReduceFixedArrayGet(node);
case Runtime::kInlineFixedArraySet:
@@ -148,6 +140,7 @@
graph()->NewNode(common()->Deoptimize(DeoptimizeKind::kEager),
frame_state, effect, control);
NodeProperties::MergeControlToEnd(graph(), common(), deoptimize);
+ Revisit(graph()->end());
node->TrimInputCount(0);
NodeProperties::ChangeOp(node, common()->Dead());
@@ -229,89 +222,8 @@
}
-Reduction JSIntrinsicLowering::ReduceIsFunction(Node* node) {
- Node* value = NodeProperties::GetValueInput(node, 0);
- Type* value_type = NodeProperties::GetType(value);
- Node* effect = NodeProperties::GetEffectInput(node);
- Node* control = NodeProperties::GetControlInput(node);
- if (value_type->Is(Type::Function())) {
- value = jsgraph()->TrueConstant();
- } else {
- // if (%_IsSmi(value)) {
- // return false;
- // } else {
- // return FIRST_FUNCTION_TYPE <= %_GetInstanceType(%_GetMap(value))
- // }
- STATIC_ASSERT(LAST_TYPE == LAST_FUNCTION_TYPE);
-
- Node* check = graph()->NewNode(simplified()->ObjectIsSmi(), value);
- Node* branch = graph()->NewNode(common()->Branch(), check, control);
-
- Node* if_true = graph()->NewNode(common()->IfTrue(), branch);
- Node* etrue = effect;
- Node* vtrue = jsgraph()->FalseConstant();
-
- Node* if_false = graph()->NewNode(common()->IfFalse(), branch);
- Node* efalse = graph()->NewNode(
- simplified()->LoadField(AccessBuilder::ForMapInstanceType()),
- graph()->NewNode(simplified()->LoadField(AccessBuilder::ForMap()),
- value, effect, if_false),
- effect, if_false);
- Node* vfalse =
- graph()->NewNode(machine()->Uint32LessThanOrEqual(),
- jsgraph()->Int32Constant(FIRST_FUNCTION_TYPE), efalse);
-
- control = graph()->NewNode(common()->Merge(2), if_true, if_false);
- effect = graph()->NewNode(common()->EffectPhi(2), etrue, efalse, control);
- value = graph()->NewNode(common()->Phi(MachineRepresentation::kTagged, 2),
- vtrue, vfalse, control);
- }
- ReplaceWithValue(node, node, effect, control);
- return Replace(value);
-}
-
-
Reduction JSIntrinsicLowering::ReduceIsJSReceiver(Node* node) {
- Node* value = NodeProperties::GetValueInput(node, 0);
- Type* value_type = NodeProperties::GetType(value);
- Node* effect = NodeProperties::GetEffectInput(node);
- Node* control = NodeProperties::GetControlInput(node);
- if (value_type->Is(Type::Receiver())) {
- value = jsgraph()->TrueConstant();
- } else if (!value_type->Maybe(Type::Receiver())) {
- value = jsgraph()->FalseConstant();
- } else {
- // if (%_IsSmi(value)) {
- // return false;
- // } else {
- // return FIRST_JS_RECEIVER_TYPE <= %_GetInstanceType(%_GetMap(value))
- // }
- STATIC_ASSERT(LAST_TYPE == LAST_JS_RECEIVER_TYPE);
-
- Node* check = graph()->NewNode(simplified()->ObjectIsSmi(), value);
- Node* branch = graph()->NewNode(common()->Branch(), check, control);
-
- Node* if_true = graph()->NewNode(common()->IfTrue(), branch);
- Node* etrue = effect;
- Node* vtrue = jsgraph()->FalseConstant();
-
- Node* if_false = graph()->NewNode(common()->IfFalse(), branch);
- Node* efalse = graph()->NewNode(
- simplified()->LoadField(AccessBuilder::ForMapInstanceType()),
- graph()->NewNode(simplified()->LoadField(AccessBuilder::ForMap()),
- value, effect, if_false),
- effect, if_false);
- Node* vfalse = graph()->NewNode(
- machine()->Uint32LessThanOrEqual(),
- jsgraph()->Int32Constant(FIRST_JS_RECEIVER_TYPE), efalse);
-
- control = graph()->NewNode(common()->Merge(2), if_true, if_false);
- effect = graph()->NewNode(common()->EffectPhi(2), etrue, efalse, control);
- value = graph()->NewNode(common()->Phi(MachineRepresentation::kTagged, 2),
- vtrue, vfalse, control);
- }
- ReplaceWithValue(node, node, effect, control);
- return Replace(value);
+ return Change(node, simplified()->ObjectIsReceiver());
}
@@ -320,15 +232,6 @@
}
-Reduction JSIntrinsicLowering::ReduceJSValueGetValue(Node* node) {
- Node* value = NodeProperties::GetValueInput(node, 0);
- Node* effect = NodeProperties::GetEffectInput(node);
- Node* control = NodeProperties::GetControlInput(node);
- return Change(node, simplified()->LoadField(AccessBuilder::ForValue()), value,
- effect, control);
-}
-
-
Reduction JSIntrinsicLowering::ReduceMathClz32(Node* node) {
return Change(node, machine()->Word32Clz());
}
@@ -420,30 +323,6 @@
}
-Reduction JSIntrinsicLowering::ReduceIsMinusZero(Node* node) {
- Node* value = NodeProperties::GetValueInput(node, 0);
- Node* effect = NodeProperties::GetEffectInput(node);
-
- Node* double_lo =
- graph()->NewNode(machine()->Float64ExtractLowWord32(), value);
- Node* check1 = graph()->NewNode(machine()->Word32Equal(), double_lo,
- jsgraph()->ZeroConstant());
-
- Node* double_hi =
- graph()->NewNode(machine()->Float64ExtractHighWord32(), value);
- Node* check2 = graph()->NewNode(
- machine()->Word32Equal(), double_hi,
- jsgraph()->Int32Constant(static_cast<int32_t>(0x80000000)));
-
- ReplaceWithValue(node, node, effect);
-
- Node* and_result = graph()->NewNode(machine()->Word32And(), check1, check2);
-
- return Change(node, machine()->Word32Equal(), and_result,
- jsgraph()->Int32Constant(1));
-}
-
-
Reduction JSIntrinsicLowering::ReduceFixedArrayGet(Node* node) {
Node* base = node->InputAt(0);
Node* index = node->InputAt(1);
@@ -507,12 +386,43 @@
Reduction JSIntrinsicLowering::ReduceToInteger(Node* node) {
Node* value = NodeProperties::GetValueInput(node, 0);
+ Node* context = NodeProperties::GetContextInput(node);
+ Node* frame_state = NodeProperties::GetFrameStateInput(node, 0);
+ Node* effect = NodeProperties::GetEffectInput(node);
+ Node* control = NodeProperties::GetControlInput(node);
+
+ // ToInteger is a no-op on integer values and -0.
Type* value_type = NodeProperties::GetType(value);
if (value_type->Is(type_cache().kIntegerOrMinusZero)) {
ReplaceWithValue(node, value);
return Replace(value);
}
- return NoChange();
+
+ Node* check = graph()->NewNode(simplified()->ObjectIsSmi(), value);
+ Node* branch =
+ graph()->NewNode(common()->Branch(BranchHint::kTrue), check, control);
+
+ Node* if_true = graph()->NewNode(common()->IfTrue(), branch);
+ Node* etrue = effect;
+ Node* vtrue = value;
+
+ Node* if_false = graph()->NewNode(common()->IfFalse(), branch);
+ Node* efalse = effect;
+ Node* vfalse;
+ {
+ vfalse = efalse =
+ graph()->NewNode(javascript()->CallRuntime(Runtime::kToInteger), value,
+ context, frame_state, efalse, if_false);
+ if_false = graph()->NewNode(common()->IfSuccess(), vfalse);
+ }
+
+ control = graph()->NewNode(common()->Merge(2), if_true, if_false);
+ effect = graph()->NewNode(common()->EffectPhi(2), etrue, efalse, control);
+ value = graph()->NewNode(common()->Phi(MachineRepresentation::kTagged, 2),
+ vtrue, vfalse, control);
+ // TODO(bmeurer, mstarzinger): Rewire IfException inputs to {vfalse}.
+ ReplaceWithValue(node, value, effect, control);
+ return Changed(value);
}
@@ -589,20 +499,20 @@
Reduction JSIntrinsicLowering::ReduceCall(Node* node) {
size_t const arity = CallRuntimeParametersOf(node->op()).arity();
- NodeProperties::ChangeOp(
- node, javascript()->CallFunction(arity, STRICT, VectorSlotPair(),
- ConvertReceiverMode::kAny,
- TailCallMode::kDisallow));
+ NodeProperties::ChangeOp(node,
+ javascript()->CallFunction(arity, VectorSlotPair(),
+ ConvertReceiverMode::kAny,
+ TailCallMode::kDisallow));
return Changed(node);
}
Reduction JSIntrinsicLowering::ReduceTailCall(Node* node) {
size_t const arity = CallRuntimeParametersOf(node->op()).arity();
- NodeProperties::ChangeOp(
- node, javascript()->CallFunction(arity, STRICT, VectorSlotPair(),
- ConvertReceiverMode::kAny,
- TailCallMode::kAllow));
+ NodeProperties::ChangeOp(node,
+ javascript()->CallFunction(arity, VectorSlotPair(),
+ ConvertReceiverMode::kAny,
+ TailCallMode::kAllow));
return Changed(node);
}