[serializer] cache ICs only as code stubs with key.

Some uninitialized ICs used to be implemented as builtins. This is apparently
no longer the case.

R=bmeurer@chromium.org, mvstanton@chromium.org

Review-Url: https://codereview.chromium.org/1940283002
Cr-Commit-Position: refs/heads/master@{#35980}
This commit is contained in:
yangguo 2016-05-03 06:07:14 -07:00 committed by Commit bot
parent a4129bb45a
commit b80bfbfe64
2 changed files with 1 additions and 36 deletions

View File

@ -73,12 +73,10 @@ void CodeSerializer::SerializeObject(HeapObject* obj, HowToCode how_to_code,
where_to_point);
return;
case Code::STUB:
SerializeCodeStub(code_object->stub_key(), how_to_code, where_to_point);
return;
#define IC_KIND_CASE(KIND) case Code::KIND:
IC_KIND_LIST(IC_KIND_CASE)
#undef IC_KIND_CASE
SerializeIC(code_object, how_to_code, where_to_point);
SerializeCodeStub(code_object->stub_key(), how_to_code, where_to_point);
return;
case Code::FUNCTION:
DCHECK(code_object->has_reloc_info_for_serialization());
@ -149,37 +147,6 @@ void CodeSerializer::SerializeCodeStub(uint32_t stub_key, HowToCode how_to_code,
sink_->PutInt(index, "CodeStub key");
}
void CodeSerializer::SerializeIC(Code* ic, HowToCode how_to_code,
WhereToPoint where_to_point) {
// The IC may be implemented as a stub.
uint32_t stub_key = ic->stub_key();
if (stub_key != CodeStub::NoCacheKey()) {
if (FLAG_trace_serializer) {
PrintF(" %s is a code stub\n", Code::Kind2String(ic->kind()));
}
SerializeCodeStub(stub_key, how_to_code, where_to_point);
return;
}
// The IC may be implemented as builtin. Only real builtins have an
// actual builtin_index value attached (otherwise it's just garbage).
// Compare to make sure we are really dealing with a builtin.
int builtin_index = ic->builtin_index();
if (builtin_index < Builtins::builtin_count) {
Builtins::Name name = static_cast<Builtins::Name>(builtin_index);
Code* builtin = isolate()->builtins()->builtin(name);
if (builtin == ic) {
if (FLAG_trace_serializer) {
PrintF(" %s is a builtin\n", Code::Kind2String(ic->kind()));
}
DCHECK(ic->kind() == Code::KEYED_LOAD_IC ||
ic->kind() == Code::KEYED_STORE_IC);
SerializeBuiltin(builtin_index, how_to_code, where_to_point);
return;
}
}
UNREACHABLE();
}
int CodeSerializer::AddCodeStubKey(uint32_t stub_key) {
// TODO(yangguo) Maybe we need a hash table for a faster lookup than O(n^2).
int index = 0;

View File

@ -45,8 +45,6 @@ class CodeSerializer : public Serializer {
void SerializeBuiltin(int builtin_index, HowToCode how_to_code,
WhereToPoint where_to_point);
void SerializeIC(Code* ic, HowToCode how_to_code,
WhereToPoint where_to_point);
void SerializeCodeStub(uint32_t stub_key, HowToCode how_to_code,
WhereToPoint where_to_point);
void SerializeGeneric(HeapObject* heap_object, HowToCode how_to_code,