| Index: src/x64/lithium-x64.cc
|
| diff --git a/src/x64/lithium-x64.cc b/src/x64/lithium-x64.cc
|
| index ec677ee3cc691b1d9c1f65436bb9ff6643bc9ff7..7468b10589ea37a47b048a8d04730e516d4103c6 100644
|
| --- a/src/x64/lithium-x64.cc
|
| +++ b/src/x64/lithium-x64.cc
|
| @@ -855,10 +855,18 @@ void LChunkBuilder::VisitInstruction(HInstruction* current) {
|
| argument_count_ += current->argument_delta();
|
| ASSERT(argument_count_ >= 0);
|
|
|
| + CheckAndAddInstruction(instr, current);
|
| +
|
| + current_instruction_ = old_current;
|
| +}
|
| +
|
| +
|
| +void LChunkBuilder::CheckAndAddInstruction(LInstruction* instr,
|
| + HInstruction* hydrogen_val) {
|
| if (instr != NULL) {
|
| // Associate the hydrogen instruction first, since we may need it for
|
| // the ClobbersRegisters() or ClobbersDoubleRegisters() calls below.
|
| - instr->set_hydrogen_value(current);
|
| + instr->set_hydrogen_value(hydrogen_val);
|
|
|
| #if DEBUG
|
| // Make sure that the lithium instruction has either no fixed register
|
| @@ -899,10 +907,10 @@ void LChunkBuilder::VisitInstruction(HInstruction* current) {
|
| chunk_->AddInstruction(instr, current_block_);
|
|
|
| if (instr->IsCall()) {
|
| - HValue* hydrogen_value_for_lazy_bailout = current;
|
| + HValue* hydrogen_value_for_lazy_bailout = hydrogen_val;
|
| LInstruction* instruction_needing_environment = NULL;
|
| - if (current->HasObservableSideEffects()) {
|
| - HSimulate* sim = HSimulate::cast(current->next());
|
| + if (hydrogen_val->HasObservableSideEffects()) {
|
| + HSimulate* sim = HSimulate::cast(hydrogen_val->next());
|
| instruction_needing_environment = instr;
|
| sim->ReplayEnvironment(current_block_->last_environment());
|
| hydrogen_value_for_lazy_bailout = sim;
|
| @@ -918,7 +926,6 @@ void LChunkBuilder::VisitInstruction(HInstruction* current) {
|
| }
|
| }
|
| }
|
| - current_instruction_ = old_current;
|
| }
|
|
|
|
|
|
|