| OLD | NEW |
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/hydrogen.h" | 5 #include "src/hydrogen.h" |
| 6 | 6 |
| 7 #include <sstream> | 7 #include <sstream> |
| 8 | 8 |
| 9 #include "src/v8.h" | 9 #include "src/v8.h" |
| 10 | 10 |
| (...skipping 5541 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5552 if (field_maps == nullptr) { | 5552 if (field_maps == nullptr) { |
| 5553 instr = New<HLoadNamedField>(cell_constant, nullptr, access); | 5553 instr = New<HLoadNamedField>(cell_constant, nullptr, access); |
| 5554 } else { | 5554 } else { |
| 5555 instr = New<HLoadNamedField>(cell_constant, nullptr, access, | 5555 instr = New<HLoadNamedField>(cell_constant, nullptr, access, |
| 5556 field_maps, HType::HeapObject()); | 5556 field_maps, HType::HeapObject()); |
| 5557 } | 5557 } |
| 5558 instr->ClearDependsOnFlag(kInobjectFields); | 5558 instr->ClearDependsOnFlag(kInobjectFields); |
| 5559 instr->SetDependsOnFlag(kGlobalVars); | 5559 instr->SetDependsOnFlag(kGlobalVars); |
| 5560 return ast_context()->ReturnInstruction(instr, expr->id()); | 5560 return ast_context()->ReturnInstruction(instr, expr->id()); |
| 5561 } | 5561 } |
| 5562 } else if (variable->IsGlobalSlot()) { |
| 5563 DCHECK(variable->index() > 0); |
| 5564 DCHECK(variable->IsStaticGlobalObjectProperty()); |
| 5565 // Each var occupies two slots in the context: for reads and writes. |
| 5566 int slot_index = variable->index(); |
| 5567 int depth = scope()->ContextChainLength(variable->scope()); |
| 5568 |
| 5569 HLoadGlobalViaContext* instr = |
| 5570 New<HLoadGlobalViaContext>(variable->name(), depth, slot_index); |
| 5571 return ast_context()->ReturnInstruction(instr, expr->id()); |
| 5572 |
| 5562 } else { | 5573 } else { |
| 5563 HValue* global_object = Add<HLoadNamedField>( | 5574 HValue* global_object = Add<HLoadNamedField>( |
| 5564 context(), nullptr, | 5575 context(), nullptr, |
| 5565 HObjectAccess::ForContextSlot(Context::GLOBAL_OBJECT_INDEX)); | 5576 HObjectAccess::ForContextSlot(Context::GLOBAL_OBJECT_INDEX)); |
| 5566 HLoadGlobalGeneric* instr = New<HLoadGlobalGeneric>( | 5577 HLoadGlobalGeneric* instr = New<HLoadGlobalGeneric>( |
| 5567 global_object, variable->name(), ast_context()->typeof_mode()); | 5578 global_object, variable->name(), ast_context()->typeof_mode()); |
| 5568 instr->SetVectorAndSlot(handle(current_feedback_vector(), isolate()), | 5579 instr->SetVectorAndSlot(handle(current_feedback_vector(), isolate()), |
| 5569 expr->VariableFeedbackSlot()); | 5580 expr->VariableFeedbackSlot()); |
| 5570 return ast_context()->ReturnInstruction(instr, expr->id()); | 5581 return ast_context()->ReturnInstruction(instr, expr->id()); |
| 5571 } | 5582 } |
| (...skipping 1201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6773 break; | 6784 break; |
| 6774 } | 6785 } |
| 6775 } | 6786 } |
| 6776 } | 6787 } |
| 6777 HInstruction* instr = Add<HStoreNamedField>(cell_constant, access, value); | 6788 HInstruction* instr = Add<HStoreNamedField>(cell_constant, access, value); |
| 6778 instr->ClearChangesFlag(kInobjectFields); | 6789 instr->ClearChangesFlag(kInobjectFields); |
| 6779 instr->SetChangesFlag(kGlobalVars); | 6790 instr->SetChangesFlag(kGlobalVars); |
| 6780 if (instr->HasObservableSideEffects()) { | 6791 if (instr->HasObservableSideEffects()) { |
| 6781 Add<HSimulate>(ast_id, REMOVABLE_SIMULATE); | 6792 Add<HSimulate>(ast_id, REMOVABLE_SIMULATE); |
| 6782 } | 6793 } |
| 6794 } else if (var->IsGlobalSlot()) { |
| 6795 DCHECK(var->index() > 0); |
| 6796 DCHECK(var->IsStaticGlobalObjectProperty()); |
| 6797 // Each var occupies two slots in the context: for reads and writes. |
| 6798 int slot_index = var->index() + 1; |
| 6799 int depth = scope()->ContextChainLength(var->scope()); |
| 6800 |
| 6801 HStoreGlobalViaContext* instr = Add<HStoreGlobalViaContext>( |
| 6802 var->name(), value, depth, slot_index, function_language_mode()); |
| 6803 USE(instr); |
| 6804 DCHECK(instr->HasObservableSideEffects()); |
| 6805 Add<HSimulate>(ast_id, REMOVABLE_SIMULATE); |
| 6806 |
| 6783 } else { | 6807 } else { |
| 6784 HValue* global_object = Add<HLoadNamedField>( | 6808 HValue* global_object = Add<HLoadNamedField>( |
| 6785 context(), nullptr, | 6809 context(), nullptr, |
| 6786 HObjectAccess::ForContextSlot(Context::GLOBAL_OBJECT_INDEX)); | 6810 HObjectAccess::ForContextSlot(Context::GLOBAL_OBJECT_INDEX)); |
| 6787 HStoreNamedGeneric* instr = | 6811 HStoreNamedGeneric* instr = |
| 6788 Add<HStoreNamedGeneric>(global_object, var->name(), value, | 6812 Add<HStoreNamedGeneric>(global_object, var->name(), value, |
| 6789 function_language_mode(), PREMONOMORPHIC); | 6813 function_language_mode(), PREMONOMORPHIC); |
| 6790 USE(instr); | 6814 USE(instr); |
| 6791 DCHECK(instr->HasObservableSideEffects()); | 6815 DCHECK(instr->HasObservableSideEffects()); |
| 6792 Add<HSimulate>(ast_id, REMOVABLE_SIMULATE); | 6816 Add<HSimulate>(ast_id, REMOVABLE_SIMULATE); |
| (...skipping 6504 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 13297 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); | 13321 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); |
| 13298 } | 13322 } |
| 13299 | 13323 |
| 13300 #ifdef DEBUG | 13324 #ifdef DEBUG |
| 13301 graph_->Verify(false); // No full verify. | 13325 graph_->Verify(false); // No full verify. |
| 13302 #endif | 13326 #endif |
| 13303 } | 13327 } |
| 13304 | 13328 |
| 13305 } // namespace internal | 13329 } // namespace internal |
| 13306 } // namespace v8 | 13330 } // namespace v8 |
| OLD | NEW |