| Index: src/arm/lithium-arm.cc
|
| diff --git a/src/arm/lithium-arm.cc b/src/arm/lithium-arm.cc
|
| index 947b23b3a75cd92ad8d7398298d3fe355dc16cc4..d6a4c83266c49756e2cb65bd028533783fb46d71 100644
|
| --- a/src/arm/lithium-arm.cc
|
| +++ b/src/arm/lithium-arm.cc
|
| @@ -614,15 +614,6 @@ LInstruction* LChunkBuilder::MarkAsCall(LInstruction* instr,
|
| instr->MarkAsCall();
|
| instr = AssignPointerMap(instr);
|
|
|
| - if (hinstr->HasObservableSideEffects()) {
|
| - ASSERT(hinstr->next()->IsSimulate());
|
| - HSimulate* sim = HSimulate::cast(hinstr->next());
|
| - ASSERT(instruction_pending_deoptimization_environment_ == NULL);
|
| - ASSERT(pending_deoptimization_ast_id_.IsNone());
|
| - instruction_pending_deoptimization_environment_ = instr;
|
| - pending_deoptimization_ast_id_ = sim->ast_id();
|
| - }
|
| -
|
| // If instruction does not have side-effects lazy deoptimization
|
| // after the call will try to deoptimize to the point before the call.
|
| // Thus we still need to attach environment to this call even if
|
| @@ -905,6 +896,26 @@ void LChunkBuilder::VisitInstruction(HInstruction* current) {
|
| instr = AssignEnvironment(instr);
|
| }
|
| chunk_->AddInstruction(instr, current_block_);
|
| +
|
| + if (instr->IsCall()) {
|
| + HValue* hydrogen_value_for_lazy_bailout = current;
|
| + LInstruction* instruction_needing_environment = NULL;
|
| + if (current->HasObservableSideEffects()) {
|
| + HSimulate* sim = HSimulate::cast(current->next());
|
| + instruction_needing_environment = instr;
|
| + 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_);
|
| + if (instruction_needing_environment != NULL) {
|
| + // Store the lazy deopt environment with the instruction if needed.
|
| + // Right now it is only used for LInstanceOfKnownGlobal.
|
| + instruction_needing_environment->
|
| + SetDeferredLazyDeoptimizationEnvironment(bailout->environment());
|
| + }
|
| + }
|
| }
|
| current_instruction_ = old_current;
|
| }
|
| @@ -2445,21 +2456,6 @@ LInstruction* LChunkBuilder::DoIsConstructCallAndBranch(
|
|
|
| LInstruction* LChunkBuilder::DoSimulate(HSimulate* instr) {
|
| instr->ReplayEnvironment(current_block_->last_environment());
|
| -
|
| - // If there is an instruction pending deoptimization environment create a
|
| - // lazy bailout instruction to capture the environment.
|
| - if (pending_deoptimization_ast_id_ == instr->ast_id()) {
|
| - LInstruction* result = new(zone()) LLazyBailout;
|
| - result = AssignEnvironment(result);
|
| - // Store the lazy deopt environment with the instruction if needed. Right
|
| - // now it is only used for LInstanceOfKnownGlobal.
|
| - instruction_pending_deoptimization_environment_->
|
| - SetDeferredLazyDeoptimizationEnvironment(result->environment());
|
| - instruction_pending_deoptimization_environment_ = NULL;
|
| - pending_deoptimization_ast_id_ = BailoutId::None();
|
| - return result;
|
| - }
|
| -
|
| return NULL;
|
| }
|
|
|
|
|