OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 #ifndef V8_HYDROGEN_INSTRUCTIONS_H_ | 5 #ifndef V8_HYDROGEN_INSTRUCTIONS_H_ |
6 #define V8_HYDROGEN_INSTRUCTIONS_H_ | 6 #define V8_HYDROGEN_INSTRUCTIONS_H_ |
7 | 7 |
8 #include <cstring> | 8 #include <cstring> |
9 #include <iosfwd> | 9 #include <iosfwd> |
10 | 10 |
(...skipping 6491 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6502 | 6502 |
6503 bool IsDeletable() const OVERRIDE { return true; } | 6503 bool IsDeletable() const OVERRIDE { return true; } |
6504 | 6504 |
6505 HObjectAccess access_; | 6505 HObjectAccess access_; |
6506 const UniqueSet<Map>* maps_; | 6506 const UniqueSet<Map>* maps_; |
6507 }; | 6507 }; |
6508 | 6508 |
6509 | 6509 |
6510 class HLoadNamedGeneric FINAL : public HTemplateInstruction<2> { | 6510 class HLoadNamedGeneric FINAL : public HTemplateInstruction<2> { |
6511 public: | 6511 public: |
6512 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HLoadNamedGeneric, HValue*, | 6512 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P3(HLoadNamedGeneric, HValue*, |
6513 Handle<Object>); | 6513 Handle<Object>, InlineCacheState); |
6514 | 6514 |
6515 HValue* context() const { return OperandAt(0); } | 6515 HValue* context() const { return OperandAt(0); } |
6516 HValue* object() const { return OperandAt(1); } | 6516 HValue* object() const { return OperandAt(1); } |
6517 Handle<Object> name() const { return name_; } | 6517 Handle<Object> name() const { return name_; } |
6518 | 6518 |
| 6519 InlineCacheState initialization_state() const { |
| 6520 return initialization_state_; |
| 6521 } |
6519 FeedbackVectorICSlot slot() const { return slot_; } | 6522 FeedbackVectorICSlot slot() const { return slot_; } |
6520 Handle<TypeFeedbackVector> feedback_vector() const { | 6523 Handle<TypeFeedbackVector> feedback_vector() const { |
6521 return feedback_vector_; | 6524 return feedback_vector_; |
6522 } | 6525 } |
6523 bool HasVectorAndSlot() const { return FLAG_vector_ics; } | 6526 bool HasVectorAndSlot() const { return FLAG_vector_ics; } |
6524 void SetVectorAndSlot(Handle<TypeFeedbackVector> vector, | 6527 void SetVectorAndSlot(Handle<TypeFeedbackVector> vector, |
6525 FeedbackVectorICSlot slot) { | 6528 FeedbackVectorICSlot slot) { |
6526 DCHECK(FLAG_vector_ics); | 6529 DCHECK(FLAG_vector_ics); |
6527 feedback_vector_ = vector; | 6530 feedback_vector_ = vector; |
6528 slot_ = slot; | 6531 slot_ = slot; |
6529 } | 6532 } |
6530 | 6533 |
6531 Representation RequiredInputRepresentation(int index) OVERRIDE { | 6534 Representation RequiredInputRepresentation(int index) OVERRIDE { |
6532 return Representation::Tagged(); | 6535 return Representation::Tagged(); |
6533 } | 6536 } |
6534 | 6537 |
6535 std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT | 6538 std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT |
6536 | 6539 |
6537 DECLARE_CONCRETE_INSTRUCTION(LoadNamedGeneric) | 6540 DECLARE_CONCRETE_INSTRUCTION(LoadNamedGeneric) |
6538 | 6541 |
6539 private: | 6542 private: |
6540 HLoadNamedGeneric(HValue* context, HValue* object, Handle<Object> name) | 6543 HLoadNamedGeneric(HValue* context, HValue* object, Handle<Object> name, |
6541 : name_(name), slot_(FeedbackVectorICSlot::Invalid()) { | 6544 InlineCacheState initialization_state) |
| 6545 : name_(name), |
| 6546 slot_(FeedbackVectorICSlot::Invalid()), |
| 6547 initialization_state_(initialization_state) { |
6542 SetOperandAt(0, context); | 6548 SetOperandAt(0, context); |
6543 SetOperandAt(1, object); | 6549 SetOperandAt(1, object); |
6544 set_representation(Representation::Tagged()); | 6550 set_representation(Representation::Tagged()); |
6545 SetAllSideEffects(); | 6551 SetAllSideEffects(); |
6546 } | 6552 } |
6547 | 6553 |
6548 Handle<Object> name_; | 6554 Handle<Object> name_; |
6549 Handle<TypeFeedbackVector> feedback_vector_; | 6555 Handle<TypeFeedbackVector> feedback_vector_; |
6550 FeedbackVectorICSlot slot_; | 6556 FeedbackVectorICSlot slot_; |
| 6557 InlineCacheState initialization_state_; |
6551 }; | 6558 }; |
6552 | 6559 |
6553 | 6560 |
6554 class HLoadFunctionPrototype FINAL : public HUnaryOperation { | 6561 class HLoadFunctionPrototype FINAL : public HUnaryOperation { |
6555 public: | 6562 public: |
6556 DECLARE_INSTRUCTION_FACTORY_P1(HLoadFunctionPrototype, HValue*); | 6563 DECLARE_INSTRUCTION_FACTORY_P1(HLoadFunctionPrototype, HValue*); |
6557 | 6564 |
6558 HValue* function() { return OperandAt(0); } | 6565 HValue* function() { return OperandAt(0); } |
6559 | 6566 |
6560 Representation RequiredInputRepresentation(int index) OVERRIDE { | 6567 Representation RequiredInputRepresentation(int index) OVERRIDE { |
(...skipping 433 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6994 class ReceiverIsCellField : public BitField<bool, 2, 1> {}; | 7001 class ReceiverIsCellField : public BitField<bool, 2, 1> {}; |
6995 | 7002 |
6996 HObjectAccess access_; | 7003 HObjectAccess access_; |
6997 HValue* dominator_; | 7004 HValue* dominator_; |
6998 uint32_t bit_field_; | 7005 uint32_t bit_field_; |
6999 }; | 7006 }; |
7000 | 7007 |
7001 | 7008 |
7002 class HStoreNamedGeneric FINAL : public HTemplateInstruction<3> { | 7009 class HStoreNamedGeneric FINAL : public HTemplateInstruction<3> { |
7003 public: | 7010 public: |
7004 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P4(HStoreNamedGeneric, HValue*, | 7011 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P5(HStoreNamedGeneric, HValue*, |
7005 Handle<String>, HValue*, | 7012 Handle<String>, HValue*, |
7006 LanguageMode); | 7013 LanguageMode, InlineCacheState); |
7007 HValue* object() const { return OperandAt(0); } | 7014 HValue* object() const { return OperandAt(0); } |
7008 HValue* value() const { return OperandAt(1); } | 7015 HValue* value() const { return OperandAt(1); } |
7009 HValue* context() const { return OperandAt(2); } | 7016 HValue* context() const { return OperandAt(2); } |
7010 Handle<String> name() const { return name_; } | 7017 Handle<String> name() const { return name_; } |
7011 LanguageMode language_mode() const { return language_mode_; } | 7018 LanguageMode language_mode() const { return language_mode_; } |
| 7019 InlineCacheState initialization_state() const { |
| 7020 return initialization_state_; |
| 7021 } |
7012 | 7022 |
7013 std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT | 7023 std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT |
7014 | 7024 |
7015 Representation RequiredInputRepresentation(int index) OVERRIDE { | 7025 Representation RequiredInputRepresentation(int index) OVERRIDE { |
7016 return Representation::Tagged(); | 7026 return Representation::Tagged(); |
7017 } | 7027 } |
7018 | 7028 |
7019 DECLARE_CONCRETE_INSTRUCTION(StoreNamedGeneric) | 7029 DECLARE_CONCRETE_INSTRUCTION(StoreNamedGeneric) |
7020 | 7030 |
7021 private: | 7031 private: |
7022 HStoreNamedGeneric(HValue* context, HValue* object, Handle<String> name, | 7032 HStoreNamedGeneric(HValue* context, HValue* object, Handle<String> name, |
7023 HValue* value, LanguageMode language_mode) | 7033 HValue* value, LanguageMode language_mode, |
7024 : name_(name), language_mode_(language_mode) { | 7034 InlineCacheState initialization_state) |
| 7035 : name_(name), |
| 7036 language_mode_(language_mode), |
| 7037 initialization_state_(initialization_state) { |
7025 SetOperandAt(0, object); | 7038 SetOperandAt(0, object); |
7026 SetOperandAt(1, value); | 7039 SetOperandAt(1, value); |
7027 SetOperandAt(2, context); | 7040 SetOperandAt(2, context); |
7028 SetAllSideEffects(); | 7041 SetAllSideEffects(); |
7029 } | 7042 } |
7030 | 7043 |
7031 Handle<String> name_; | 7044 Handle<String> name_; |
7032 LanguageMode language_mode_; | 7045 LanguageMode language_mode_; |
| 7046 InlineCacheState initialization_state_; |
7033 }; | 7047 }; |
7034 | 7048 |
7035 | 7049 |
7036 class HStoreKeyed FINAL | 7050 class HStoreKeyed FINAL |
7037 : public HTemplateInstruction<3>, public ArrayInstructionInterface { | 7051 : public HTemplateInstruction<3>, public ArrayInstructionInterface { |
7038 public: | 7052 public: |
7039 DECLARE_INSTRUCTION_FACTORY_P4(HStoreKeyed, HValue*, HValue*, HValue*, | 7053 DECLARE_INSTRUCTION_FACTORY_P4(HStoreKeyed, HValue*, HValue*, HValue*, |
7040 ElementsKind); | 7054 ElementsKind); |
7041 DECLARE_INSTRUCTION_FACTORY_P5(HStoreKeyed, HValue*, HValue*, HValue*, | 7055 DECLARE_INSTRUCTION_FACTORY_P5(HStoreKeyed, HValue*, HValue*, HValue*, |
7042 ElementsKind, StoreFieldOrKeyedMode); | 7056 ElementsKind, StoreFieldOrKeyedMode); |
(...skipping 894 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7937 }; | 7951 }; |
7938 | 7952 |
7939 | 7953 |
7940 | 7954 |
7941 #undef DECLARE_INSTRUCTION | 7955 #undef DECLARE_INSTRUCTION |
7942 #undef DECLARE_CONCRETE_INSTRUCTION | 7956 #undef DECLARE_CONCRETE_INSTRUCTION |
7943 | 7957 |
7944 } } // namespace v8::internal | 7958 } } // namespace v8::internal |
7945 | 7959 |
7946 #endif // V8_HYDROGEN_INSTRUCTIONS_H_ | 7960 #endif // V8_HYDROGEN_INSTRUCTIONS_H_ |
OLD | NEW |