OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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_FEEDBACK_VECTOR_H_ | 5 #ifndef V8_FEEDBACK_VECTOR_H_ |
6 #define V8_FEEDBACK_VECTOR_H_ | 6 #define V8_FEEDBACK_VECTOR_H_ |
7 | 7 |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "src/base/logging.h" | 10 #include "src/base/logging.h" |
(...skipping 17 matching lines...) Expand all Loading... |
28 kLoadGlobalInsideTypeof, | 28 kLoadGlobalInsideTypeof, |
29 kLoadKeyed, | 29 kLoadKeyed, |
30 kStorePropertySloppy, | 30 kStorePropertySloppy, |
31 kStorePropertyStrict, | 31 kStorePropertyStrict, |
32 kStoreKeyedSloppy, | 32 kStoreKeyedSloppy, |
33 kStoreKeyedStrict, | 33 kStoreKeyedStrict, |
34 kBinaryOp, | 34 kBinaryOp, |
35 kCompareOp, | 35 kCompareOp, |
36 kToBoolean, | 36 kToBoolean, |
37 kStoreDataPropertyInLiteral, | 37 kStoreDataPropertyInLiteral, |
| 38 kTypeProfile, |
38 kCreateClosure, | 39 kCreateClosure, |
39 kLiteral, | 40 kLiteral, |
40 // This is a general purpose slot that occupies one feedback vector element. | 41 // This is a general purpose slot that occupies one feedback vector element. |
41 kGeneral, | 42 kGeneral, |
42 | 43 |
43 kKindsNumber // Last value indicating number of kinds. | 44 kKindsNumber // Last value indicating number of kinds. |
44 }; | 45 }; |
45 | 46 |
46 inline bool IsCallICKind(FeedbackSlotKind kind) { | 47 inline bool IsCallICKind(FeedbackSlotKind kind) { |
47 return kind == FeedbackSlotKind::kCall; | 48 return kind == FeedbackSlotKind::kCall; |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
133 } | 134 } |
134 | 135 |
135 FeedbackSlot AddGeneralSlot() { return AddSlot(FeedbackSlotKind::kGeneral); } | 136 FeedbackSlot AddGeneralSlot() { return AddSlot(FeedbackSlotKind::kGeneral); } |
136 | 137 |
137 FeedbackSlot AddLiteralSlot() { return AddSlot(FeedbackSlotKind::kLiteral); } | 138 FeedbackSlot AddLiteralSlot() { return AddSlot(FeedbackSlotKind::kLiteral); } |
138 | 139 |
139 FeedbackSlot AddStoreDataPropertyInLiteralICSlot() { | 140 FeedbackSlot AddStoreDataPropertyInLiteralICSlot() { |
140 return AddSlot(FeedbackSlotKind::kStoreDataPropertyInLiteral); | 141 return AddSlot(FeedbackSlotKind::kStoreDataPropertyInLiteral); |
141 } | 142 } |
142 | 143 |
| 144 FeedbackSlot AddTypeProfileSlot() { |
| 145 DCHECK(FLAG_type_profile); |
| 146 return AddSlot(FeedbackSlotKind::kTypeProfile); |
| 147 } |
| 148 |
143 #ifdef OBJECT_PRINT | 149 #ifdef OBJECT_PRINT |
144 // For gdb debugging. | 150 // For gdb debugging. |
145 void Print(); | 151 void Print(); |
146 #endif // OBJECT_PRINT | 152 #endif // OBJECT_PRINT |
147 | 153 |
148 DECLARE_PRINTER(FeedbackVectorSpec) | 154 DECLARE_PRINTER(FeedbackVectorSpec) |
149 | 155 |
150 private: | 156 private: |
151 inline FeedbackSlot AddSlot(FeedbackSlotKind kind); | 157 inline FeedbackSlot AddSlot(FeedbackSlotKind kind); |
152 | 158 |
(...skipping 553 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
706 int length = -1) const final { | 712 int length = -1) const final { |
707 return length == 0; | 713 return length == 0; |
708 } | 714 } |
709 }; | 715 }; |
710 | 716 |
711 class StoreDataPropertyInLiteralICNexus : public FeedbackNexus { | 717 class StoreDataPropertyInLiteralICNexus : public FeedbackNexus { |
712 public: | 718 public: |
713 StoreDataPropertyInLiteralICNexus(Handle<FeedbackVector> vector, | 719 StoreDataPropertyInLiteralICNexus(Handle<FeedbackVector> vector, |
714 FeedbackSlot slot) | 720 FeedbackSlot slot) |
715 : FeedbackNexus(vector, slot) { | 721 : FeedbackNexus(vector, slot) { |
716 DCHECK_EQ(FeedbackSlotKind::kStoreDataPropertyInLiteral, | 722 // DCHECK_EQ(FeedbackSlotKind::kStoreDataPropertyInLiteral, |
717 vector->GetKind(slot)); | 723 // vector->GetKind(slot)); |
718 } | 724 } |
719 StoreDataPropertyInLiteralICNexus(FeedbackVector* vector, FeedbackSlot slot) | 725 StoreDataPropertyInLiteralICNexus(FeedbackVector* vector, FeedbackSlot slot) |
720 : FeedbackNexus(vector, slot) { | 726 : FeedbackNexus(vector, slot) { |
721 DCHECK_EQ(FeedbackSlotKind::kStoreDataPropertyInLiteral, | 727 DCHECK_EQ(FeedbackSlotKind::kStoreDataPropertyInLiteral, |
722 vector->GetKind(slot)); | 728 vector->GetKind(slot)); |
723 } | 729 } |
724 | 730 |
725 void ConfigureMonomorphic(Handle<Name> name, Handle<Map> receiver_map); | 731 void ConfigureMonomorphic(Handle<Name> name, Handle<Map> receiver_map); |
726 | 732 |
727 InlineCacheState StateFromFeedback() const override; | 733 InlineCacheState StateFromFeedback() const override; |
728 }; | 734 }; |
729 | 735 |
730 inline BinaryOperationHint BinaryOperationHintFromFeedback(int type_feedback); | 736 inline BinaryOperationHint BinaryOperationHintFromFeedback(int type_feedback); |
731 inline CompareOperationHint CompareOperationHintFromFeedback(int type_feedback); | 737 inline CompareOperationHint CompareOperationHintFromFeedback(int type_feedback); |
732 | 738 |
733 } // namespace internal | 739 } // namespace internal |
734 } // namespace v8 | 740 } // namespace v8 |
735 | 741 |
736 #endif // V8_FEEDBACK_VECTOR_H_ | 742 #endif // V8_FEEDBACK_VECTOR_H_ |
OLD | NEW |