| Index: src/ia32/lithium-ia32.cc
|
| diff --git a/src/ia32/lithium-ia32.cc b/src/ia32/lithium-ia32.cc
|
| index 76a107dc523376a35a30c3b8d2a2da782c5edcc2..be4291219665d60fc0c748ef0748cb5631998776 100644
|
| --- a/src/ia32/lithium-ia32.cc
|
| +++ b/src/ia32/lithium-ia32.cc
|
| @@ -888,10 +888,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
|
| @@ -932,10 +940,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;
|
| @@ -951,7 +959,6 @@ void LChunkBuilder::VisitInstruction(HInstruction* current) {
|
| }
|
| }
|
| }
|
| - current_instruction_ = old_current;
|
| }
|
|
|
|
|
|
|