summaryrefslogtreecommitdiff
path: root/deps/v8/src/compiler/js-intrinsic-lowering.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/compiler/js-intrinsic-lowering.cc')
-rw-r--r--deps/v8/src/compiler/js-intrinsic-lowering.cc198
1 files changed, 40 insertions, 158 deletions
diff --git a/deps/v8/src/compiler/js-intrinsic-lowering.cc b/deps/v8/src/compiler/js-intrinsic-lowering.cc
index 034ee6fd76..3324508559 100644
--- a/deps/v8/src/compiler/js-intrinsic-lowering.cc
+++ b/deps/v8/src/compiler/js-intrinsic-lowering.cc
@@ -30,16 +30,16 @@ Reduction JSIntrinsicLowering::Reduce(Node* node) {
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:
return ReduceDeoptimizeNow(node);
- case Runtime::kInlineDoubleHi:
- 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:
@@ -50,8 +50,6 @@ Reduction JSIntrinsicLowering::Reduce(Node* node) {
return ReduceIsJSReceiver(node);
case Runtime::kInlineIsSmi:
return ReduceIsSmi(node);
- case Runtime::kInlineValueOf:
- return ReduceValueOf(node);
case Runtime::kInlineFixedArrayGet:
return ReduceFixedArrayGet(node);
case Runtime::kInlineFixedArraySet:
@@ -70,14 +68,10 @@ Reduction JSIntrinsicLowering::Reduce(Node* node) {
return ReduceToInteger(node);
case Runtime::kInlineToLength:
return ReduceToLength(node);
- case Runtime::kInlineToName:
- return ReduceToName(node);
case Runtime::kInlineToNumber:
return ReduceToNumber(node);
case Runtime::kInlineToObject:
return ReduceToObject(node);
- case Runtime::kInlineToPrimitive:
- return ReduceToPrimitive(node);
case Runtime::kInlineToString:
return ReduceToString(node);
case Runtime::kInlineCall:
@@ -86,8 +80,6 @@ Reduction JSIntrinsicLowering::Reduce(Node* node) {
return ReduceNewObject(node);
case Runtime::kInlineGetSuperConstructor:
return ReduceGetSuperConstructor(node);
- case Runtime::kInlineGetOrdinaryHasInstance:
- return ReduceGetOrdinaryHasInstance(node);
default:
break;
}
@@ -105,29 +97,16 @@ Reduction JSIntrinsicLowering::ReduceCreateIterResultObject(Node* node) {
}
-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);
+ Node* const frame_state = NodeProperties::GetFrameStateInput(node);
Node* const effect = NodeProperties::GetEffectInput(node);
Node* const control = NodeProperties::GetControlInput(node);
// TODO(bmeurer): Move MergeControlToEnd() to the AdvancedReducer.
- Node* deoptimize =
- graph()->NewNode(common()->Deoptimize(DeoptimizeKind::kEager),
- frame_state, effect, control);
+ Node* deoptimize = graph()->NewNode(
+ common()->Deoptimize(DeoptimizeKind::kEager, DeoptimizeReason::kNoReason),
+ frame_state, effect, control);
NodeProperties::MergeControlToEnd(graph(), common(), deoptimize);
Revisit(graph()->end());
@@ -136,24 +115,39 @@ Reduction JSIntrinsicLowering::ReduceDeoptimizeNow(Node* node) {
return Changed(node);
}
+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());
-Reduction JSIntrinsicLowering::ReduceDoubleHi(Node* node) {
- // Tell the compiler to assume number input.
- Node* renamed = graph()->NewNode(common()->Guard(Type::Number()),
- node->InputAt(0), graph()->start());
- node->ReplaceInput(0, renamed);
- return Change(node, machine()->Float64ExtractHighWord32());
+ 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());
-Reduction JSIntrinsicLowering::ReduceDoubleLo(Node* node) {
- // Tell the compiler to assume number input.
- Node* renamed = graph()->NewNode(common()->Guard(Type::Number()),
- node->InputAt(0), graph()->start());
- node->ReplaceInput(0, renamed);
- return Change(node, machine()->Float64ExtractLowWord32());
+ 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) {
@@ -179,8 +173,8 @@ Reduction JSIntrinsicLowering::ReduceIsInstanceType(
graph()->NewNode(simplified()->LoadField(AccessBuilder::ForMap()), value,
effect, if_false),
effect, if_false);
- Node* vfalse = graph()->NewNode(machine()->Word32Equal(), efalse,
- jsgraph()->Int32Constant(instance_type));
+ Node* vfalse = graph()->NewNode(simplified()->NumberEqual(), efalse,
+ jsgraph()->Constant(instance_type));
Node* merge = graph()->NewNode(common()->Merge(2), if_true, if_false);
@@ -204,70 +198,6 @@ Reduction JSIntrinsicLowering::ReduceIsSmi(Node* node) {
}
-Reduction JSIntrinsicLowering::ReduceValueOf(Node* node) {
- // if (%_IsSmi(value)) {
- // return value;
- // } else if (%_GetInstanceType(%_GetMap(value)) == JS_VALUE_TYPE) {
- // return %_GetValue(value);
- // } else {
- // return value;
- // }
- const Operator* const merge_op = common()->Merge(2);
- const Operator* const ephi_op = common()->EffectPhi(2);
- const Operator* const phi_op =
- common()->Phi(MachineRepresentation::kTagged, 2);
-
- Node* value = NodeProperties::GetValueInput(node, 0);
- Node* effect = NodeProperties::GetEffectInput(node);
- Node* control = NodeProperties::GetControlInput(node);
-
- Node* check0 = graph()->NewNode(simplified()->ObjectIsSmi(), value);
- Node* branch0 = graph()->NewNode(common()->Branch(), check0, control);
-
- Node* if_true0 = graph()->NewNode(common()->IfTrue(), branch0);
- Node* etrue0 = effect;
- Node* vtrue0 = value;
-
- Node* if_false0 = graph()->NewNode(common()->IfFalse(), branch0);
- Node* efalse0;
- Node* vfalse0;
- {
- Node* check1 = graph()->NewNode(
- machine()->Word32Equal(),
- graph()->NewNode(
- simplified()->LoadField(AccessBuilder::ForMapInstanceType()),
- graph()->NewNode(simplified()->LoadField(AccessBuilder::ForMap()),
- value, effect, if_false0),
- effect, if_false0),
- jsgraph()->Int32Constant(JS_VALUE_TYPE));
- Node* branch1 = graph()->NewNode(common()->Branch(), check1, if_false0);
-
- Node* if_true1 = graph()->NewNode(common()->IfTrue(), branch1);
- Node* etrue1 =
- graph()->NewNode(simplified()->LoadField(AccessBuilder::ForValue()),
- value, effect, if_true1);
- Node* vtrue1 = etrue1;
-
- Node* if_false1 = graph()->NewNode(common()->IfFalse(), branch1);
- Node* efalse1 = effect;
- Node* vfalse1 = value;
-
- Node* merge1 = graph()->NewNode(merge_op, if_true1, if_false1);
- efalse0 = graph()->NewNode(ephi_op, etrue1, efalse1, merge1);
- vfalse0 = graph()->NewNode(phi_op, vtrue1, vfalse1, merge1);
- }
-
- Node* merge0 = graph()->NewNode(merge_op, if_true0, if_false0);
-
- // Replace all effect uses of {node} with the {ephi0}.
- Node* ephi0 = graph()->NewNode(ephi_op, etrue0, efalse0, merge0);
- ReplaceWithValue(node, node, ephi0);
-
- // Turn the {node} into a Phi.
- return Change(node, phi_op, vtrue0, vfalse0, merge0);
-}
-
-
Reduction JSIntrinsicLowering::Change(Node* node, const Operator* op) {
// Replace all effect uses of {node} with the effect dependency.
RelaxEffectsAndControls(node);
@@ -346,12 +276,6 @@ Reduction JSIntrinsicLowering::ReduceToInteger(Node* node) {
}
-Reduction JSIntrinsicLowering::ReduceToName(Node* node) {
- NodeProperties::ChangeOp(node, javascript()->ToName());
- return Changed(node);
-}
-
-
Reduction JSIntrinsicLowering::ReduceToNumber(Node* node) {
NodeProperties::ChangeOp(node, javascript()->ToNumber());
return Changed(node);
@@ -370,17 +294,6 @@ Reduction JSIntrinsicLowering::ReduceToObject(Node* node) {
}
-Reduction JSIntrinsicLowering::ReduceToPrimitive(Node* node) {
- Node* value = NodeProperties::GetValueInput(node, 0);
- Type* value_type = NodeProperties::GetType(value);
- if (value_type->Is(Type::Primitive())) {
- ReplaceWithValue(node, value);
- return Replace(value);
- }
- return NoChange();
-}
-
-
Reduction JSIntrinsicLowering::ReduceToString(Node* node) {
NodeProperties::ChangeOp(node, javascript()->ToString());
return Changed(node);
@@ -397,15 +310,7 @@ Reduction JSIntrinsicLowering::ReduceCall(Node* node) {
}
Reduction JSIntrinsicLowering::ReduceNewObject(Node* node) {
- Node* constructor = NodeProperties::GetValueInput(node, 0);
- Node* new_target = NodeProperties::GetValueInput(node, 1);
- Node* context = NodeProperties::GetContextInput(node);
- Node* effect = NodeProperties::GetEffectInput(node);
- Node* frame_state = NodeProperties::GetFrameStateInput(node, 0);
- Node* value = graph()->NewNode(javascript()->Create(), constructor,
- new_target, context, frame_state, effect);
- ReplaceWithValue(node, value, value);
- return Replace(value);
+ return Change(node, CodeFactory::FastNewObject(isolate()), 0);
}
Reduction JSIntrinsicLowering::ReduceGetSuperConstructor(Node* node) {
@@ -419,17 +324,6 @@ Reduction JSIntrinsicLowering::ReduceGetSuperConstructor(Node* node) {
active_function_map, effect, control);
}
-Reduction JSIntrinsicLowering::ReduceGetOrdinaryHasInstance(Node* node) {
- Node* effect = NodeProperties::GetEffectInput(node);
- Node* context = NodeProperties::GetContextInput(node);
- Node* native_context = effect = graph()->NewNode(
- javascript()->LoadContext(0, Context::NATIVE_CONTEXT_INDEX, true),
- context, context, effect);
- return Change(node, javascript()->LoadContext(
- 0, Context::ORDINARY_HAS_INSTANCE_INDEX, true),
- native_context, context, effect);
-}
-
Reduction JSIntrinsicLowering::Change(Node* node, const Operator* op, Node* a,
Node* b) {
RelaxControls(node);
@@ -466,12 +360,6 @@ Reduction JSIntrinsicLowering::Change(Node* node, const Operator* op, Node* a,
}
-Reduction JSIntrinsicLowering::ChangeToUndefined(Node* node, Node* effect) {
- ReplaceWithValue(node, jsgraph()->UndefinedConstant(), effect);
- return Changed(node);
-}
-
-
Reduction JSIntrinsicLowering::Change(Node* node, Callable const& callable,
int stack_parameter_count) {
CallDescriptor const* const desc = Linkage::GetStubCallDescriptor(
@@ -498,12 +386,6 @@ JSOperatorBuilder* JSIntrinsicLowering::javascript() const {
return jsgraph_->javascript();
}
-
-MachineOperatorBuilder* JSIntrinsicLowering::machine() const {
- return jsgraph()->machine();
-}
-
-
SimplifiedOperatorBuilder* JSIntrinsicLowering::simplified() const {
return jsgraph()->simplified();
}