Index: src/ic/ic.h |
diff --git a/src/ic/ic.h b/src/ic/ic.h |
index b4bd2ddb7d62a122018955ddc2607ddc11dfe1c9..ffdb9ab63260f00c0d461fe1fe9fda9a5d598690 100644 |
--- a/src/ic/ic.h |
+++ b/src/ic/ic.h |
@@ -47,14 +47,12 @@ class IC { |
#ifdef DEBUG |
bool IsLoadStub() const { |
- return target()->is_load_stub() || target()->is_keyed_load_stub(); |
+ return kind_ == Code::LOAD_IC || kind_ == Code::KEYED_LOAD_IC; |
} |
- |
bool IsStoreStub() const { |
- return target()->is_store_stub() || target()->is_keyed_store_stub(); |
+ return kind_ == Code::STORE_IC || kind_ == Code::KEYED_STORE_IC; |
} |
- |
- bool IsCallStub() const { return target()->is_call_stub(); } |
+ bool IsCallStub() const { return kind_ == Code::CALL_IC; } |
#endif |
static inline Handle<Map> GetHandlerCacheHolder(Handle<Map> receiver_map, |
@@ -82,9 +80,6 @@ class IC { |
} |
protected: |
- // Get the call-site target; used for determining the state. |
- Handle<Code> target() const { return target_; } |
- |
Address fp() const { return fp_; } |
Address pc() const { return *pc_address_; } |
Isolate* isolate() const { return isolate_; } |
@@ -101,13 +96,12 @@ class IC { |
// Set the call-site target. |
inline void set_target(Code* code); |
- bool is_target_set() { return target_set_; } |
bool is_vector_set() { return vector_set_; } |
bool UseVector() const { |
bool use = ICUseVector(kind()); |
// If we are supposed to use the nexus, verify the nexus is non-null. |
- DCHECK(!use || nexus_ != NULL); |
+ DCHECK(!use || nexus_ != nullptr); |
return use; |
} |
@@ -139,9 +133,6 @@ class IC { |
Address constant_pool); |
static inline void SetTargetAtAddress(Address address, Code* target, |
Address constant_pool); |
- static void OnTypeFeedbackChanged(Isolate* isolate, Address address, |
- State old_state, State new_state, |
- bool target_remains_ic_stub); |
// As a vector-based IC, type feedback must be updated differently. |
static void OnTypeFeedbackChanged(Isolate* isolate, Code* host); |
static void PostPatching(Address address, Code* target, Code* old_target); |
@@ -164,21 +155,18 @@ class IC { |
bool IsTransitionOfMonomorphicTarget(Map* source_map, Map* target_map); |
void PatchCache(Handle<Name> name, Handle<Code> code); |
Code::Kind kind() const { return kind_; } |
+ bool is_keyed() const { |
+ return kind_ == Code::KEYED_LOAD_IC || kind_ == Code::KEYED_STORE_IC; |
+ } |
Code::Kind handler_kind() const { |
if (kind_ == Code::KEYED_LOAD_IC) return Code::LOAD_IC; |
DCHECK(kind_ == Code::LOAD_IC || kind_ == Code::STORE_IC || |
kind_ == Code::KEYED_STORE_IC); |
return kind_; |
} |
- virtual Handle<Code> megamorphic_stub() { |
- UNREACHABLE(); |
- return Handle<Code>::null(); |
- } |
- |
bool ShouldRecomputeHandler(Handle<Object> receiver, Handle<String> name); |
ExtraICState extra_ic_state() const { return extra_ic_state_; } |
- void set_extra_ic_state(ExtraICState state) { extra_ic_state_ = state; } |
Handle<Map> receiver_map() { return receiver_map_; } |
void update_receiver_map(Handle<Object> receiver) { |
@@ -201,8 +189,6 @@ class IC { |
return target_maps_.length() > 0 ? *target_maps_.at(0) : NULL; |
} |
- inline void UpdateTarget(); |
- |
Handle<TypeFeedbackVector> vector() const { return nexus()->vector_handle(); } |
FeedbackVectorSlot slot() const { return nexus()->slot(); } |
State saved_state() const { |
@@ -216,25 +202,17 @@ class IC { |
FeedbackNexus* nexus() const { return nexus_; } |
inline Code* get_host(); |
+ inline Code* target() const; |
private: |
- inline Code* raw_target() const; |
inline Address constant_pool() const; |
inline Address raw_constant_pool() const; |
void FindTargetMaps() { |
if (target_maps_set_) return; |
target_maps_set_ = true; |
- if (UseVector()) { |
- nexus()->ExtractMaps(&target_maps_); |
- } else { |
- if (state_ == MONOMORPHIC) { |
- Map* map = target_->FindFirstMap(); |
- if (map != NULL) target_maps_.Add(handle(map)); |
- } else if (state_ != UNINITIALIZED && state_ != PREMONOMORPHIC) { |
- target_->FindAllMaps(&target_maps_); |
- } |
- } |
+ DCHECK(UseVector()); |
+ nexus()->ExtractMaps(&target_maps_); |
} |
// Frame pointer for the frame that uses (calls) the IC. |
@@ -252,9 +230,6 @@ class IC { |
Isolate* isolate_; |
- // The original code target that missed. |
- Handle<Code> target_; |
- bool target_set_; |
bool vector_set_; |
State old_state_; // For saving if we marked as prototype failure. |
State state_; |
@@ -330,8 +305,6 @@ class LoadIC : public IC { |
static void Clear(Isolate* isolate, Code* host, LoadICNexus* nexus); |
protected: |
- inline void set_target(Code* code); |
- |
Handle<Code> slow_stub() const { |
if (kind() == Code::LOAD_IC) { |
return isolate()->builtins()->LoadIC_Slow(); |
@@ -341,8 +314,6 @@ class LoadIC : public IC { |
} |
} |
- Handle<Code> megamorphic_stub() override; |
- |
// Update the inline cache and the global stub cache based on the |
// lookup result. |
void UpdateCaches(LookupIterator* lookup); |
@@ -377,7 +348,6 @@ class KeyedLoadIC : public LoadIC { |
KeyedLoadICNexus* nexus = NULL) |
: LoadIC(depth, isolate, nexus) { |
DCHECK(nexus != NULL); |
- DCHECK(target()->is_keyed_load_stub()); |
} |
MUST_USE_RESULT MaybeHandle<Object> Load(Handle<Object> object, |
@@ -454,7 +424,6 @@ class StoreIC : public IC { |
protected: |
// Stub accessors. |
- Handle<Code> megamorphic_stub() override; |
Handle<Code> slow_stub() const; |
// Update the inline cache and the global stub cache based on the |
@@ -465,8 +434,6 @@ class StoreIC : public IC { |
CacheHolderFlag cache_holder) override; |
private: |
- inline void set_target(Code* code); |
- |
friend class IC; |
}; |
@@ -501,9 +468,7 @@ class KeyedStoreIC : public StoreIC { |
KeyedStoreIC(FrameDepth depth, Isolate* isolate, |
KeyedStoreICNexus* nexus = NULL) |
- : StoreIC(depth, isolate, nexus) { |
- DCHECK(target()->is_keyed_store_stub()); |
- } |
+ : StoreIC(depth, isolate, nexus) {} |
MUST_USE_RESULT MaybeHandle<Object> Store(Handle<Object> object, |
Handle<Object> name, |
@@ -531,8 +496,6 @@ class KeyedStoreIC : public StoreIC { |
KeyedAccessStoreMode store_mode); |
private: |
- inline void set_target(Code* code); |
- |
Handle<Map> ComputeTransitionedMap(Handle<Map> map, |
KeyedAccessStoreMode store_mode); |