diff options
Diffstat (limited to 'deps/v8/src/crankshaft/arm64/lithium-arm64.cc')
-rw-r--r-- | deps/v8/src/crankshaft/arm64/lithium-arm64.cc | 109 |
1 files changed, 17 insertions, 92 deletions
diff --git a/deps/v8/src/crankshaft/arm64/lithium-arm64.cc b/deps/v8/src/crankshaft/arm64/lithium-arm64.cc index c5d42082bd..6cfc846548 100644 --- a/deps/v8/src/crankshaft/arm64/lithium-arm64.cc +++ b/deps/v8/src/crankshaft/arm64/lithium-arm64.cc @@ -66,13 +66,6 @@ void LBranch::PrintDataTo(StringStream* stream) { } -void LCallJSFunction::PrintDataTo(StringStream* stream) { - stream->Add("= "); - function()->PrintTo(stream); - stream->Add("#%d / ", arity()); -} - - void LCallWithDescriptor::PrintDataTo(StringStream* stream) { for (int i = 0; i < InputCount(); i++) { InputAt(i)->PrintTo(stream); @@ -135,20 +128,6 @@ void LInnerAllocatedObject::PrintDataTo(StringStream* stream) { } -void LCallFunction::PrintDataTo(StringStream* stream) { - context()->PrintTo(stream); - stream->Add(" "); - function()->PrintTo(stream); - if (hydrogen()->HasVectorAndSlot()) { - stream->Add(" (type-feedback-vector "); - temp_vector()->PrintTo(stream); - stream->Add(" "); - temp_slot()->PrintTo(stream); - stream->Add(")"); - } -} - - void LInvokeFunction::PrintDataTo(StringStream* stream) { stream->Add("= "); function()->PrintTo(stream); @@ -735,33 +714,22 @@ void LChunkBuilder::AddInstruction(LInstruction* instr, } chunk_->AddInstruction(instr, current_block_); - if (instr->IsCall() || instr->IsPrologue()) { - HValue* hydrogen_value_for_lazy_bailout = hydrogen_val; - if (hydrogen_val->HasObservableSideEffects()) { - HSimulate* sim = HSimulate::cast(hydrogen_val->next()); - sim->ReplayEnvironment(current_block_->last_environment()); - hydrogen_value_for_lazy_bailout = sim; - } - LInstruction* bailout = AssignEnvironment(new(zone()) LLazyBailout()); - bailout->set_hydrogen_value(hydrogen_value_for_lazy_bailout); - chunk_->AddInstruction(bailout, current_block_); - } + CreateLazyBailoutForCall(current_block_, instr, hydrogen_val); } LInstruction* LChunkBuilder::AssignEnvironment(LInstruction* instr) { HEnvironment* hydrogen_env = current_block_->last_environment(); - int argument_index_accumulator = 0; - ZoneList<HValue*> objects_to_materialize(0, zone()); - instr->set_environment(CreateEnvironment(hydrogen_env, - &argument_index_accumulator, - &objects_to_materialize)); - return instr; + return LChunkBuilderBase::AssignEnvironment(instr, hydrogen_env); } LInstruction* LChunkBuilder::DoPrologue(HPrologue* instr) { - return new (zone()) LPrologue(); + LInstruction* result = new (zone()) LPrologue(); + if (info_->num_heap_slots() > 0) { + result = MarkAsCall(result, instr); + } + return result; } @@ -817,13 +785,6 @@ LInstruction* LChunkBuilder::DoArithmeticT(Token::Value op, } -LInstruction* LChunkBuilder::DoBoundsCheckBaseIndexInformation( - HBoundsCheckBaseIndexInformation* instr) { - UNREACHABLE(); - return NULL; -} - - LInstruction* LChunkBuilder::DoAccessArgumentsAt(HAccessArgumentsAt* instr) { info()->MarkAsRequiresFrame(); LOperand* args = NULL; @@ -993,7 +954,7 @@ LInstruction* LChunkBuilder::DoBranch(HBranch* instr) { return new(zone()) LBranch(UseRegister(value), TempRegister(), NULL); } - ToBooleanStub::Types expected = instr->expected_input_types(); + ToBooleanICStub::Types expected = instr->expected_input_types(); bool needs_temps = expected.NeedsMap() || expected.IsEmpty(); LOperand* temp1 = needs_temps ? TempRegister() : NULL; LOperand* temp2 = needs_temps ? TempRegister() : NULL; @@ -1011,16 +972,6 @@ LInstruction* LChunkBuilder::DoBranch(HBranch* instr) { } -LInstruction* LChunkBuilder::DoCallJSFunction( - HCallJSFunction* instr) { - LOperand* function = UseFixed(instr->function(), x1); - - LCallJSFunction* result = new(zone()) LCallJSFunction(function); - - return MarkAsCall(DefineFixed(result, x0), instr); -} - - LInstruction* LChunkBuilder::DoCallWithDescriptor( HCallWithDescriptor* instr) { CallInterfaceDescriptor descriptor = instr->descriptor(); @@ -1045,23 +996,10 @@ LInstruction* LChunkBuilder::DoCallWithDescriptor( LCallWithDescriptor* result = new(zone()) LCallWithDescriptor(descriptor, ops, zone()); - return MarkAsCall(DefineFixed(result, x0), instr); -} - - -LInstruction* LChunkBuilder::DoCallFunction(HCallFunction* instr) { - LOperand* context = UseFixed(instr->context(), cp); - LOperand* function = UseFixed(instr->function(), x1); - LOperand* slot = NULL; - LOperand* vector = NULL; - if (instr->HasVectorAndSlot()) { - slot = FixedTemp(x3); - vector = FixedTemp(x2); + if (instr->syntactic_tail_call_mode() == TailCallMode::kAllow) { + result->MarkAsSyntacticTailCall(); } - - LCallFunction* call = - new (zone()) LCallFunction(context, function, slot, vector); - return MarkAsCall(DefineFixed(call, x0), instr); + return MarkAsCall(DefineFixed(result, x0), instr); } @@ -1454,11 +1392,9 @@ LInstruction* LChunkBuilder::DoEnterInlined(HEnterInlined* instr) { HEnvironment* outer = current_block_->last_environment(); outer->set_ast_id(instr->ReturnId()); HConstant* undefined = graph()->GetConstantUndefined(); - HEnvironment* inner = outer->CopyForInlining(instr->closure(), - instr->arguments_count(), - instr->function(), - undefined, - instr->inlining_kind()); + HEnvironment* inner = outer->CopyForInlining( + instr->closure(), instr->arguments_count(), instr->function(), undefined, + instr->inlining_kind(), instr->syntactic_tail_call_mode()); // Only replay binding of arguments object if it wasn't removed from graph. if ((instr->arguments_var() != NULL) && instr->arguments_object()->IsLinked()) { @@ -1553,6 +1489,9 @@ LInstruction* LChunkBuilder::DoInvokeFunction(HInvokeFunction* instr) { // The function is required (by MacroAssembler::InvokeFunction) to be in x1. LOperand* function = UseFixed(instr->function(), x1); LInvokeFunction* result = new(zone()) LInvokeFunction(context, function); + if (instr->syntactic_tail_call_mode() == TailCallMode::kAllow) { + result->MarkAsSyntacticTailCall(); + } return MarkAsCall(DefineFixed(result, x0), instr, CANNOT_DEOPTIMIZE_EAGERLY); } @@ -2457,13 +2396,6 @@ LInstruction* LChunkBuilder::DoThisFunction(HThisFunction* instr) { } -LInstruction* LChunkBuilder::DoToFastProperties(HToFastProperties* instr) { - LOperand* object = UseFixed(instr->value(), x0); - LToFastProperties* result = new(zone()) LToFastProperties(object); - return MarkAsCall(DefineFixed(result, x0), instr); -} - - LInstruction* LChunkBuilder::DoTransitionElementsKind( HTransitionElementsKind* instr) { if (IsSimpleMapChangeTransition(instr->from_kind(), instr->to_kind())) { @@ -2688,12 +2620,5 @@ LInstruction* LChunkBuilder::DoWrapReceiver(HWrapReceiver* instr) { return AssignEnvironment(DefineAsRegister(result)); } - -LInstruction* LChunkBuilder::DoStoreFrameContext(HStoreFrameContext* instr) { - LOperand* context = UseRegisterAtStart(instr->context()); - return new(zone()) LStoreFrameContext(context); -} - - } // namespace internal } // namespace v8 |