Index: src/ic/ic.cc |
diff --git a/src/ic/ic.cc b/src/ic/ic.cc |
index ddc6b1a7df213cbb2eee02b9d30aa4fd51e78cac..f4e956eea01853ec7490bb24eb71bd621873c057 100644 |
--- a/src/ic/ic.cc |
+++ b/src/ic/ic.cc |
@@ -884,13 +884,8 @@ void IC::PatchCache(Handle<Name> name, Handle<Object> handler) { |
} |
Handle<Object> LoadIC::SimpleFieldLoad(FieldIndex index) { |
- if (FLAG_tf_load_ic_stub) { |
- TRACE_HANDLER_STATS(isolate(), LoadIC_LoadFieldDH); |
- return LoadHandler::LoadField(isolate(), index); |
- } |
- TRACE_HANDLER_STATS(isolate(), LoadIC_LoadFieldStub); |
- LoadFieldStub stub(isolate(), index); |
- return stub.GetCode(); |
+ TRACE_HANDLER_STATS(isolate(), LoadIC_LoadFieldDH); |
+ return LoadHandler::LoadField(isolate(), index); |
} |
namespace { |
@@ -1121,15 +1116,8 @@ void LoadIC::UpdateCaches(LookupIterator* lookup) { |
code = slow_stub(); |
} else if (!lookup->IsFound()) { |
if (kind() == Code::LOAD_IC || kind() == Code::LOAD_GLOBAL_IC) { |
- if (FLAG_tf_load_ic_stub) { |
- TRACE_HANDLER_STATS(isolate(), LoadIC_LoadNonexistentDH); |
- code = LoadNonExistent(receiver_map(), lookup->name()); |
- } else { |
- code = NamedLoadHandlerCompiler::ComputeLoadNonexistent(lookup->name(), |
- receiver_map()); |
- // TODO(jkummerow/verwaest): Introduce a builtin that handles this case. |
- if (code.is_null()) code = slow_stub(); |
- } |
+ TRACE_HANDLER_STATS(isolate(), LoadIC_LoadNonexistentDH); |
+ code = LoadNonExistent(receiver_map(), lookup->name()); |
} else { |
code = slow_stub(); |
} |
@@ -1390,26 +1378,15 @@ Handle<Object> LoadIC::GetMapIndependentHandler(LookupIterator* lookup) { |
TRACE_HANDLER_STATS(isolate(), LoadIC_SlowStub); |
return slow_stub(); |
} |
- if (FLAG_tf_load_ic_stub) { |
- Handle<Object> smi_handler = LoadHandler::LoadApiGetter( |
- isolate(), lookup->GetAccessorIndex()); |
- if (receiver_is_holder) { |
- TRACE_HANDLER_STATS(isolate(), LoadIC_LoadApiGetterDH); |
- return smi_handler; |
- } |
- if (kind() != Code::LOAD_GLOBAL_IC) { |
- TRACE_HANDLER_STATS(isolate(), |
- LoadIC_LoadApiGetterFromPrototypeDH); |
- return LoadFromPrototype(map, holder, lookup->name(), |
- smi_handler); |
- } |
- } else { |
- if (receiver_is_holder) { |
- TRACE_HANDLER_STATS(isolate(), LoadIC_LoadApiGetterStub); |
- int index = lookup->GetAccessorIndex(); |
- LoadApiGetterStub stub(isolate(), true, index); |
- return stub.GetCode(); |
- } |
+ Handle<Object> smi_handler = |
+ LoadHandler::LoadApiGetter(isolate(), lookup->GetAccessorIndex()); |
+ if (receiver_is_holder) { |
+ TRACE_HANDLER_STATS(isolate(), LoadIC_LoadApiGetterDH); |
+ return smi_handler; |
+ } |
+ if (kind() != Code::LOAD_GLOBAL_IC) { |
+ TRACE_HANDLER_STATS(isolate(), LoadIC_LoadApiGetterFromPrototypeDH); |
+ return LoadFromPrototype(map, holder, lookup->name(), smi_handler); |
} |
break; // Custom-compiled handler. |
} |
@@ -1446,32 +1423,20 @@ Handle<Object> LoadIC::GetMapIndependentHandler(LookupIterator* lookup) { |
if (receiver_is_holder) { |
return smi_handler; |
} |
- if (FLAG_tf_load_ic_stub) { |
- TRACE_HANDLER_STATS(isolate(), LoadIC_LoadFieldFromPrototypeDH); |
- return LoadFromPrototype(map, holder, lookup->name(), smi_handler); |
- } |
- break; // Custom-compiled handler. |
+ TRACE_HANDLER_STATS(isolate(), LoadIC_LoadFieldFromPrototypeDH); |
+ return LoadFromPrototype(map, holder, lookup->name(), smi_handler); |
} |
// -------------- Constant properties -------------- |
DCHECK(lookup->property_details().type() == DATA_CONSTANT); |
- if (FLAG_tf_load_ic_stub) { |
- Handle<Object> smi_handler = |
- LoadHandler::LoadConstant(isolate(), lookup->GetConstantIndex()); |
- if (receiver_is_holder) { |
- TRACE_HANDLER_STATS(isolate(), LoadIC_LoadConstantDH); |
- return smi_handler; |
- } |
- TRACE_HANDLER_STATS(isolate(), LoadIC_LoadConstantFromPrototypeDH); |
- return LoadFromPrototype(map, holder, lookup->name(), smi_handler); |
- } else { |
- if (receiver_is_holder) { |
- TRACE_HANDLER_STATS(isolate(), LoadIC_LoadConstantStub); |
- LoadConstantStub stub(isolate(), lookup->GetConstantIndex()); |
- return stub.GetCode(); |
- } |
+ Handle<Object> smi_handler = |
+ LoadHandler::LoadConstant(isolate(), lookup->GetConstantIndex()); |
+ if (receiver_is_holder) { |
+ TRACE_HANDLER_STATS(isolate(), LoadIC_LoadConstantDH); |
+ return smi_handler; |
} |
- break; // Custom-compiled handler. |
+ TRACE_HANDLER_STATS(isolate(), LoadIC_LoadConstantFromPrototypeDH); |
+ return LoadFromPrototype(map, holder, lookup->name(), smi_handler); |
} |
case LookupIterator::INTEGER_INDEXED_EXOTIC: |
@@ -2011,13 +1976,10 @@ Handle<Object> StoreIC::GetMapIndependentHandler(LookupIterator* lookup) { |
return slow_stub(); |
} |
DCHECK(lookup->IsCacheableTransition()); |
- if (FLAG_tf_store_ic_stub) { |
- Handle<Map> transition = lookup->transition_map(); |
- TRACE_HANDLER_STATS(isolate(), StoreIC_StoreTransitionDH); |
- return StoreTransition(receiver_map(), holder, transition, |
- lookup->name()); |
- } |
- break; // Custom-compiled handler. |
+ Handle<Map> transition = lookup->transition_map(); |
+ TRACE_HANDLER_STATS(isolate(), StoreIC_StoreTransitionDH); |
+ return StoreTransition(receiver_map(), holder, transition, |
+ lookup->name()); |
} |
case LookupIterator::INTERCEPTOR: { |
@@ -2094,27 +2056,11 @@ Handle<Object> StoreIC::GetMapIndependentHandler(LookupIterator* lookup) { |
// -------------- Fields -------------- |
if (lookup->property_details().type() == DATA) { |
- if (FLAG_tf_store_ic_stub) { |
- TRACE_HANDLER_STATS(isolate(), StoreIC_StoreFieldDH); |
- int descriptor = lookup->GetFieldDescriptorIndex(); |
- FieldIndex index = lookup->GetFieldIndex(); |
- return StoreHandler::StoreField(isolate(), descriptor, index, |
- lookup->representation()); |
- } else { |
- bool use_stub = true; |
- if (lookup->representation().IsHeapObject()) { |
- // Only use a generic stub if no types need to be tracked. |
- Handle<FieldType> field_type = lookup->GetFieldType(); |
- use_stub = !field_type->IsClass(); |
- } |
- if (use_stub) { |
- TRACE_HANDLER_STATS(isolate(), StoreIC_StoreFieldStub); |
- StoreFieldStub stub(isolate(), lookup->GetFieldIndex(), |
- lookup->representation()); |
- return stub.GetCode(); |
- } |
- } |
- break; // Custom-compiled handler. |
+ TRACE_HANDLER_STATS(isolate(), StoreIC_StoreFieldDH); |
+ int descriptor = lookup->GetFieldDescriptorIndex(); |
+ FieldIndex index = lookup->GetFieldIndex(); |
+ return StoreHandler::StoreField(isolate(), descriptor, index, |
+ lookup->representation()); |
} |
// -------------- Constant properties -------------- |
@@ -2156,15 +2102,7 @@ Handle<Object> StoreIC::CompileHandler(LookupIterator* lookup, |
cell->set_value(isolate()->heap()->the_hole_value()); |
return code; |
} |
- DCHECK(!FLAG_tf_store_ic_stub); |
- Handle<Map> transition = lookup->transition_map(); |
- // Currently not handled by CompileStoreTransition. |
- DCHECK(holder->HasFastProperties()); |
- |
- DCHECK(lookup->IsCacheableTransition()); |
- TRACE_HANDLER_STATS(isolate(), StoreIC_StoreTransition); |
- NamedStoreHandlerCompiler compiler(isolate(), receiver_map(), holder); |
- return compiler.CompileStoreTransition(transition, lookup->name()); |
+ UNREACHABLE(); |
} |
case LookupIterator::INTERCEPTOR: |
@@ -2212,40 +2150,18 @@ Handle<Object> StoreIC::CompileHandler(LookupIterator* lookup, |
} |
case LookupIterator::DATA: { |
- if (lookup->is_dictionary_holder()) { |
- DCHECK(holder->IsJSGlobalObject()); |
- TRACE_HANDLER_STATS(isolate(), StoreIC_StoreGlobal); |
- DCHECK(holder.is_identical_to(receiver) || |
- receiver->map()->prototype() == *holder); |
- auto cell = lookup->GetPropertyCell(); |
- auto updated_type = |
- PropertyCell::UpdatedType(cell, value, lookup->property_details()); |
- auto code = PropertyCellStoreHandler( |
- isolate(), receiver, Handle<JSGlobalObject>::cast(holder), |
- lookup->name(), cell, updated_type); |
- return code; |
- } |
- |
- // -------------- Fields -------------- |
- if (lookup->property_details().type() == DATA) { |
- DCHECK(!FLAG_tf_store_ic_stub); |
-#ifdef DEBUG |
- bool use_stub = true; |
- if (lookup->representation().IsHeapObject()) { |
- // Only use a generic stub if no types need to be tracked. |
- Handle<FieldType> field_type = lookup->GetFieldType(); |
- use_stub = !field_type->IsClass(); |
- } |
- DCHECK(!use_stub); |
-#endif |
- TRACE_HANDLER_STATS(isolate(), StoreIC_StoreField); |
- NamedStoreHandlerCompiler compiler(isolate(), receiver_map(), holder); |
- return compiler.CompileStoreField(lookup); |
- } |
- |
- // -------------- Constant properties -------------- |
- DCHECK(lookup->property_details().type() == DATA_CONSTANT); |
- UNREACHABLE(); |
+ DCHECK(lookup->is_dictionary_holder()); |
+ DCHECK(holder->IsJSGlobalObject()); |
+ TRACE_HANDLER_STATS(isolate(), StoreIC_StoreGlobal); |
+ DCHECK(holder.is_identical_to(receiver) || |
+ receiver->map()->prototype() == *holder); |
+ auto cell = lookup->GetPropertyCell(); |
+ auto updated_type = |
+ PropertyCell::UpdatedType(cell, value, lookup->property_details()); |
+ auto code = PropertyCellStoreHandler(isolate(), receiver, |
+ Handle<JSGlobalObject>::cast(holder), |
+ lookup->name(), cell, updated_type); |
+ return code; |
} |
case LookupIterator::INTEGER_INDEXED_EXOTIC: |