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

Unified Diff: src/code-stubs-hydrogen.cc

Issue 1208013002: [turbofan] Implement sharing of context-independent code. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@local_opt-code-map-3
Patch Set: Disable test for GC stress. 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 | « no previous file | src/compiler.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/code-stubs-hydrogen.cc
diff --git a/src/code-stubs-hydrogen.cc b/src/code-stubs-hydrogen.cc
index c5f8836c3ac51e9ab191bd12a17ea806a213d882..43752cbf84160c4e40e36e37a7a970990e82fe1e 100644
--- a/src/code-stubs-hydrogen.cc
+++ b/src/code-stubs-hydrogen.cc
@@ -93,6 +93,8 @@ class CodeStubGraphBuilderBase : public HGraphBuilder {
IfBuilder* builder,
HValue* optimized_map,
HValue* map_index);
+ void BuildInstallOptimizedCode(HValue* js_function, HValue* native_context,
+ HValue* code_object, HValue* literals);
void BuildInstallCode(HValue* js_function, HValue* shared_info);
HInstruction* LoadFromOptimizedCodeMap(HValue* optimized_map,
@@ -1651,6 +1653,16 @@ void CodeStubGraphBuilderBase::BuildCheckAndInstallOptimizedCode(
HValue* literals = LoadFromOptimizedCodeMap(optimized_map,
map_index, SharedFunctionInfo::kLiteralsOffset);
+ BuildInstallOptimizedCode(js_function, native_context, code_object, literals);
+
+ // The builder continues in the "then" after this function.
+}
+
+
+void CodeStubGraphBuilderBase::BuildInstallOptimizedCode(HValue* js_function,
+ HValue* native_context,
+ HValue* code_object,
+ HValue* literals) {
Counters* counters = isolate()->counters();
AddIncrementCounter(counters->fast_new_closure_install_optimized());
@@ -1673,8 +1685,6 @@ void CodeStubGraphBuilderBase::BuildCheckAndInstallOptimizedCode(
Add<HStoreNamedField>(native_context,
HObjectAccess::ForContextSlot(Context::OPTIMIZED_FUNCTIONS_LIST),
js_function);
-
- // The builder continues in the "then" after this function.
}
@@ -1712,6 +1722,7 @@ void CodeStubGraphBuilderBase::BuildInstallFromOptimizedCodeMap(
HValue* shared_info,
HValue* native_context) {
Counters* counters = isolate()->counters();
+ Factory* factory = isolate()->factory();
IfBuilder is_optimized(this);
HInstruction* optimized_map = Add<HLoadNamedField>(
shared_info, nullptr, HObjectAccess::ForOptimizedCodeMap());
@@ -1764,15 +1775,31 @@ void CodeStubGraphBuilderBase::BuildInstallFromOptimizedCodeMap(
}
loop_builder.EndBody();
- // If slot_iterator equals first entry index, then we failed to find and
- // install optimized code
+ // If slot_iterator equals first entry index, then we failed to find a
+ // context-dependent code and try context-independent code next.
IfBuilder no_optimized_code_check(this);
no_optimized_code_check.If<HCompareNumericAndBranch>(
slot_iterator, first_entry_index, Token::EQ);
no_optimized_code_check.Then();
{
- // Store the unoptimized code
- BuildInstallCode(js_function, shared_info);
+ IfBuilder shared_code_check(this);
+ HValue* shared_code = Add<HLoadNamedField>(
+ optimized_map, nullptr,
+ HObjectAccess::ForOptimizedCodeMapSharedCode());
+ shared_code_check.IfNot<HCompareObjectEqAndBranch>(
+ shared_code, graph()->GetConstantUndefined());
+ shared_code_check.Then();
+ {
+ // Store the context-independent optimized code.
+ HValue* literals = Add<HConstant>(factory->empty_fixed_array());
+ BuildInstallOptimizedCode(js_function, native_context, shared_code,
+ literals);
+ }
+ shared_code_check.Else();
+ {
+ // Store the unoptimized code.
+ BuildInstallCode(js_function, shared_info);
+ }
}
}
}
« no previous file with comments | « no previous file | src/compiler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698