| 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);
|
|
|
|
|