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

Unified Diff: src/ic/ic.cc

Issue 2442523003: Revert of [ic] Support data handlers that represent simple field stores. (Closed)
Patch Set: Created 4 years, 2 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/ic/handler-configuration-inl.h ('k') | src/lookup.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/ic/ic.cc
diff --git a/src/ic/ic.cc b/src/ic/ic.cc
index 3a32d240c3d4b1bbe8acb07229e0e13aab0063bb..3015e01686d2ae9c1b4e03b4bf5c6509bcdf55bc 100644
--- a/src/ic/ic.cc
+++ b/src/ic/ic.cc
@@ -567,11 +567,11 @@
nexus->ConfigureMonomorphic(name, map, handler);
} else if (kind() == Code::STORE_IC) {
StoreICNexus* nexus = casted_nexus<StoreICNexus>();
- nexus->ConfigureMonomorphic(map, handler);
+ nexus->ConfigureMonomorphic(map, Handle<Code>::cast(handler));
} else {
DCHECK(kind() == Code::KEYED_STORE_IC);
KeyedStoreICNexus* nexus = casted_nexus<KeyedStoreICNexus>();
- nexus->ConfigureMonomorphic(name, map, handler);
+ nexus->ConfigureMonomorphic(name, map, Handle<Code>::cast(handler));
}
vector_set_ = true;
@@ -790,10 +790,8 @@
void IC::PatchCache(Handle<Name> name, Handle<Object> handler) {
DCHECK(IsHandler(*handler));
// Currently only LoadIC and KeyedLoadIC support non-code handlers.
- DCHECK_IMPLIES(!handler->IsCode(), kind() == Code::LOAD_IC ||
- kind() == Code::KEYED_LOAD_IC ||
- kind() == Code::STORE_IC ||
- kind() == Code::KEYED_STORE_IC);
+ DCHECK_IMPLIES(!handler->IsCode(),
+ kind() == Code::LOAD_IC || kind() == Code::KEYED_LOAD_IC);
switch (state()) {
case UNINITIALIZED:
case PREMONOMORPHIC:
@@ -1012,37 +1010,6 @@
}
void IC::UpdateMegamorphicCache(Map* map, Name* name, Object* handler) {
- if (FLAG_store_ic_smi_handlers && handler->IsSmi() &&
- (kind() == Code::STORE_IC || kind() == Code::KEYED_STORE_IC)) {
- // TODO(ishell, jkummerow): Implement data handlers support in
- // KeyedStoreIC_Megamorphic.
- Handle<Map> map_handle(map, isolate());
- Handle<Name> name_handle(name, isolate());
- int config = Smi::cast(handler)->value();
- int value_index = StoreHandler::DescriptorValueIndexBits::decode(config);
- int descriptor = (value_index - DescriptorArray::kDescriptorValue -
- DescriptorArray::kFirstIndex) /
- DescriptorArray::kDescriptorSize;
- if (map->instance_descriptors()->length()) {
- PropertyDetails details =
- map->instance_descriptors()->GetDetails(descriptor);
- DCHECK_EQ(DATA, details.type());
- DCHECK_EQ(name, map->instance_descriptors()->GetKey(descriptor));
- Representation representation = details.representation();
- FieldIndex index = FieldIndex::ForDescriptor(map, descriptor);
- TRACE_HANDLER_STATS(isolate(), StoreIC_StoreFieldStub);
- StoreFieldStub stub(isolate(), index, representation);
- handler = *stub.GetCode();
- } else {
- // It must be a prototype map that some prototype used to have. This map
- // check will never succeed so write a dummy smi to the cache.
- DCHECK(!map->is_dictionary_map());
- DCHECK(map->is_prototype_map());
- handler = Smi::FromInt(1);
- }
- stub_cache()->Set(*name_handle, *map_handle, handler);
- return;
- }
stub_cache()->Set(name, map, handler);
}
@@ -1674,10 +1641,10 @@
if (!use_ic) {
TRACE_GENERIC_IC(isolate(), "StoreIC", "LookupForWrite said 'false'");
}
- Handle<Object> handler = use_ic ? ComputeHandler(lookup, value)
- : Handle<Object>::cast(slow_stub());
-
- PatchCache(lookup->name(), handler);
+ Handle<Code> code =
+ use_ic ? Handle<Code>::cast(ComputeHandler(lookup, value)) : slow_stub();
+
+ PatchCache(lookup->name(), code);
TRACE_IC("StoreIC", lookup->name());
}
@@ -1796,25 +1763,17 @@
// -------------- Fields --------------
if (lookup->property_details().type() == DATA) {
- if (FLAG_store_ic_smi_handlers) {
- 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();
- }
+ 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.
}
@@ -1932,7 +1891,6 @@
#ifdef DEBUG
bool use_stub = true;
if (lookup->representation().IsHeapObject()) {
- DCHECK(!FLAG_store_ic_smi_handlers);
// Only use a generic stub if no types need to be tracked.
Handle<FieldType> field_type = lookup->GetFieldType();
use_stub = !field_type->IsClass();
« no previous file with comments | « src/ic/handler-configuration-inl.h ('k') | src/lookup.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698