Index: src/feedback-vector.h |
diff --git a/src/feedback-vector.h b/src/feedback-vector.h |
index 9ac146d5113dbf70a325f2ac7a5d6b2b226b329e..a3cdace37538e1b29c77a9889d2e156eb51487e1 100644 |
--- a/src/feedback-vector.h |
+++ b/src/feedback-vector.h |
@@ -36,6 +36,7 @@ enum class FeedbackSlotKind { |
kCompareOp, |
kToBoolean, |
kStoreDataPropertyInLiteral, |
+ kTypeProfile, |
kCreateClosure, |
kLiteral, |
// This is a general purpose slot that occupies one feedback vector element. |
@@ -150,6 +151,11 @@ class FeedbackVectorSpecBase { |
return AddSlot(FeedbackSlotKind::kStoreDataPropertyInLiteral); |
} |
+ FeedbackSlot AddTypeProfileSlot() { |
+ DCHECK(FLAG_type_profile); |
+ return AddSlot(FeedbackSlotKind::kTypeProfile); |
+ } |
+ |
#ifdef OBJECT_PRINT |
// For gdb debugging. |
void Print(); |
@@ -250,6 +256,8 @@ class FeedbackMetadata : public FixedArray { |
static const char* Kind2String(FeedbackSlotKind kind); |
+ bool HasTypeProfileSlot(); |
+ |
private: |
static const int kFeedbackSlotKindBits = 5; |
STATIC_ASSERT(static_cast<int>(FeedbackSlotKind::kKindsNumber) < |
@@ -742,6 +750,30 @@ class StoreDataPropertyInLiteralICNexus : public FeedbackNexus { |
InlineCacheState StateFromFeedback() const override; |
}; |
+// For each assignment, store the type of the value in the collection of types |
+// in the feedback vector. |
+class CollectTypeProfileNexus : public FeedbackNexus { |
+ public: |
+ CollectTypeProfileNexus(Handle<FeedbackVector> vector, FeedbackSlot slot) |
+ : FeedbackNexus(vector, slot) { |
+ DCHECK_EQ(FeedbackSlotKind::kTypeProfile, vector->GetKind(slot)); |
+ } |
+ CollectTypeProfileNexus(FeedbackVector* vector, FeedbackSlot slot) |
+ : FeedbackNexus(vector, slot) { |
+ DCHECK_EQ(FeedbackSlotKind::kTypeProfile, vector->GetKind(slot)); |
+ } |
+ |
+ // Add a type to the list of types. |
+ void Collect(Handle<Name> type); |
+ |
+ // Dump the types to stdout. |
+ // TODO(franzih): pass this information to the debugger protocol instead of |
+ // stdout. |
+ void Print() const; |
+ |
+ InlineCacheState StateFromFeedback() const override; |
+}; |
+ |
inline BinaryOperationHint BinaryOperationHintFromFeedback(int type_feedback); |
inline CompareOperationHint CompareOperationHintFromFeedback(int type_feedback); |