OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 5671 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5682 | 5682 |
5683 class HStoreNamedField: public HTemplateInstruction<2> { | 5683 class HStoreNamedField: public HTemplateInstruction<2> { |
5684 public: | 5684 public: |
5685 HStoreNamedField(HValue* obj, | 5685 HStoreNamedField(HValue* obj, |
5686 HObjectAccess access, | 5686 HObjectAccess access, |
5687 HValue* val, | 5687 HValue* val, |
5688 Representation field_representation | 5688 Representation field_representation |
5689 = Representation::Tagged()) | 5689 = Representation::Tagged()) |
5690 : access_(access), | 5690 : access_(access), |
5691 field_representation_(field_representation), | 5691 field_representation_(field_representation), |
| 5692 transition_(), |
5692 transition_unique_id_(), | 5693 transition_unique_id_(), |
5693 new_space_dominator_(NULL) { | 5694 new_space_dominator_(NULL) { |
5694 SetOperandAt(0, obj); | 5695 SetOperandAt(0, obj); |
5695 SetOperandAt(1, val); | 5696 SetOperandAt(1, val); |
5696 access.SetGVNFlags(this, true); | 5697 access.SetGVNFlags(this, true); |
5697 } | 5698 } |
5698 | 5699 |
5699 DECLARE_CONCRETE_INSTRUCTION(StoreNamedField) | 5700 DECLARE_CONCRETE_INSTRUCTION(StoreNamedField) |
5700 | 5701 |
5701 virtual Representation RequiredInputRepresentation(int index) { | 5702 virtual Representation RequiredInputRepresentation(int index) { |
(...skipping 11 matching lines...) Expand all Loading... |
5713 new_space_dominator_ = dominator; | 5714 new_space_dominator_ = dominator; |
5714 } | 5715 } |
5715 virtual void PrintDataTo(StringStream* stream); | 5716 virtual void PrintDataTo(StringStream* stream); |
5716 | 5717 |
5717 HValue* object() { return OperandAt(0); } | 5718 HValue* object() { return OperandAt(0); } |
5718 HValue* value() { return OperandAt(1); } | 5719 HValue* value() { return OperandAt(1); } |
5719 | 5720 |
5720 HObjectAccess access() const { return access_; } | 5721 HObjectAccess access() const { return access_; } |
5721 Handle<Map> transition() const { return transition_; } | 5722 Handle<Map> transition() const { return transition_; } |
5722 UniqueValueId transition_unique_id() const { return transition_unique_id_; } | 5723 UniqueValueId transition_unique_id() const { return transition_unique_id_; } |
5723 void set_transition(Handle<Map> map) { transition_ = map; } | 5724 void SetTransition(Handle<Map> map, CompilationInfo* info) { |
| 5725 ASSERT(transition_.is_null()); // Only set once. |
| 5726 if (map->CanBeDeprecated()) { |
| 5727 map->AddDependentCompilationInfo(DependentCode::kTransitionGroup, info); |
| 5728 } |
| 5729 transition_ = map; |
| 5730 } |
5724 HValue* new_space_dominator() const { return new_space_dominator_; } | 5731 HValue* new_space_dominator() const { return new_space_dominator_; } |
5725 | 5732 |
5726 bool NeedsWriteBarrier() { | 5733 bool NeedsWriteBarrier() { |
5727 ASSERT(!(FLAG_track_double_fields && field_representation_.IsDouble()) || | 5734 ASSERT(!(FLAG_track_double_fields && field_representation_.IsDouble()) || |
5728 transition_.is_null()); | 5735 transition_.is_null()); |
5729 return (!FLAG_track_fields || !field_representation_.IsSmi()) && | 5736 return (!FLAG_track_fields || !field_representation_.IsSmi()) && |
5730 // If there is a transition, a new storage object needs to be allocated. | 5737 // If there is a transition, a new storage object needs to be allocated. |
5731 !(FLAG_track_double_fields && field_representation_.IsDouble()) && | 5738 !(FLAG_track_double_fields && field_representation_.IsDouble()) && |
5732 StoringValueNeedsWriteBarrier(value()) && | 5739 StoringValueNeedsWriteBarrier(value()) && |
5733 ReceiverObjectNeedsWriteBarrier(object(), new_space_dominator()); | 5740 ReceiverObjectNeedsWriteBarrier(object(), new_space_dominator()); |
(...skipping 836 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6570 virtual bool IsDeletable() const { return true; } | 6577 virtual bool IsDeletable() const { return true; } |
6571 }; | 6578 }; |
6572 | 6579 |
6573 | 6580 |
6574 #undef DECLARE_INSTRUCTION | 6581 #undef DECLARE_INSTRUCTION |
6575 #undef DECLARE_CONCRETE_INSTRUCTION | 6582 #undef DECLARE_CONCRETE_INSTRUCTION |
6576 | 6583 |
6577 } } // namespace v8::internal | 6584 } } // namespace v8::internal |
6578 | 6585 |
6579 #endif // V8_HYDROGEN_INSTRUCTIONS_H_ | 6586 #endif // V8_HYDROGEN_INSTRUCTIONS_H_ |
OLD | NEW |