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

Unified Diff: src/ic/ic.cc

Issue 1209903003: VectorICs: Lithium support for vector-based stores. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fix and REBASE. Created 5 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/mips/lithium-codegen-mips.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 7c14b5625beb49203ee114964068d6a8cb6e1bad..f6584f69223b5b235bd40bed5199ebee27a5a479 100644
--- a/src/ic/ic.cc
+++ b/src/ic/ic.cc
@@ -937,9 +937,9 @@ Handle<Code> KeyedLoadIC::initialize_stub_in_optimized_code(
}
-Handle<Code> KeyedStoreIC::initialize_stub(Isolate* isolate,
- LanguageMode language_mode,
- State initialization_state) {
+static Handle<Code> KeyedStoreICInitializeStubHelper(
+ Isolate* isolate, LanguageMode language_mode,
+ InlineCacheState initialization_state) {
switch (initialization_state) {
case UNINITIALIZED:
return is_strict(language_mode)
@@ -960,6 +960,31 @@ Handle<Code> KeyedStoreIC::initialize_stub(Isolate* isolate,
}
+Handle<Code> KeyedStoreIC::initialize_stub(Isolate* isolate,
+ LanguageMode language_mode,
+ State initialization_state) {
+ if (FLAG_vector_stores) {
+ VectorKeyedStoreICTrampolineStub stub(isolate, StoreICState(language_mode));
+ return stub.GetCode();
+ }
+
+ return KeyedStoreICInitializeStubHelper(isolate, language_mode,
+ initialization_state);
+}
+
+
+Handle<Code> KeyedStoreIC::initialize_stub_in_optimized_code(
+ Isolate* isolate, LanguageMode language_mode, State initialization_state) {
+ if (FLAG_vector_stores && initialization_state != MEGAMORPHIC) {
+ VectorKeyedStoreICStub stub(isolate, StoreICState(language_mode));
+ return stub.GetCode();
+ }
+
+ return KeyedStoreICInitializeStubHelper(isolate, language_mode,
+ initialization_state);
+}
+
+
Handle<Code> LoadIC::megamorphic_stub() {
DCHECK_EQ(Code::KEYED_LOAD_IC, kind());
return KeyedLoadIC::ChooseMegamorphicStub(isolate());
@@ -1323,26 +1348,15 @@ MaybeHandle<Object> KeyedLoadIC::Load(Handle<Object> object,
}
}
- if (!UseVector()) {
- if (!is_target_set()) {
- Code* generic = *megamorphic_stub();
- if (*stub == generic) {
- TRACE_GENERIC_IC(isolate(), "KeyedLoadIC", "set generic");
- }
-
- set_target(*stub);
- TRACE_IC("LoadIC", key);
+ DCHECK(UseVector());
+ if (!is_vector_set() || stub.is_null()) {
+ Code* generic = *megamorphic_stub();
+ if (!stub.is_null() && *stub == generic) {
+ ConfigureVectorState(MEGAMORPHIC);
+ TRACE_GENERIC_IC(isolate(), "KeyedLoadIC", "set generic");
}
- } else {
- if (!is_vector_set() || stub.is_null()) {
- Code* generic = *megamorphic_stub();
- if (!stub.is_null() && *stub == generic) {
- ConfigureVectorState(MEGAMORPHIC);
- TRACE_GENERIC_IC(isolate(), "KeyedLoadIC", "set generic");
- }
- TRACE_IC("LoadIC", key);
- }
+ TRACE_IC("LoadIC", key);
}
if (!load_handle.is_null()) return load_handle;
@@ -1523,16 +1537,43 @@ Handle<Code> CallIC::initialize_stub_in_optimized_code(
}
+static Handle<Code> StoreICInitializeStubHelper(
+ Isolate* isolate, ExtraICState extra_state,
+ InlineCacheState initialization_state) {
+ Handle<Code> ic = PropertyICCompiler::ComputeStore(
+ isolate, initialization_state, extra_state);
+ return ic;
+}
+
+
Handle<Code> StoreIC::initialize_stub(Isolate* isolate,
LanguageMode language_mode,
State initialization_state) {
DCHECK(initialization_state == UNINITIALIZED ||
initialization_state == PREMONOMORPHIC ||
initialization_state == MEGAMORPHIC);
- ExtraICState extra_state = ComputeExtraICState(language_mode);
- Handle<Code> ic = PropertyICCompiler::ComputeStore(
- isolate, initialization_state, extra_state);
- return ic;
+ if (FLAG_vector_stores) {
+ VectorStoreICTrampolineStub stub(isolate, StoreICState(language_mode));
+ return stub.GetCode();
+ }
+
+ return StoreICInitializeStubHelper(
+ isolate, ComputeExtraICState(language_mode), initialization_state);
+}
+
+
+Handle<Code> StoreIC::initialize_stub_in_optimized_code(
+ Isolate* isolate, LanguageMode language_mode, State initialization_state) {
+ DCHECK(initialization_state == UNINITIALIZED ||
+ initialization_state == PREMONOMORPHIC ||
+ initialization_state == MEGAMORPHIC);
+ if (FLAG_vector_stores && initialization_state != MEGAMORPHIC) {
+ VectorStoreICStub stub(isolate, StoreICState(language_mode));
+ return stub.GetCode();
+ }
+
+ return StoreICInitializeStubHelper(
+ isolate, ComputeExtraICState(language_mode), initialization_state);
}
« no previous file with comments | « src/ic/ic.h ('k') | src/mips/lithium-codegen-mips.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698