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

Unified Diff: src/objects.h

Issue 1846963002: Use a dictionary-mode code cache on the map rather than a dual system. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Addressed comment Created 4 years, 8 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/mips64/code-stubs-mips64.cc ('k') | src/objects.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/objects.h
diff --git a/src/objects.h b/src/objects.h
index 01d8f6b57969271e720b6ca0e63220142fc9b843..529dfa6cc2577fa8fa904abf304dbe87b9b8f30f 100644
--- a/src/objects.h
+++ b/src/objects.h
@@ -398,8 +398,6 @@ const int kStubMinorKeyBits = kSmiValueSize - kStubMajorKeyBits - 1;
V(ALLOCATION_MEMENTO_TYPE) \
V(ALLOCATION_SITE_TYPE) \
V(SCRIPT_TYPE) \
- V(CODE_CACHE_TYPE) \
- V(POLYMORPHIC_CODE_CACHE_TYPE) \
V(TYPE_FEEDBACK_INFO_TYPE) \
V(ALIASED_ARGUMENTS_ENTRY_TYPE) \
V(BOX_TYPE) \
@@ -514,8 +512,6 @@ const int kStubMinorKeyBits = kSmiValueSize - kStubMajorKeyBits - 1;
V(SCRIPT, Script, script) \
V(ALLOCATION_SITE, AllocationSite, allocation_site) \
V(ALLOCATION_MEMENTO, AllocationMemento, allocation_memento) \
- V(CODE_CACHE, CodeCache, code_cache) \
- V(POLYMORPHIC_CODE_CACHE, PolymorphicCodeCache, polymorphic_code_cache) \
V(TYPE_FEEDBACK_INFO, TypeFeedbackInfo, type_feedback_info) \
V(ALIASED_ARGUMENTS_ENTRY, AliasedArgumentsEntry, aliased_arguments_entry) \
V(DEBUG_INFO, DebugInfo, debug_info) \
@@ -685,8 +681,6 @@ enum InstanceType {
ALLOCATION_SITE_TYPE,
ALLOCATION_MEMENTO_TYPE,
SCRIPT_TYPE,
- CODE_CACHE_TYPE,
- POLYMORPHIC_CODE_CACHE_TYPE,
TYPE_FEEDBACK_INFO_TYPE,
ALIASED_ARGUMENTS_ENTRY_TYPE,
BOX_TYPE,
@@ -981,7 +975,6 @@ template <class C> inline bool Is(Object* obj);
V(NormalizedMapCache) \
V(CompilationCacheTable) \
V(CodeCacheHashTable) \
- V(PolymorphicCodeCacheHashTable) \
V(MapCache) \
V(JSGlobalObject) \
V(JSGlobalProxy) \
@@ -4941,18 +4934,11 @@ class Code: public HeapObject {
static const char* Kind2String(Kind kind);
- // Types of stubs.
- enum StubType {
- NORMAL,
- FAST
- };
-
static const int kPrologueOffsetNotSet = -1;
#ifdef ENABLE_DISASSEMBLER
// Printing
static const char* ICState2String(InlineCacheState state);
- static const char* StubType2String(StubType type);
static void PrintExtraICState(std::ostream& os, // NOLINT
Kind kind, ExtraICState extra);
void Disassemble(const char* name, std::ostream& os); // NOLINT
@@ -5022,8 +5008,6 @@ class Code: public HeapObject {
inline InlineCacheState ic_state(); // Only valid for IC stubs.
inline ExtraICState extra_ic_state(); // Only valid for IC stubs.
- inline StubType type(); // Only valid for monomorphic IC stubs.
-
// Testers for IC stub kinds.
inline bool is_inline_cache_stub();
inline bool is_debug_stub();
@@ -5179,25 +5163,22 @@ class Code: public HeapObject {
// Flags operations.
static inline Flags ComputeFlags(
Kind kind, InlineCacheState ic_state = UNINITIALIZED,
- ExtraICState extra_ic_state = kNoExtraICState, StubType type = NORMAL,
+ ExtraICState extra_ic_state = kNoExtraICState,
CacheHolderFlag holder = kCacheOnReceiver);
static inline Flags ComputeMonomorphicFlags(
Kind kind, ExtraICState extra_ic_state = kNoExtraICState,
- CacheHolderFlag holder = kCacheOnReceiver, StubType type = NORMAL);
+ CacheHolderFlag holder = kCacheOnReceiver);
static inline Flags ComputeHandlerFlags(
- Kind handler_kind, StubType type = NORMAL,
- CacheHolderFlag holder = kCacheOnReceiver);
+ Kind handler_kind, CacheHolderFlag holder = kCacheOnReceiver);
static inline InlineCacheState ExtractICStateFromFlags(Flags flags);
- static inline StubType ExtractTypeFromFlags(Flags flags);
static inline CacheHolderFlag ExtractCacheHolderFromFlags(Flags flags);
static inline Kind ExtractKindFromFlags(Flags flags);
static inline ExtraICState ExtractExtraICStateFromFlags(Flags flags);
- static inline Flags RemoveTypeFromFlags(Flags flags);
- static inline Flags RemoveTypeAndHolderFromFlags(Flags flags);
+ static inline Flags RemoveHolderFromFlags(Flags flags);
// Convert a target address into a code object.
static inline Code* GetCodeFromTargetAddress(Address address);
@@ -5362,12 +5343,11 @@ class Code: public HeapObject {
// Flags layout. BitField<type, shift, size>.
class ICStateField : public BitField<InlineCacheState, 0, 3> {};
- class TypeField : public BitField<StubType, 3, 1> {};
- class CacheHolderField : public BitField<CacheHolderFlag, 4, 2> {};
- class KindField : public BitField<Kind, 6, 5> {};
+ class CacheHolderField : public BitField<CacheHolderFlag, 3, 2> {};
+ class KindField : public BitField<Kind, 5, 5> {};
class ExtraICStateField
- : public BitField<ExtraICState, 11, PlatformSmiTagging::kSmiValueSize -
- 11 + 1> {}; // NOLINT
+ : public BitField<ExtraICState, 10, PlatformSmiTagging::kSmiValueSize -
+ 10 + 1> {}; // NOLINT
// KindSpecificFlags1 layout (STUB, BUILTIN and OPTIMIZED_FUNCTION)
static const int kStackSlotsFirstBit = 0;
@@ -5417,8 +5397,7 @@ class Code: public HeapObject {
static const int kMaxArguments = (1 << kArgumentsBits) - 1;
// This constant should be encodable in an ARM instruction.
- static const int kFlagsNotUsedInLookup =
- TypeField::kMask | CacheHolderField::kMask;
+ static const int kFlagsNotUsedInLookup = CacheHolderField::kMask;
private:
friend class RelocIterator;
@@ -6078,15 +6057,7 @@ class Map: public HeapObject {
static void EnsureDescriptorSlack(Handle<Map> map, int slack);
- // Returns the found code or undefined if absent.
- Object* FindInCodeCache(Name* name, Code::Flags flags);
-
- // Returns the non-negative index of the code object if it is in the
- // cache and -1 otherwise.
- int IndexInCodeCache(Object* name, Code* code);
-
- // Removes a code object from the code cache at the given index.
- void RemoveFromCodeCache(Name* name, Code* code, int index);
+ Code* LookupInCodeCache(Name* name, Code::Flags code);
// Computes a hash value for this map, to be used in HashTables and such.
int Hash();
@@ -8129,57 +8100,6 @@ class CompilationCacheTable: public HashTable<CompilationCacheTable,
};
-class CodeCache: public Struct {
- public:
- DECL_ACCESSORS(default_cache, FixedArray)
- DECL_ACCESSORS(normal_type_cache, Object)
-
- // Add the code object to the cache.
- static void Update(
- Handle<CodeCache> cache, Handle<Name> name, Handle<Code> code);
-
- // Lookup code object in the cache. Returns code object if found and undefined
- // if not.
- Object* Lookup(Name* name, Code::Flags flags);
-
- // Get the internal index of a code object in the cache. Returns -1 if the
- // code object is not in that cache. This index can be used to later call
- // RemoveByIndex. The cache cannot be modified between a call to GetIndex and
- // RemoveByIndex.
- int GetIndex(Object* name, Code* code);
-
- // Remove an object from the cache with the provided internal index.
- void RemoveByIndex(Object* name, Code* code, int index);
-
- DECLARE_CAST(CodeCache)
-
- // Dispatched behavior.
- DECLARE_PRINTER(CodeCache)
- DECLARE_VERIFIER(CodeCache)
-
- static const int kDefaultCacheOffset = HeapObject::kHeaderSize;
- static const int kNormalTypeCacheOffset =
- kDefaultCacheOffset + kPointerSize;
- static const int kSize = kNormalTypeCacheOffset + kPointerSize;
-
- private:
- static void UpdateDefaultCache(
- Handle<CodeCache> code_cache, Handle<Name> name, Handle<Code> code);
- static void UpdateNormalTypeCache(
- Handle<CodeCache> code_cache, Handle<Name> name, Handle<Code> code);
- Object* LookupDefaultCache(Name* name, Code::Flags flags);
- Object* LookupNormalTypeCache(Name* name, Code::Flags flags);
-
- // Code cache layout of the default cache. Elements are alternating name and
- // code objects for non normal load/store/call IC's.
- static const int kCodeCacheEntrySize = 2;
- static const int kCodeCacheEntryNameOffset = 0;
- static const int kCodeCacheEntryCodeOffset = 1;
-
- DISALLOW_IMPLICIT_CONSTRUCTORS(CodeCache);
-};
-
-
class CodeCacheHashTableShape : public BaseShape<HashTableKey*> {
public:
static inline bool IsMatch(HashTableKey* key, Object* value) {
@@ -8197,7 +8117,11 @@ class CodeCacheHashTableShape : public BaseShape<HashTableKey*> {
static inline Handle<Object> AsHandle(Isolate* isolate, HashTableKey* key);
static const int kPrefixSize = 0;
- static const int kEntrySize = 2;
+ // The both the key (name + flags) and value (code object) can be derived from
+ // the fixed array that stores both the name and code.
+ // TODO(verwaest): Don't allocate a fixed array but inline name and code.
+ // Rewrite IsMatch to get table + index as input rather than just the raw key.
+ static const int kEntrySize = 1;
};
@@ -8205,73 +8129,23 @@ class CodeCacheHashTable: public HashTable<CodeCacheHashTable,
CodeCacheHashTableShape,
HashTableKey*> {
public:
- Object* Lookup(Name* name, Code::Flags flags);
static Handle<CodeCacheHashTable> Put(
Handle<CodeCacheHashTable> table,
Handle<Name> name,
Handle<Code> code);
- int GetIndex(Name* name, Code::Flags flags);
- void RemoveByIndex(int index);
+ Code* Lookup(Name* name, Code::Flags flags);
DECLARE_CAST(CodeCacheHashTable)
// Initial size of the fixed array backing the hash table.
- static const int kInitialSize = 64;
+ static const int kInitialSize = 16;
private:
DISALLOW_IMPLICIT_CONSTRUCTORS(CodeCacheHashTable);
};
-class PolymorphicCodeCache: public Struct {
- public:
- DECL_ACCESSORS(cache, Object)
-
- static void Update(Handle<PolymorphicCodeCache> cache,
- MapHandleList* maps,
- Code::Flags flags,
- Handle<Code> code);
-
-
- // Returns an undefined value if the entry is not found.
- Handle<Object> Lookup(MapHandleList* maps, Code::Flags flags);
-
- DECLARE_CAST(PolymorphicCodeCache)
-
- // Dispatched behavior.
- DECLARE_PRINTER(PolymorphicCodeCache)
- DECLARE_VERIFIER(PolymorphicCodeCache)
-
- static const int kCacheOffset = HeapObject::kHeaderSize;
- static const int kSize = kCacheOffset + kPointerSize;
-
- private:
- DISALLOW_IMPLICIT_CONSTRUCTORS(PolymorphicCodeCache);
-};
-
-
-class PolymorphicCodeCacheHashTable
- : public HashTable<PolymorphicCodeCacheHashTable,
- CodeCacheHashTableShape,
- HashTableKey*> {
- public:
- Object* Lookup(MapHandleList* maps, int code_kind);
-
- static Handle<PolymorphicCodeCacheHashTable> Put(
- Handle<PolymorphicCodeCacheHashTable> hash_table,
- MapHandleList* maps,
- int code_kind,
- Handle<Code> code);
-
- DECLARE_CAST(PolymorphicCodeCacheHashTable)
-
- static const int kInitialSize = 64;
- private:
- DISALLOW_IMPLICIT_CONSTRUCTORS(PolymorphicCodeCacheHashTable);
-};
-
-
class TypeFeedbackInfo: public Struct {
public:
inline int ic_total_count();
« no previous file with comments | « src/mips64/code-stubs-mips64.cc ('k') | src/objects.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698