| Index: src/compiler.cc
|
| diff --git a/src/compiler.cc b/src/compiler.cc
|
| index 77c0199a40f2b2d48e0dc3ba58856d8caeab05b3..25d65040f9a0470c3e594385dc9f30ece9ec4148 100644
|
| --- a/src/compiler.cc
|
| +++ b/src/compiler.cc
|
| @@ -597,13 +597,14 @@
|
| &RuntimeCallStats::CompileGetFromOptimizedCodeMap);
|
| Handle<SharedFunctionInfo> shared(function->shared());
|
| DisallowHeapAllocation no_gc;
|
| - Code* code = shared->SearchOptimizedCodeMap(
|
| + CodeAndLiterals cached = shared->SearchOptimizedCodeMap(
|
| function->context()->native_context(), osr_ast_id);
|
| - if (code != nullptr) {
|
| + if (cached.code != nullptr) {
|
| // Caching of optimized code enabled and optimized code found.
|
| - DCHECK(!code->marked_for_deoptimization());
|
| + if (cached.literals != nullptr) function->set_literals(cached.literals);
|
| + DCHECK(!cached.code->marked_for_deoptimization());
|
| DCHECK(function->shared()->is_compiled());
|
| - return Handle<Code>(code);
|
| + return Handle<Code>(cached.code);
|
| }
|
| return MaybeHandle<Code>();
|
| }
|
| @@ -625,9 +626,10 @@
|
| // Cache optimized context-specific code.
|
| Handle<JSFunction> function = info->closure();
|
| Handle<SharedFunctionInfo> shared(function->shared());
|
| + Handle<LiteralsArray> literals(function->literals());
|
| Handle<Context> native_context(function->context()->native_context());
|
| SharedFunctionInfo::AddToOptimizedCodeMap(shared, native_context, code,
|
| - info->osr_ast_id());
|
| + literals, info->osr_ast_id());
|
| }
|
|
|
| bool GetOptimizedCodeNow(CompilationJob* job) {
|
| @@ -863,8 +865,10 @@
|
| } else if (job->FinalizeJob() == CompilationJob::SUCCEEDED) {
|
| job->RecordOptimizedCompilationStats();
|
| RecordFunctionCompilation(CodeEventListener::LAZY_COMPILE_TAG, info);
|
| - if (shared->SearchOptimizedCodeMap(info->context()->native_context(),
|
| - info->osr_ast_id()) == nullptr) {
|
| + if (shared
|
| + ->SearchOptimizedCodeMap(info->context()->native_context(),
|
| + info->osr_ast_id())
|
| + .code == nullptr) {
|
| InsertCodeIntoOptimizedCodeMap(info);
|
| }
|
| if (FLAG_trace_opt) {
|
| @@ -1752,16 +1756,19 @@
|
| function->MarkForOptimization();
|
| }
|
|
|
| - Code* code = shared->SearchOptimizedCodeMap(
|
| + CodeAndLiterals cached = shared->SearchOptimizedCodeMap(
|
| function->context()->native_context(), BailoutId::None());
|
| - if (code != nullptr) {
|
| + if (cached.code != nullptr) {
|
| // Caching of optimized code enabled and optimized code found.
|
| - DCHECK(!code->marked_for_deoptimization());
|
| + DCHECK(!cached.code->marked_for_deoptimization());
|
| DCHECK(function->shared()->is_compiled());
|
| - function->ReplaceCode(code);
|
| - }
|
| -
|
| - if (shared->is_compiled()) {
|
| + function->ReplaceCode(cached.code);
|
| + }
|
| +
|
| + if (cached.literals != nullptr) {
|
| + DCHECK(shared->is_compiled());
|
| + function->set_literals(cached.literals);
|
| + } else if (shared->is_compiled()) {
|
| // TODO(mvstanton): pass pretenure flag to EnsureLiterals.
|
| JSFunction::EnsureLiterals(function);
|
| }
|
|
|