diff options
Diffstat (limited to 'deps/v8/src/compiler/js-intrinsic-lowering.cc')
-rw-r--r-- | deps/v8/src/compiler/js-intrinsic-lowering.cc | 198 |
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(); } |