| Index: src/type-feedback-vector.h
|
| diff --git a/src/type-feedback-vector.h b/src/type-feedback-vector.h
|
| index ee2d20030b4dff5ee07dffef506401be8606ddc8..a6f72210fc9f2545d77ea92e885a6f801071fadd 100644
|
| --- a/src/type-feedback-vector.h
|
| +++ b/src/type-feedback-vector.h
|
| @@ -294,6 +294,10 @@ class FeedbackNexus {
|
| virtual bool FindHandlers(CodeHandleList* code_list, int length = -1) const;
|
| virtual Name* FindFirstName() const { return NULL; }
|
|
|
| + virtual void ConfigureUninitialized();
|
| + virtual void ConfigurePremonomorphic();
|
| + virtual void ConfigureMegamorphic();
|
| +
|
| Object* GetFeedback() const { return vector()->Get(slot()); }
|
| Object* GetFeedbackExtra() const {
|
| DCHECK(TypeFeedbackVector::elements_per_ic_slot() > 1);
|
| @@ -349,8 +353,6 @@ class CallICNexus : public FeedbackNexus {
|
|
|
| void Clear(Code* host);
|
|
|
| - void ConfigureUninitialized();
|
| - void ConfigureGeneric();
|
| void ConfigureMonomorphicArray();
|
| void ConfigureMonomorphic(Handle<JSFunction> function);
|
|
|
| @@ -363,8 +365,7 @@ class CallICNexus : public FeedbackNexus {
|
| MaybeHandle<Code> FindHandlerForMap(Handle<Map> map) const override {
|
| return MaybeHandle<Code>();
|
| }
|
| - virtual bool FindHandlers(CodeHandleList* code_list,
|
| - int length = -1) const override {
|
| + bool FindHandlers(CodeHandleList* code_list, int length = -1) const override {
|
| return length == 0;
|
| }
|
|
|
| @@ -385,8 +386,6 @@ class LoadICNexus : public FeedbackNexus {
|
|
|
| void Clear(Code* host);
|
|
|
| - void ConfigureMegamorphic();
|
| - void ConfigurePremonomorphic();
|
| void ConfigureMonomorphic(Handle<Map> receiver_map, Handle<Code> handler);
|
|
|
| void ConfigurePolymorphic(MapHandleList* maps, CodeHandleList* handlers);
|
| @@ -408,8 +407,53 @@ class KeyedLoadICNexus : public FeedbackNexus {
|
|
|
| void Clear(Code* host);
|
|
|
| - void ConfigureMegamorphic();
|
| - void ConfigurePremonomorphic();
|
| + // name can be a null handle for element loads.
|
| + void ConfigureMonomorphic(Handle<Name> name, Handle<Map> receiver_map,
|
| + Handle<Code> handler);
|
| + // name can be null.
|
| + void ConfigurePolymorphic(Handle<Name> name, MapHandleList* maps,
|
| + CodeHandleList* handlers);
|
| +
|
| + InlineCacheState StateFromFeedback() const override;
|
| + Name* FindFirstName() const override;
|
| +};
|
| +
|
| +
|
| +class StoreICNexus : public FeedbackNexus {
|
| + public:
|
| + StoreICNexus(Handle<TypeFeedbackVector> vector, FeedbackVectorICSlot slot)
|
| + : FeedbackNexus(vector, slot) {
|
| + DCHECK(vector->GetKind(slot) == Code::STORE_IC);
|
| + }
|
| + StoreICNexus(TypeFeedbackVector* vector, FeedbackVectorICSlot slot)
|
| + : FeedbackNexus(vector, slot) {
|
| + DCHECK(vector->GetKind(slot) == Code::STORE_IC);
|
| + }
|
| +
|
| + void Clear(Code* host);
|
| +
|
| + void ConfigureMonomorphic(Handle<Map> receiver_map, Handle<Code> handler);
|
| +
|
| + void ConfigurePolymorphic(MapHandleList* maps, CodeHandleList* handlers);
|
| +
|
| + InlineCacheState StateFromFeedback() const override;
|
| +};
|
| +
|
| +
|
| +class KeyedStoreICNexus : public FeedbackNexus {
|
| + public:
|
| + KeyedStoreICNexus(Handle<TypeFeedbackVector> vector,
|
| + FeedbackVectorICSlot slot)
|
| + : FeedbackNexus(vector, slot) {
|
| + DCHECK(vector->GetKind(slot) == Code::KEYED_STORE_IC);
|
| + }
|
| + KeyedStoreICNexus(TypeFeedbackVector* vector, FeedbackVectorICSlot slot)
|
| + : FeedbackNexus(vector, slot) {
|
| + DCHECK(vector->GetKind(slot) == Code::KEYED_STORE_IC);
|
| + }
|
| +
|
| + void Clear(Code* host);
|
| +
|
| // name can be a null handle for element loads.
|
| void ConfigureMonomorphic(Handle<Name> name, Handle<Map> receiver_map,
|
| Handle<Code> handler);
|
|
|