Index: src/ic/ic.cc |
diff --git a/src/ic/ic.cc b/src/ic/ic.cc |
index 68c7cc2c45a56af009939f3cd3d0c13774eaa886..8fd6e180b289c10607498ba5b6af5c94ee4feb31 100644 |
--- a/src/ic/ic.cc |
+++ b/src/ic/ic.cc |
@@ -606,11 +606,11 @@ void CompareIC::Clear(Isolate* isolate, Address address, Code* target, |
// static |
-Handle<Code> KeyedLoadIC::generic_stub(Isolate* isolate) { |
+Handle<Code> KeyedLoadIC::megamorphic_stub(Isolate* isolate) { |
if (FLAG_compiled_keyed_generic_loads) { |
return KeyedLoadGenericStub(isolate).GetCode(); |
} else { |
- return isolate->builtins()->KeyedLoadIC_Generic(); |
+ return isolate->builtins()->KeyedLoadIC_Megamorphic(); |
} |
} |
@@ -706,7 +706,7 @@ MaybeHandle<Object> LoadIC::Load(Handle<Object> object, Handle<Name> name) { |
if (UseVector()) { |
ConfigureVectorState(GENERIC); |
} else { |
- set_target(*KeyedLoadIC::generic_stub(isolate())); |
+ set_target(*KeyedLoadIC::megamorphic_stub(isolate())); |
} |
TRACE_IC("LoadIC", name); |
TRACE_GENERIC_IC(isolate(), "LoadIC", "name as array index"); |
@@ -951,8 +951,7 @@ void IC::PatchCache(Handle<Name> name, Handle<Code> code) { |
CopyICToMegamorphicCache(name); |
} |
if (UseVector()) { |
- ConfigureVectorState(kind() == Code::KEYED_LOAD_IC ? GENERIC |
- : MEGAMORPHIC); |
+ ConfigureVectorState(MEGAMORPHIC); |
} else { |
set_target(*megamorphic_stub()); |
} |
@@ -969,12 +968,8 @@ void IC::PatchCache(Handle<Name> name, Handle<Code> code) { |
case DEBUG_STUB: |
break; |
case DEFAULT: |
- UNREACHABLE(); |
- break; |
case GENERIC: |
- // The generic keyed store stub re-uses store handlers, which can miss. |
- // That's ok, no reason to do anything. |
- DCHECK(target()->kind() == Code::KEYED_STORE_IC); |
+ UNREACHABLE(); |
break; |
} |
} |
@@ -1022,7 +1017,7 @@ Handle<Code> LoadIC::megamorphic_stub() { |
return stub.GetCode(); |
} else { |
DCHECK_EQ(Code::KEYED_LOAD_IC, kind()); |
- return KeyedLoadIC::generic_stub(isolate()); |
+ return KeyedLoadIC::megamorphic_stub(isolate()); |
} |
} |
@@ -1091,8 +1086,6 @@ void LoadIC::UpdateCaches(LookupIterator* lookup) { |
void IC::UpdateMegamorphicCache(HeapType* type, Name* name, Code* code) { |
- // Megamorphic state isn't implemented for keyed loads currently. |
- if (kind() == Code::KEYED_LOAD_IC) return; |
Map* map = *TypeToMap(type, isolate()); |
isolate()->stub_cache()->Set(name, map, code); |
} |
@@ -1370,14 +1363,14 @@ Handle<Code> KeyedLoadIC::LoadElementStub(Handle<HeapObject> receiver) { |
// If the miss wasn't due to an unseen map, a polymorphic stub |
// won't help, use the generic stub. |
TRACE_GENERIC_IC(isolate(), "KeyedLoadIC", "same map added twice"); |
- return generic_stub(); |
+ return megamorphic_stub(isolate()); |
} |
// If the maximum number of receiver maps has been exceeded, use the generic |
// version of the IC. |
if (target_receiver_maps.length() > kMaxKeyedPolymorphism) { |
TRACE_GENERIC_IC(isolate(), "KeyedLoadIC", "max polymorph exceeded"); |
- return generic_stub(); |
+ return megamorphic_stub(isolate()); |
} |
if (FLAG_vector_ics) { |
@@ -1407,7 +1400,7 @@ MaybeHandle<Object> KeyedLoadIC::Load(Handle<Object> object, |
} |
Handle<Object> load_handle; |
- Handle<Code> stub = generic_stub(); |
+ Handle<Code> stub = megamorphic_stub(isolate()); |
// Check for non-string values that can be converted into an |
// internalized string directly or is representable as a smi. |
@@ -1428,7 +1421,7 @@ MaybeHandle<Object> KeyedLoadIC::Load(Handle<Object> object, |
if (!UseVector()) { |
if (!is_target_set()) { |
- Code* generic = *generic_stub(); |
+ Code* generic = *megamorphic_stub(isolate()); |
if (*stub == generic) { |
TRACE_GENERIC_IC(isolate(), "KeyedLoadIC", "set generic"); |
} |
@@ -1438,7 +1431,7 @@ MaybeHandle<Object> KeyedLoadIC::Load(Handle<Object> object, |
} |
} else { |
if (!is_vector_set() || stub.is_null()) { |
- Code* generic = *generic_stub(); |
+ Code* generic = *megamorphic_stub(isolate()); |
if (!stub.is_null() && *stub == generic) { |
ConfigureVectorState(GENERIC); |
TRACE_GENERIC_IC(isolate(), "KeyedLoadIC", "set generic"); |