[ic] Remove ICUseVector and some access compiler cleanup

BUG=

Change-Id: I1fd0ae3dcb0e644e9f2a56c242720b4def4bb579
Reviewed-on: https://chromium-review.googlesource.com/454836
Commit-Queue: Toon Verwaest <verwaest@chromium.org>
Reviewed-by: Igor Sheludko <ishell@chromium.org>
Cr-Commit-Position: refs/heads/master@{#43818}
This commit is contained in:
Toon Verwaest 2017-03-14 17:01:24 +01:00 committed by Commit Bot
parent 046ae92682
commit afeb560c84
15 changed files with 46 additions and 104 deletions

View File

@ -204,7 +204,8 @@ static int DecodeIt(Isolate* isolate, std::ostream* os,
Code::Kind kind = code->kind(); Code::Kind kind = code->kind();
if (code->is_inline_cache_stub()) { if (code->is_inline_cache_stub()) {
out.AddFormatted(" %s", Code::Kind2String(kind)); out.AddFormatted(" %s", Code::Kind2String(kind));
if (!IC::ICUseVector(kind)) { if (kind == Code::BINARY_OP_IC || kind == Code::TO_BOOLEAN_IC ||
kind == Code::COMPARE_IC) {
InlineCacheState ic_state = IC::StateFromCode(code); InlineCacheState ic_state = IC::StateFromCode(code);
out.AddFormatted(" %s", Code::ICState2String(ic_state)); out.AddFormatted(" %s", Code::ICState2String(ic_state));
} }

View File

@ -8,34 +8,6 @@
namespace v8 { namespace v8 {
namespace internal { namespace internal {
Handle<Code> PropertyAccessCompiler::GetCodeWithFlags(Code::Flags flags,
const char* name) {
// Create code object in the heap.
CodeDesc desc;
masm()->GetCode(&desc);
Handle<Code> code = factory()->NewCode(desc, flags, masm()->CodeObject());
if (code->IsCodeStubOrIC()) code->set_stub_key(CodeStub::NoCacheKey());
#ifdef ENABLE_DISASSEMBLER
if (FLAG_print_code_stubs) {
CodeTracer::Scope trace_scope(isolate()->GetCodeTracer());
OFStream os(trace_scope.file());
code->Disassemble(name, os);
}
#endif
return code;
}
Handle<Code> PropertyAccessCompiler::GetCodeWithFlags(Code::Flags flags,
Handle<Name> name) {
return (FLAG_print_code_stubs && !name.is_null() && name->IsString())
? GetCodeWithFlags(flags,
Handle<String>::cast(name)->ToCString().get())
: GetCodeWithFlags(flags, NULL);
}
void PropertyAccessCompiler::TailCallBuiltin(MacroAssembler* masm, void PropertyAccessCompiler::TailCallBuiltin(MacroAssembler* masm,
Builtins::Name name) { Builtins::Name name) {
Handle<Code> code(masm->isolate()->builtins()->builtin(name)); Handle<Code> code(masm->isolate()->builtins()->builtin(name));

View File

@ -49,7 +49,6 @@ class PropertyAccessCompiler BASE_EMBEDDED {
CacheHolderFlag cache_holder() const { return cache_holder_; } CacheHolderFlag cache_holder() const { return cache_holder_; }
MacroAssembler* masm() { return &masm_; } MacroAssembler* masm() { return &masm_; }
Isolate* isolate() const { return isolate_; } Isolate* isolate() const { return isolate_; }
Heap* heap() const { return isolate()->heap(); }
Factory* factory() const { return isolate()->factory(); } Factory* factory() const { return isolate()->factory(); }
Register receiver() const { return registers_[0]; } Register receiver() const { return registers_[0]; }
@ -63,9 +62,6 @@ class PropertyAccessCompiler BASE_EMBEDDED {
static void GenerateTailCall(MacroAssembler* masm, Handle<Code> code); static void GenerateTailCall(MacroAssembler* masm, Handle<Code> code);
Handle<Code> GetCodeWithFlags(Code::Flags flags, const char* name);
Handle<Code> GetCodeWithFlags(Code::Flags flags, Handle<Name> name);
private: private:
static Register* GetCallingConvention(Isolate* isolate, Code::Kind kind); static Register* GetCallingConvention(Isolate* isolate, Code::Kind kind);
static void InitializePlatformSpecific(AccessCompilerData* data); static void InitializePlatformSpecific(AccessCompilerData* data);

View File

@ -404,10 +404,8 @@ void NamedLoadHandlerCompiler::FrontendFooter(Handle<Name> name, Label* miss) {
Label success; Label success;
__ b(&success); __ b(&success);
__ bind(miss); __ bind(miss);
if (IC::ICUseVector(kind())) { DCHECK(kind() == Code::LOAD_IC);
DCHECK(kind() == Code::LOAD_IC); PopVectorAndSlot();
PopVectorAndSlot();
}
TailCallBuiltin(masm(), MissBuiltin(kind())); TailCallBuiltin(masm(), MissBuiltin(kind()));
__ bind(&success); __ bind(&success);
} }
@ -419,7 +417,7 @@ void NamedStoreHandlerCompiler::FrontendFooter(Handle<Name> name, Label* miss) {
Label success; Label success;
__ b(&success); __ b(&success);
GenerateRestoreName(miss, name); GenerateRestoreName(miss, name);
if (IC::ICUseVector(kind())) PopVectorAndSlot(); PopVectorAndSlot();
TailCallBuiltin(masm(), MissBuiltin(kind())); TailCallBuiltin(masm(), MissBuiltin(kind()));
__ bind(&success); __ bind(&success);
} }

View File

@ -399,10 +399,8 @@ void NamedLoadHandlerCompiler::FrontendFooter(Handle<Name> name, Label* miss) {
__ B(&success); __ B(&success);
__ Bind(miss); __ Bind(miss);
if (IC::ICUseVector(kind())) { DCHECK(kind() == Code::LOAD_IC);
DCHECK(kind() == Code::LOAD_IC); PopVectorAndSlot();
PopVectorAndSlot();
}
TailCallBuiltin(masm(), MissBuiltin(kind())); TailCallBuiltin(masm(), MissBuiltin(kind()));
__ Bind(&success); __ Bind(&success);
@ -416,7 +414,7 @@ void NamedStoreHandlerCompiler::FrontendFooter(Handle<Name> name, Label* miss) {
__ B(&success); __ B(&success);
GenerateRestoreName(miss, name); GenerateRestoreName(miss, name);
if (IC::ICUseVector(kind())) PopVectorAndSlot(); PopVectorAndSlot();
TailCallBuiltin(masm(), MissBuiltin(kind())); TailCallBuiltin(masm(), MissBuiltin(kind()));
__ Bind(&success); __ Bind(&success);

View File

@ -27,9 +27,26 @@ Handle<Code> PropertyHandlerCompiler::Find(Handle<Name> name,
Handle<Code> PropertyHandlerCompiler::GetCode(Code::Kind kind, Handle<Code> PropertyHandlerCompiler::GetCode(Code::Kind kind,
Handle<Name> name) { Handle<Name> name) {
Code::Flags flags = Code::ComputeHandlerFlags(kind, cache_holder()); Code::Flags flags = Code::ComputeHandlerFlags(kind, cache_holder());
Handle<Code> code = GetCodeWithFlags(flags, name);
// Create code object in the heap.
CodeDesc desc;
masm()->GetCode(&desc);
Handle<Code> code = factory()->NewCode(desc, flags, masm()->CodeObject());
if (code->IsCodeStubOrIC()) code->set_stub_key(CodeStub::NoCacheKey());
#ifdef ENABLE_DISASSEMBLER
if (FLAG_print_code_stubs) {
char* raw_name = !name.is_null() && name->IsString()
? String::cast(*name)->ToCString().get()
: nullptr;
CodeTracer::Scope trace_scope(isolate()->GetCodeTracer());
OFStream os(trace_scope.file());
code->Disassemble(raw_name, os);
}
#endif
PROFILE(isolate(), CodeCreateEvent(CodeEventListener::HANDLER_TAG, PROFILE(isolate(), CodeCreateEvent(CodeEventListener::HANDLER_TAG,
AbstractCode::cast(*code), *name)); AbstractCode::cast(*code), *name));
#ifdef DEBUG #ifdef DEBUG
code->VerifyEmbeddedObjects(); code->VerifyEmbeddedObjects();
#endif #endif

View File

@ -70,7 +70,6 @@ const char* GetTransitionMarkModifier(KeyedAccessStoreMode mode) {
void IC::TraceIC(const char* type, Handle<Object> name) { void IC::TraceIC(const char* type, Handle<Object> name) {
if (FLAG_ic_stats) { if (FLAG_ic_stats) {
if (AddressIsDeoptimizedCode()) return; if (AddressIsDeoptimizedCode()) return;
DCHECK(UseVector());
State new_state = nexus()->StateFromFeedback(); State new_state = nexus()->StateFromFeedback();
TraceIC(type, name, state(), new_state); TraceIC(type, name, state(), new_state);
} }
@ -228,7 +227,6 @@ IC::IC(FrameDepth depth, Isolate* isolate, FeedbackNexus* nexus)
pc_address_ = StackFrame::ResolveReturnAddressLocation(pc_address); pc_address_ = StackFrame::ResolveReturnAddressLocation(pc_address);
if (nexus) { if (nexus) {
kind_ = nexus->kind(); kind_ = nexus->kind();
DCHECK(UseVector());
state_ = nexus->StateFromFeedback(); state_ = nexus->StateFromFeedback();
extra_ic_state_ = kNoExtraICState; extra_ic_state_ = kNoExtraICState;
} else { } else {
@ -244,7 +242,6 @@ IC::IC(FrameDepth depth, Isolate* isolate, FeedbackNexus* nexus)
UNREACHABLE(); UNREACHABLE();
kind_ = FeedbackSlotKind::kInvalid; kind_ = FeedbackSlotKind::kInvalid;
} }
DCHECK(!UseVector());
state_ = StateFromCode(target); state_ = StateFromCode(target);
extra_ic_state_ = target->extra_ic_state(); extra_ic_state_ = target->extra_ic_state();
} }
@ -332,7 +329,6 @@ static void LookupForRead(LookupIterator* it) {
bool IC::ShouldRecomputeHandler(Handle<String> name) { bool IC::ShouldRecomputeHandler(Handle<String> name) {
if (!RecomputeHandlerForName(name)) return false; if (!RecomputeHandlerForName(name)) return false;
DCHECK(UseVector());
maybe_handler_ = nexus()->FindHandlerForMap(receiver_map()); maybe_handler_ = nexus()->FindHandlerForMap(receiver_map());
// This is a contextual access, always just update the handler and stay // This is a contextual access, always just update the handler and stay
@ -361,7 +357,6 @@ bool IC::RecomputeHandlerForName(Handle<Object> name) {
if (is_keyed()) { if (is_keyed()) {
// Determine whether the failure is due to a name failure. // Determine whether the failure is due to a name failure.
if (!name->IsName()) return false; if (!name->IsName()) return false;
DCHECK(UseVector());
Name* stub_name = nexus()->FindFirstName(); Name* stub_name = nexus()->FindFirstName();
if (*name != stub_name) return false; if (*name != stub_name) return false;
} }
@ -451,8 +446,9 @@ void IC::OnFeedbackChanged(Isolate* isolate, JSFunction* host_function) {
void IC::PostPatching(Address address, Code* target, Code* old_target) { void IC::PostPatching(Address address, Code* target, Code* old_target) {
// Type vector based ICs update these statistics at a different time because // Type vector based ICs update these statistics at a different time because
// they don't always patch on state change. // they don't always patch on state change.
// TODO(ishell): DCHECK DCHECK(target->kind() == Code::BINARY_OP_IC ||
if (ICUseVector(target->kind())) return; target->kind() == Code::COMPARE_IC ||
target->kind() == Code::TO_BOOLEAN_IC);
DCHECK(old_target->is_inline_cache_stub()); DCHECK(old_target->is_inline_cache_stub());
DCHECK(target->is_inline_cache_stub()); DCHECK(target->is_inline_cache_stub());
@ -517,7 +513,6 @@ static bool MigrateDeprecated(Handle<Object> object) {
} }
void IC::ConfigureVectorState(IC::State new_state, Handle<Object> key) { void IC::ConfigureVectorState(IC::State new_state, Handle<Object> key) {
DCHECK(UseVector());
if (new_state == PREMONOMORPHIC) { if (new_state == PREMONOMORPHIC) {
nexus()->ConfigurePremonomorphic(); nexus()->ConfigurePremonomorphic();
} else if (new_state == MEGAMORPHIC) { } else if (new_state == MEGAMORPHIC) {
@ -541,7 +536,6 @@ void IC::ConfigureVectorState(IC::State new_state, Handle<Object> key) {
void IC::ConfigureVectorState(Handle<Name> name, Handle<Map> map, void IC::ConfigureVectorState(Handle<Name> name, Handle<Map> map,
Handle<Object> handler) { Handle<Object> handler) {
DCHECK(UseVector());
switch (kind_) { switch (kind_) {
case FeedbackSlotKind::kLoadProperty: { case FeedbackSlotKind::kLoadProperty: {
LoadICNexus* nexus = casted_nexus<LoadICNexus>(); LoadICNexus* nexus = casted_nexus<LoadICNexus>();
@ -592,7 +586,6 @@ void IC::ConfigureVectorState(Handle<Name> name, Handle<Map> map,
void IC::ConfigureVectorState(Handle<Name> name, MapHandleList* maps, void IC::ConfigureVectorState(Handle<Name> name, MapHandleList* maps,
List<Handle<Object>>* handlers) { List<Handle<Object>>* handlers) {
DCHECK(UseVector());
switch (kind_) { switch (kind_) {
case FeedbackSlotKind::kLoadProperty: { case FeedbackSlotKind::kLoadProperty: {
LoadICNexus* nexus = casted_nexus<LoadICNexus>(); LoadICNexus* nexus = casted_nexus<LoadICNexus>();
@ -640,7 +633,6 @@ void IC::ConfigureVectorState(Handle<Name> name, MapHandleList* maps,
void IC::ConfigureVectorState(MapHandleList* maps, void IC::ConfigureVectorState(MapHandleList* maps,
MapHandleList* transitioned_maps, MapHandleList* transitioned_maps,
List<Handle<Object>>* handlers) { List<Handle<Object>>* handlers) {
DCHECK(UseVector());
DCHECK(IsKeyedStoreIC()); DCHECK(IsKeyedStoreIC());
KeyedStoreICNexus* nexus = casted_nexus<KeyedStoreICNexus>(); KeyedStoreICNexus* nexus = casted_nexus<KeyedStoreICNexus>();
nexus->ConfigurePolymorphic(maps, transitioned_maps, handlers); nexus->ConfigurePolymorphic(maps, transitioned_maps, handlers);
@ -774,7 +766,6 @@ bool IC::UpdatePolymorphicIC(Handle<Name> name, Handle<Object> handler) {
if (number_of_maps == 0 && state() != MONOMORPHIC && state() != POLYMORPHIC) { if (number_of_maps == 0 && state() != MONOMORPHIC && state() != POLYMORPHIC) {
return false; return false;
} }
DCHECK(UseVector());
if (!nexus()->FindHandlers(&handlers, maps.length())) return false; if (!nexus()->FindHandlers(&handlers, maps.length())) return false;
number_of_valid_maps++; number_of_valid_maps++;
@ -853,13 +844,11 @@ void IC::PatchCache(Handle<Name> name, Handle<Object> handler) {
// same key. // same key.
CopyICToMegamorphicCache(name); CopyICToMegamorphicCache(name);
} }
DCHECK(UseVector());
ConfigureVectorState(MEGAMORPHIC, name); ConfigureVectorState(MEGAMORPHIC, name);
// Fall through. // Fall through.
case MEGAMORPHIC: case MEGAMORPHIC:
UpdateMegamorphicCache(*receiver_map(), *name, *handler); UpdateMegamorphicCache(*receiver_map(), *name, *handler);
// Indicate that we've handled this case. // Indicate that we've handled this case.
DCHECK(UseVector());
vector_set_ = true; vector_set_ = true;
break; break;
case GENERIC: case GENERIC:

View File

@ -66,17 +66,6 @@ class IC {
Isolate* isolate, Isolate* isolate,
CacheHolderFlag* flag); CacheHolderFlag* flag);
static bool ICUseVector(Code::Kind kind) {
return kind == Code::LOAD_IC || kind == Code::LOAD_GLOBAL_IC ||
kind == Code::KEYED_LOAD_IC || kind == Code::STORE_IC ||
kind == Code::KEYED_STORE_IC;
}
static bool ICUseVector(FeedbackSlotKind kind) {
return IsLoadICKind(kind) || IsLoadGlobalICKind(kind) ||
IsKeyedLoadICKind(kind) || IsStoreICKind(kind) ||
IsStoreOwnICKind(kind) || IsKeyedStoreICKind(kind);
}
// The ICs that don't pass slot and vector through the stack have to // The ICs that don't pass slot and vector through the stack have to
// save/restore them in the dispatcher. // save/restore them in the dispatcher.
static bool ShouldPushPopSlotAndVector(Code::Kind kind); static bool ShouldPushPopSlotAndVector(Code::Kind kind);
@ -108,13 +97,6 @@ class IC {
inline void set_target(Code* code); inline void set_target(Code* code);
bool is_vector_set() { return vector_set_; } bool is_vector_set() { return vector_set_; }
bool UseVector() const {
bool use = ICUseVector(kind());
// If we are supposed to use the nexus, verify the nexus is non-null.
DCHECK(!use || nexus_ != nullptr);
return use;
}
// Configure for most states. // Configure for most states.
void ConfigureVectorState(IC::State new_state, Handle<Object> key); void ConfigureVectorState(IC::State new_state, Handle<Object> key);
// Configure the vector for MONOMORPHIC. // Configure the vector for MONOMORPHIC.
@ -229,7 +211,6 @@ class IC {
void FindTargetMaps() { void FindTargetMaps() {
if (target_maps_set_) return; if (target_maps_set_) return;
target_maps_set_ = true; target_maps_set_ = true;
DCHECK(UseVector());
nexus()->ExtractMaps(&target_maps_); nexus()->ExtractMaps(&target_maps_);
} }

View File

@ -389,10 +389,8 @@ void NamedLoadHandlerCompiler::FrontendFooter(Handle<Name> name, Label* miss) {
Label success; Label success;
__ Branch(&success); __ Branch(&success);
__ bind(miss); __ bind(miss);
if (IC::ICUseVector(kind())) { DCHECK(kind() == Code::LOAD_IC);
DCHECK(kind() == Code::LOAD_IC); PopVectorAndSlot();
PopVectorAndSlot();
}
TailCallBuiltin(masm(), MissBuiltin(kind())); TailCallBuiltin(masm(), MissBuiltin(kind()));
__ bind(&success); __ bind(&success);
} }
@ -404,7 +402,7 @@ void NamedStoreHandlerCompiler::FrontendFooter(Handle<Name> name, Label* miss) {
Label success; Label success;
__ Branch(&success); __ Branch(&success);
GenerateRestoreName(miss, name); GenerateRestoreName(miss, name);
if (IC::ICUseVector(kind())) PopVectorAndSlot(); PopVectorAndSlot();
TailCallBuiltin(masm(), MissBuiltin(kind())); TailCallBuiltin(masm(), MissBuiltin(kind()));
__ bind(&success); __ bind(&success);
} }

View File

@ -389,10 +389,8 @@ void NamedLoadHandlerCompiler::FrontendFooter(Handle<Name> name, Label* miss) {
Label success; Label success;
__ Branch(&success); __ Branch(&success);
__ bind(miss); __ bind(miss);
if (IC::ICUseVector(kind())) { DCHECK(kind() == Code::LOAD_IC);
DCHECK(kind() == Code::LOAD_IC); PopVectorAndSlot();
PopVectorAndSlot();
}
TailCallBuiltin(masm(), MissBuiltin(kind())); TailCallBuiltin(masm(), MissBuiltin(kind()));
__ bind(&success); __ bind(&success);
} }
@ -404,7 +402,7 @@ void NamedStoreHandlerCompiler::FrontendFooter(Handle<Name> name, Label* miss) {
Label success; Label success;
__ Branch(&success); __ Branch(&success);
GenerateRestoreName(miss, name); GenerateRestoreName(miss, name);
if (IC::ICUseVector(kind())) PopVectorAndSlot(); PopVectorAndSlot();
TailCallBuiltin(masm(), MissBuiltin(kind())); TailCallBuiltin(masm(), MissBuiltin(kind()));
__ bind(&success); __ bind(&success);
} }

View File

@ -404,10 +404,8 @@ void NamedLoadHandlerCompiler::FrontendFooter(Handle<Name> name, Label* miss) {
Label success; Label success;
__ b(&success); __ b(&success);
__ bind(miss); __ bind(miss);
if (IC::ICUseVector(kind())) { DCHECK(kind() == Code::LOAD_IC);
DCHECK(kind() == Code::LOAD_IC); PopVectorAndSlot();
PopVectorAndSlot();
}
TailCallBuiltin(masm(), MissBuiltin(kind())); TailCallBuiltin(masm(), MissBuiltin(kind()));
__ bind(&success); __ bind(&success);
} }
@ -419,7 +417,7 @@ void NamedStoreHandlerCompiler::FrontendFooter(Handle<Name> name, Label* miss) {
Label success; Label success;
__ b(&success); __ b(&success);
GenerateRestoreName(miss, name); GenerateRestoreName(miss, name);
if (IC::ICUseVector(kind())) PopVectorAndSlot(); PopVectorAndSlot();
TailCallBuiltin(masm(), MissBuiltin(kind())); TailCallBuiltin(masm(), MissBuiltin(kind()));
__ bind(&success); __ bind(&success);
} }

View File

@ -388,10 +388,8 @@ void NamedLoadHandlerCompiler::FrontendFooter(Handle<Name> name, Label* miss) {
Label success; Label success;
__ b(&success); __ b(&success);
__ bind(miss); __ bind(miss);
if (IC::ICUseVector(kind())) { DCHECK(kind() == Code::LOAD_IC);
DCHECK(kind() == Code::LOAD_IC); PopVectorAndSlot();
PopVectorAndSlot();
}
TailCallBuiltin(masm(), MissBuiltin(kind())); TailCallBuiltin(masm(), MissBuiltin(kind()));
__ bind(&success); __ bind(&success);
} }
@ -402,7 +400,7 @@ void NamedStoreHandlerCompiler::FrontendFooter(Handle<Name> name, Label* miss) {
Label success; Label success;
__ b(&success); __ b(&success);
GenerateRestoreName(miss, name); GenerateRestoreName(miss, name);
if (IC::ICUseVector(kind())) PopVectorAndSlot(); PopVectorAndSlot();
TailCallBuiltin(masm(), MissBuiltin(kind())); TailCallBuiltin(masm(), MissBuiltin(kind()));
__ bind(&success); __ bind(&success);
} }

View File

@ -396,10 +396,8 @@ void NamedLoadHandlerCompiler::FrontendFooter(Handle<Name> name, Label* miss) {
Label success; Label success;
__ jmp(&success); __ jmp(&success);
__ bind(miss); __ bind(miss);
if (IC::ICUseVector(kind())) { DCHECK(kind() == Code::LOAD_IC);
DCHECK(kind() == Code::LOAD_IC); PopVectorAndSlot();
PopVectorAndSlot();
}
TailCallBuiltin(masm(), MissBuiltin(kind())); TailCallBuiltin(masm(), MissBuiltin(kind()));
__ bind(&success); __ bind(&success);
} }
@ -411,7 +409,7 @@ void NamedStoreHandlerCompiler::FrontendFooter(Handle<Name> name, Label* miss) {
Label success; Label success;
__ jmp(&success); __ jmp(&success);
GenerateRestoreName(miss, name); GenerateRestoreName(miss, name);
if (IC::ICUseVector(kind())) PopVectorAndSlot(); PopVectorAndSlot();
TailCallBuiltin(masm(), MissBuiltin(kind())); TailCallBuiltin(masm(), MissBuiltin(kind()));
__ bind(&success); __ bind(&success);
} }

View File

@ -14552,7 +14552,8 @@ void Code::Disassemble(const char* name, std::ostream& os) { // NOLINT
os << "major_key = " << (n == NULL ? "null" : n) << "\n"; os << "major_key = " << (n == NULL ? "null" : n) << "\n";
} }
if (is_inline_cache_stub()) { if (is_inline_cache_stub()) {
if (!IC::ICUseVector(kind())) { if (is_compare_ic_stub() || is_to_boolean_ic_stub() ||
is_binary_op_stub()) {
InlineCacheState ic_state = IC::StateFromCode(this); InlineCacheState ic_state = IC::StateFromCode(this);
os << "ic_state = " << ICState2String(ic_state) << "\n"; os << "ic_state = " << ICState2String(ic_state) << "\n";
PrintExtraICState(os, kind(), extra_ic_state()); PrintExtraICState(os, kind(), extra_ic_state());

View File

@ -4912,7 +4912,6 @@ void CheckIC(Handle<JSFunction> function, Code::Kind kind, int slot_index,
} else { } else {
Code* ic = FindFirstIC(function->code(), kind); Code* ic = FindFirstIC(function->code(), kind);
CHECK(ic->is_inline_cache_stub()); CHECK(ic->is_inline_cache_stub());
CHECK(!IC::ICUseVector(kind));
CHECK_EQ(state, IC::StateFromCode(ic)); CHECK_EQ(state, IC::StateFromCode(ic));
} }
} }