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

Unified Diff: src/ic/ic.cc

Issue 2052763003: [ic] [stubs] Remove InlineCacheState field from the code flags. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Rebasing Created 4 years, 6 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/ic.h ('k') | src/ic/stub-cache.cc » ('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 820a4af2cfc29702f38ebce724310231b0917d3a..aad2f8718bf2ca01c9328d4aea080954bffce5b0 100644
--- a/src/ic/ic.cc
+++ b/src/ic/ic.cc
@@ -45,12 +45,6 @@ char IC::TransitionMarkFromState(IC::State state) {
return 'N';
case GENERIC:
return 'G';
-
- // We never see the debugger states here, because the state is
- // computed from the original code - not the patched code. Let
- // these cases fall through to the unreachable code below.
- case DEBUG_STUB:
- break;
}
UNREACHABLE();
return 0;
@@ -183,11 +177,32 @@ IC::IC(FrameDepth depth, Isolate* isolate, FeedbackNexus* nexus)
pc_address_ = StackFrame::ResolveReturnAddressLocation(pc_address);
Code* target = this->target();
kind_ = target->kind();
- state_ = UseVector() ? nexus->StateFromFeedback() : target->ic_state();
+ state_ = UseVector() ? nexus->StateFromFeedback() : StateFromCode(target);
old_state_ = state_;
extra_ic_state_ = target->extra_ic_state();
}
+InlineCacheState IC::StateFromCode(Code* code) {
+ Isolate* isolate = code->GetIsolate();
+ switch (code->kind()) {
+ case Code::BINARY_OP_IC: {
+ BinaryOpICState state(isolate, code->extra_ic_state());
+ return state.GetICState();
+ }
+ case Code::COMPARE_IC: {
+ CompareICStub stub(isolate, code->extra_ic_state());
+ return stub.GetICState();
+ }
+ case Code::TO_BOOLEAN_IC: {
+ ToBooleanICStub stub(isolate, code->extra_ic_state());
+ return stub.GetICState();
+ }
+ default:
+ if (code->is_debug_stub()) return UNINITIALIZED;
+ UNREACHABLE();
+ return UNINITIALIZED;
+ }
+}
SharedFunctionInfo* IC::GetSharedFunctionInfo() const {
// Compute the JavaScript frame for the frame pointer of this IC
@@ -354,7 +369,6 @@ static void ComputeTypeInfoCountDelta(IC::State old_state, IC::State new_state,
}
break;
case RECOMPUTE_HANDLER:
- case DEBUG_STUB:
UNREACHABLE();
}
}
@@ -379,8 +393,8 @@ void IC::PostPatching(Address address, Code* target, Code* old_target) {
DCHECK(old_target->is_inline_cache_stub());
DCHECK(target->is_inline_cache_stub());
- State old_state = old_target->ic_state();
- State new_state = target->ic_state();
+ State old_state = StateFromCode(old_target);
+ State new_state = StateFromCode(target);
Isolate* isolate = target->GetIsolate();
Code* host =
@@ -794,8 +808,6 @@ void IC::PatchCache(Handle<Name> name, Handle<Code> code) {
DCHECK(UseVector());
vector_set_ = true;
break;
- case DEBUG_STUB:
- break;
case GENERIC:
UNREACHABLE();
break;
« no previous file with comments | « src/ic/ic.h ('k') | src/ic/stub-cache.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698