Merge V8 5.3.332.45. DO NOT MERGE
Test: Manual
FPIIM-449
Change-Id: Id3254828b068abdea3cb10442e0172a8c9a98e03
(cherry picked from commit 13e2dadd00298019ed862f2b2fc5068bba730bcf)
diff --git a/src/compiler/js-intrinsic-lowering.cc b/src/compiler/js-intrinsic-lowering.cc
index 70bcda5..8d24013 100644
--- a/src/compiler/js-intrinsic-lowering.cc
+++ b/src/compiler/js-intrinsic-lowering.cc
@@ -30,8 +30,6 @@
Runtime::FunctionForId(CallRuntimeParametersOf(node->op()).id());
if (f->intrinsic_type != Runtime::IntrinsicType::INLINE) return NoChange();
switch (f->function_id) {
- case Runtime::kInlineConstructDouble:
- return ReduceConstructDouble(node);
case Runtime::kInlineCreateIterResultObject:
return ReduceCreateIterResultObject(node);
case Runtime::kInlineDeoptimizeNow:
@@ -40,6 +38,12 @@
return ReduceDoubleHi(node);
case Runtime::kInlineDoubleLo:
return ReduceDoubleLo(node);
+ case Runtime::kInlineGeneratorClose:
+ return ReduceGeneratorClose(node);
+ case Runtime::kInlineGeneratorGetInputOrDebugPos:
+ return ReduceGeneratorGetInputOrDebugPos(node);
+ case Runtime::kInlineGeneratorGetResumeMode:
+ return ReduceGeneratorGetResumeMode(node);
case Runtime::kInlineIsArray:
return ReduceIsInstanceType(node, JS_ARRAY_TYPE);
case Runtime::kInlineIsTypedArray:
@@ -103,19 +107,6 @@
}
-Reduction JSIntrinsicLowering::ReduceConstructDouble(Node* node) {
- Node* high = NodeProperties::GetValueInput(node, 0);
- Node* low = NodeProperties::GetValueInput(node, 1);
- Node* value =
- graph()->NewNode(machine()->Float64InsertHighWord32(),
- graph()->NewNode(machine()->Float64InsertLowWord32(),
- jsgraph()->Constant(0), low),
- high);
- ReplaceWithValue(node, value);
- return Replace(value);
-}
-
-
Reduction JSIntrinsicLowering::ReduceDeoptimizeNow(Node* node) {
if (mode() != kDeoptimizationEnabled) return NoChange();
Node* const frame_state = NodeProperties::GetFrameStateInput(node, 0);
@@ -152,6 +143,39 @@
return Change(node, machine()->Float64ExtractLowWord32());
}
+Reduction JSIntrinsicLowering::ReduceGeneratorClose(Node* node) {
+ Node* const generator = NodeProperties::GetValueInput(node, 0);
+ Node* const effect = NodeProperties::GetEffectInput(node);
+ Node* const control = NodeProperties::GetControlInput(node);
+ Node* const closed = jsgraph()->Constant(JSGeneratorObject::kGeneratorClosed);
+ Node* const undefined = jsgraph()->UndefinedConstant();
+ Operator const* const op = simplified()->StoreField(
+ AccessBuilder::ForJSGeneratorObjectContinuation());
+
+ ReplaceWithValue(node, undefined, node);
+ NodeProperties::RemoveType(node);
+ return Change(node, op, generator, closed, effect, control);
+}
+
+Reduction JSIntrinsicLowering::ReduceGeneratorGetInputOrDebugPos(Node* node) {
+ Node* const generator = NodeProperties::GetValueInput(node, 0);
+ Node* const effect = NodeProperties::GetEffectInput(node);
+ Node* const control = NodeProperties::GetControlInput(node);
+ Operator const* const op = simplified()->LoadField(
+ AccessBuilder::ForJSGeneratorObjectInputOrDebugPos());
+
+ return Change(node, op, generator, effect, control);
+}
+
+Reduction JSIntrinsicLowering::ReduceGeneratorGetResumeMode(Node* node) {
+ Node* const generator = NodeProperties::GetValueInput(node, 0);
+ Node* const effect = NodeProperties::GetEffectInput(node);
+ Node* const control = NodeProperties::GetControlInput(node);
+ Operator const* const op =
+ simplified()->LoadField(AccessBuilder::ForJSGeneratorObjectResumeMode());
+
+ return Change(node, op, generator, effect, control);
+}
Reduction JSIntrinsicLowering::ReduceIsInstanceType(
Node* node, InstanceType instance_type) {