Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1327)

Unified Diff: src/type-feedback-vector.h

Issue 1384673002: The metadata part of TypeFeedbackVector is extracted to TypeFeedbackMetadata array. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Cleanup Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/objects-printer.cc ('k') | src/type-feedback-vector.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/type-feedback-vector.h
diff --git a/src/type-feedback-vector.h b/src/type-feedback-vector.h
index f9a3fe3e4623d14a20032cabead34132f6686f80..77895e089f7284ac4d7c15ce7ae61f7cb4a4b793 100644
--- a/src/type-feedback-vector.h
+++ b/src/type-feedback-vector.h
@@ -121,13 +121,60 @@ class FeedbackVectorSpec : public FeedbackVectorSpecBase<FeedbackVectorSpec> {
};
-// The shape of the TypeFeedbackVector is an array with:
+// The shape of the TypeFeedbackMetadata is an array with:
// 0: slot_count
+// 1..N: slot kinds packed into a bit vector
+//
+class TypeFeedbackMetadata : public FixedArray {
+ public:
+ // Casting.
+ static inline TypeFeedbackMetadata* cast(Object* obj);
+
+ static const int kSlotsCountIndex = 0;
+ static const int kReservedIndexCount = 1;
+
+ // Returns number of feedback vector elements used by given slot kind.
+ static inline int GetSlotSize(FeedbackVectorSlotKind kind);
+
+ bool SpecDiffersFrom(const FeedbackVectorSpec* other_spec) const;
+
+ // Returns number of slots in the vector.
+ inline int slot_count() const;
+
+ // Returns slot kind for given slot.
+ FeedbackVectorSlotKind GetKind(FeedbackVectorSlot slot) const;
+
+ template <typename Spec>
+ static Handle<TypeFeedbackMetadata> New(Isolate* isolate, const Spec* spec);
+
+#ifdef OBJECT_PRINT
+ // For gdb debugging.
+ void Print();
+#endif // OBJECT_PRINT
+
+ DECLARE_PRINTER(TypeFeedbackMetadata)
+
+ static const char* Kind2String(FeedbackVectorSlotKind kind);
+
+ private:
+ static const int kFeedbackVectorSlotKindBits = 3;
+ STATIC_ASSERT(static_cast<int>(FeedbackVectorSlotKind::KINDS_NUMBER) <
+ (1 << kFeedbackVectorSlotKindBits));
+
+ void SetKind(FeedbackVectorSlot slot, FeedbackVectorSlotKind kind);
+
+ typedef BitSetComputer<FeedbackVectorSlotKind, kFeedbackVectorSlotKindBits,
+ kSmiValueSize, uint32_t> VectorICComputer;
+
+ DISALLOW_IMPLICIT_CONSTRUCTORS(TypeFeedbackMetadata);
+};
+
+
+// The shape of the TypeFeedbackVector is an array with:
+// 0: feedback metadata
// 1: ics_with_types
// 2: ics_with_generic_info
-// 3: slots metadata (a bit vector of slot kinds)
-// ...
-// N: feedback slot #0 (N >= 3)
+// 3: feedback slot #0 (N >= 3)
// ...
// N + slot_count - 1: feedback slot #(slot_count-1)
//
@@ -136,26 +183,22 @@ class TypeFeedbackVector : public FixedArray {
// Casting.
static inline TypeFeedbackVector* cast(Object* obj);
- static const int kSlotsCountIndex = 0;
+ static const int kMetadataIndex = 0;
static const int kWithTypesIndex = 1;
static const int kGenericCountIndex = 2;
static const int kReservedIndexCount = 3;
- // Returns number of feedback vector elements used by given slot kind.
- static inline int GetSlotSize(FeedbackVectorSlotKind kind);
-
inline int ic_with_type_info_count();
inline void change_ic_with_type_info_count(int delta);
inline int ic_generic_count();
inline void change_ic_generic_count(int delta);
- inline int ic_metadata_length() const;
-
- bool SpecDiffersFrom(const FeedbackVectorSpec* other_spec) const;
inline bool is_empty() const;
// Returns number of slots in the vector.
- inline int Slots() const;
+ inline int slot_count() const;
+
+ inline TypeFeedbackMetadata* metadata() const;
// Conversion from a slot to an integer index to the underlying array.
inline int GetIndex(FeedbackVectorSlot slot) const;
@@ -169,10 +212,10 @@ class TypeFeedbackVector : public FixedArray {
WriteBarrierMode mode = UPDATE_WRITE_BARRIER);
// Returns slot kind for given slot.
- FeedbackVectorSlotKind GetKind(FeedbackVectorSlot slot) const;
+ inline FeedbackVectorSlotKind GetKind(FeedbackVectorSlot slot) const;
- template <typename Spec>
- static Handle<TypeFeedbackVector> New(Isolate* isolate, const Spec* spec);
+ static Handle<TypeFeedbackVector> New(Isolate* isolate,
+ Handle<TypeFeedbackMetadata> metadata);
static Handle<TypeFeedbackVector> Copy(Isolate* isolate,
Handle<TypeFeedbackVector> vector);
@@ -222,18 +265,7 @@ class TypeFeedbackVector : public FixedArray {
static Handle<TypeFeedbackVector> CreatePushAppliedArgumentsVector(
Isolate* isolate);
- static const char* Kind2String(FeedbackVectorSlotKind kind);
-
private:
- static const int kFeedbackVectorSlotKindBits = 3;
- STATIC_ASSERT(static_cast<int>(FeedbackVectorSlotKind::KINDS_NUMBER) <
- (1 << kFeedbackVectorSlotKindBits));
-
- void SetKind(FeedbackVectorSlot slot, FeedbackVectorSlotKind kind);
-
- typedef BitSetComputer<FeedbackVectorSlotKind, kFeedbackVectorSlotKindBits,
- kSmiValueSize, uint32_t> VectorICComputer;
-
void ClearSlotsImpl(SharedFunctionInfo* shared, bool force_clear);
DISALLOW_IMPLICIT_CONSTRUCTORS(TypeFeedbackVector);
@@ -257,17 +289,17 @@ STATIC_ASSERT(Name::kHashNotComputedMask == kHeapObjectTag);
class TypeFeedbackMetadataIterator {
public:
- explicit TypeFeedbackMetadataIterator(Handle<TypeFeedbackVector> metadata)
+ explicit TypeFeedbackMetadataIterator(Handle<TypeFeedbackMetadata> metadata)
: metadata_handle_(metadata),
slot_(FeedbackVectorSlot(0)),
slot_kind_(FeedbackVectorSlotKind::INVALID) {}
- explicit TypeFeedbackMetadataIterator(TypeFeedbackVector* metadata)
+ explicit TypeFeedbackMetadataIterator(TypeFeedbackMetadata* metadata)
: metadata_(metadata),
slot_(FeedbackVectorSlot(0)),
slot_kind_(FeedbackVectorSlotKind::INVALID) {}
- bool HasNext() const { return slot_.ToInt() < metadata()->Slots(); }
+ bool HasNext() const { return slot_.ToInt() < metadata()->slot_count(); }
FeedbackVectorSlot Next() {
DCHECK(HasNext());
@@ -285,18 +317,18 @@ class TypeFeedbackMetadataIterator {
}
// Returns entry size of the last slot returned by Next().
- int entry_size() const { return TypeFeedbackVector::GetSlotSize(kind()); }
+ int entry_size() const { return TypeFeedbackMetadata::GetSlotSize(kind()); }
private:
- TypeFeedbackVector* metadata() const {
+ TypeFeedbackMetadata* metadata() const {
return !metadata_handle_.is_null() ? *metadata_handle_ : metadata_;
}
// The reason for having a handle and a raw pointer to the meta data is
// to have a single iterator implementation for both "handlified" and raw
// pointer use cases.
- Handle<TypeFeedbackVector> metadata_handle_;
- TypeFeedbackVector* metadata_;
+ Handle<TypeFeedbackMetadata> metadata_handle_;
+ TypeFeedbackMetadata* metadata_;
FeedbackVectorSlot slot_;
FeedbackVectorSlotKind slot_kind_;
};
« no previous file with comments | « src/objects-printer.cc ('k') | src/type-feedback-vector.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698