| Index: src/type-feedback-vector.h
|
| diff --git a/src/type-feedback-vector.h b/src/type-feedback-vector.h
|
| index a6db1f8e19ddb48b2413bb414ececcb9d9ee2c4b..20ef7b20ab9cd229abd87dc75feb40341a9474ca 100644
|
| --- a/src/type-feedback-vector.h
|
| +++ b/src/type-feedback-vector.h
|
| @@ -39,6 +39,30 @@ enum class FeedbackVectorSlotKind {
|
| KINDS_NUMBER // Last value indicating number of kinds.
|
| };
|
|
|
| +inline bool IsCallICKind(FeedbackVectorSlotKind kind) {
|
| + return kind == FeedbackVectorSlotKind::CALL_IC;
|
| +}
|
| +
|
| +inline bool IsLoadICKind(FeedbackVectorSlotKind kind) {
|
| + return kind == FeedbackVectorSlotKind::LOAD_IC;
|
| +}
|
| +
|
| +inline bool IsLoadGlobalICKind(FeedbackVectorSlotKind kind) {
|
| + return kind == FeedbackVectorSlotKind::LOAD_GLOBAL_IC;
|
| +}
|
| +
|
| +inline bool IsKeyedLoadICKind(FeedbackVectorSlotKind kind) {
|
| + return kind == FeedbackVectorSlotKind::KEYED_LOAD_IC;
|
| +}
|
| +
|
| +inline bool IsStoreICKind(FeedbackVectorSlotKind kind) {
|
| + return kind == FeedbackVectorSlotKind::STORE_IC;
|
| +}
|
| +
|
| +inline bool IsKeyedStoreICKind(FeedbackVectorSlotKind kind) {
|
| + return kind == FeedbackVectorSlotKind::KEYED_STORE_IC;
|
| +}
|
| +
|
| std::ostream& operator<<(std::ostream& os, FeedbackVectorSlotKind kind);
|
|
|
|
|
| @@ -259,6 +283,17 @@ class TypeFeedbackVector : public FixedArray {
|
| static Handle<TypeFeedbackVector> Copy(Isolate* isolate,
|
| Handle<TypeFeedbackVector> vector);
|
|
|
| +#define DEFINE_SLOT_KIND_PREDICATE(Name) \
|
| + bool Name(FeedbackVectorSlot slot) const { return Name##Kind(GetKind(slot)); }
|
| +
|
| + DEFINE_SLOT_KIND_PREDICATE(IsCallIC)
|
| + DEFINE_SLOT_KIND_PREDICATE(IsLoadIC)
|
| + DEFINE_SLOT_KIND_PREDICATE(IsLoadGlobalIC)
|
| + DEFINE_SLOT_KIND_PREDICATE(IsKeyedLoadIC)
|
| + DEFINE_SLOT_KIND_PREDICATE(IsStoreIC)
|
| + DEFINE_SLOT_KIND_PREDICATE(IsKeyedStoreIC)
|
| +#undef DEFINE_SLOT_KIND_PREDICATE
|
| +
|
| #ifdef OBJECT_PRINT
|
| // For gdb debugging.
|
| void Print();
|
| @@ -375,6 +410,7 @@ class FeedbackNexus {
|
| return vector_handle_.is_null() ? vector_ : *vector_handle_;
|
| }
|
| FeedbackVectorSlot slot() const { return slot_; }
|
| + FeedbackVectorSlotKind kind() const { return vector()->GetKind(slot()); }
|
|
|
| InlineCacheState ic_state() const { return StateFromFeedback(); }
|
| bool IsUninitialized() const { return StateFromFeedback() == UNINITIALIZED; }
|
| @@ -430,11 +466,11 @@ class CallICNexus final : public FeedbackNexus {
|
| public:
|
| CallICNexus(Handle<TypeFeedbackVector> vector, FeedbackVectorSlot slot)
|
| : FeedbackNexus(vector, slot) {
|
| - DCHECK_EQ(FeedbackVectorSlotKind::CALL_IC, vector->GetKind(slot));
|
| + DCHECK(vector->IsCallIC(slot));
|
| }
|
| CallICNexus(TypeFeedbackVector* vector, FeedbackVectorSlot slot)
|
| : FeedbackNexus(vector, slot) {
|
| - DCHECK_EQ(FeedbackVectorSlotKind::CALL_IC, vector->GetKind(slot));
|
| + DCHECK(vector->IsCallIC(slot));
|
| }
|
|
|
| void Clear(Code* host);
|
| @@ -471,7 +507,7 @@ class LoadICNexus : public FeedbackNexus {
|
| public:
|
| LoadICNexus(Handle<TypeFeedbackVector> vector, FeedbackVectorSlot slot)
|
| : FeedbackNexus(vector, slot) {
|
| - DCHECK_EQ(FeedbackVectorSlotKind::LOAD_IC, vector->GetKind(slot));
|
| + DCHECK(vector->IsLoadIC(slot));
|
| }
|
| explicit LoadICNexus(Isolate* isolate)
|
| : FeedbackNexus(
|
| @@ -479,7 +515,7 @@ class LoadICNexus : public FeedbackNexus {
|
| FeedbackVectorSlot(TypeFeedbackVector::kDummyLoadICSlot)) {}
|
| LoadICNexus(TypeFeedbackVector* vector, FeedbackVectorSlot slot)
|
| : FeedbackNexus(vector, slot) {
|
| - DCHECK_EQ(FeedbackVectorSlotKind::LOAD_IC, vector->GetKind(slot));
|
| + DCHECK(vector->IsLoadIC(slot));
|
| }
|
|
|
| void Clear(Code* host);
|
| @@ -496,11 +532,11 @@ class LoadGlobalICNexus : public FeedbackNexus {
|
| public:
|
| LoadGlobalICNexus(Handle<TypeFeedbackVector> vector, FeedbackVectorSlot slot)
|
| : FeedbackNexus(vector, slot) {
|
| - DCHECK_EQ(FeedbackVectorSlotKind::LOAD_GLOBAL_IC, vector->GetKind(slot));
|
| + DCHECK(vector->IsLoadGlobalIC(slot));
|
| }
|
| LoadGlobalICNexus(TypeFeedbackVector* vector, FeedbackVectorSlot slot)
|
| : FeedbackNexus(vector, slot) {
|
| - DCHECK_EQ(FeedbackVectorSlotKind::LOAD_GLOBAL_IC, vector->GetKind(slot));
|
| + DCHECK(vector->IsLoadGlobalIC(slot));
|
| }
|
|
|
| int ExtractMaps(MapHandleList* maps) const final {
|
| @@ -529,7 +565,7 @@ class KeyedLoadICNexus : public FeedbackNexus {
|
| public:
|
| KeyedLoadICNexus(Handle<TypeFeedbackVector> vector, FeedbackVectorSlot slot)
|
| : FeedbackNexus(vector, slot) {
|
| - DCHECK_EQ(FeedbackVectorSlotKind::KEYED_LOAD_IC, vector->GetKind(slot));
|
| + DCHECK(vector->IsKeyedLoadIC(slot));
|
| }
|
| explicit KeyedLoadICNexus(Isolate* isolate)
|
| : FeedbackNexus(
|
| @@ -537,7 +573,7 @@ class KeyedLoadICNexus : public FeedbackNexus {
|
| FeedbackVectorSlot(TypeFeedbackVector::kDummyKeyedLoadICSlot)) {}
|
| KeyedLoadICNexus(TypeFeedbackVector* vector, FeedbackVectorSlot slot)
|
| : FeedbackNexus(vector, slot) {
|
| - DCHECK_EQ(FeedbackVectorSlotKind::KEYED_LOAD_IC, vector->GetKind(slot));
|
| + DCHECK(vector->IsKeyedLoadIC(slot));
|
| }
|
|
|
| void Clear(Code* host);
|
| @@ -561,7 +597,7 @@ class StoreICNexus : public FeedbackNexus {
|
| public:
|
| StoreICNexus(Handle<TypeFeedbackVector> vector, FeedbackVectorSlot slot)
|
| : FeedbackNexus(vector, slot) {
|
| - DCHECK_EQ(FeedbackVectorSlotKind::STORE_IC, vector->GetKind(slot));
|
| + DCHECK(vector->IsStoreIC(slot));
|
| }
|
| explicit StoreICNexus(Isolate* isolate)
|
| : FeedbackNexus(
|
| @@ -569,7 +605,7 @@ class StoreICNexus : public FeedbackNexus {
|
| FeedbackVectorSlot(TypeFeedbackVector::kDummyStoreICSlot)) {}
|
| StoreICNexus(TypeFeedbackVector* vector, FeedbackVectorSlot slot)
|
| : FeedbackNexus(vector, slot) {
|
| - DCHECK_EQ(FeedbackVectorSlotKind::STORE_IC, vector->GetKind(slot));
|
| + DCHECK(vector->IsStoreIC(slot));
|
| }
|
|
|
| void Clear(Code* host);
|
| @@ -587,7 +623,7 @@ class KeyedStoreICNexus : public FeedbackNexus {
|
| public:
|
| KeyedStoreICNexus(Handle<TypeFeedbackVector> vector, FeedbackVectorSlot slot)
|
| : FeedbackNexus(vector, slot) {
|
| - DCHECK_EQ(FeedbackVectorSlotKind::KEYED_STORE_IC, vector->GetKind(slot));
|
| + DCHECK(vector->IsKeyedStoreIC(slot));
|
| }
|
| explicit KeyedStoreICNexus(Isolate* isolate)
|
| : FeedbackNexus(
|
| @@ -595,7 +631,7 @@ class KeyedStoreICNexus : public FeedbackNexus {
|
| FeedbackVectorSlot(TypeFeedbackVector::kDummyKeyedStoreICSlot)) {}
|
| KeyedStoreICNexus(TypeFeedbackVector* vector, FeedbackVectorSlot slot)
|
| : FeedbackNexus(vector, slot) {
|
| - DCHECK_EQ(FeedbackVectorSlotKind::KEYED_STORE_IC, vector->GetKind(slot));
|
| + DCHECK(vector->IsKeyedStoreIC(slot));
|
| }
|
|
|
| void Clear(Code* host);
|
|
|