Index: src/compiler.cc |
diff --git a/src/compiler.cc b/src/compiler.cc |
index b9fe9870d6750a5383c72b955195bb9b4c2a4bb0..362cddbf19654348921605f18d40411042c476a9 100644 |
--- a/src/compiler.cc |
+++ b/src/compiler.cc |
@@ -1028,16 +1028,20 @@ Handle<SharedFunctionInfo> Compiler::BuildFunctionInfo(FunctionLiteral* literal, |
} |
-static Handle<Code> GetCodeFromOptimizedCodeMap(Handle<JSFunction> function) { |
+static Handle<Code> GetCodeFromOptimizedCodeMap(Handle<JSFunction> function, |
+ BailoutId osr_ast_id) { |
if (FLAG_cache_optimized_code) { |
Handle<SharedFunctionInfo> shared(function->shared()); |
DisallowHeapAllocation no_gc; |
int index = shared->SearchOptimizedCodeMap( |
- function->context()->native_context()); |
+ function->context()->native_context(), osr_ast_id); |
if (index > 0) { |
if (FLAG_trace_opt) { |
PrintF("[found optimized code for "); |
function->ShortPrint(); |
+ if (!osr_ast_id.IsNone()) { |
+ PrintF(" at OSR AST id %d", osr_ast_id.ToInt()); |
+ } |
PrintF("]\n"); |
} |
FixedArray* literals = shared->GetLiteralsFromOptimizedCodeMap(index); |
@@ -1053,14 +1057,14 @@ static void InsertCodeIntoOptimizedCodeMap(CompilationInfo* info) { |
Handle<Code> code = info->code(); |
if (code->kind() != Code::OPTIMIZED_FUNCTION) return; // Nothing to do. |
- // Cache non-OSR optimized code. |
- if (FLAG_cache_optimized_code && !info->is_osr()) { |
+ // Cache optimized code. |
+ if (FLAG_cache_optimized_code) { |
Handle<JSFunction> function = info->closure(); |
Handle<SharedFunctionInfo> shared(function->shared()); |
Handle<FixedArray> literals(function->literals()); |
Handle<Context> native_context(function->context()->native_context()); |
SharedFunctionInfo::AddToOptimizedCodeMap( |
- shared, native_context, code, literals); |
+ shared, native_context, code, literals, info->osr_ast_id()); |
} |
} |
@@ -1137,10 +1141,8 @@ Handle<Code> Compiler::GetOptimizedCode(Handle<JSFunction> function, |
Handle<Code> current_code, |
ConcurrencyMode mode, |
BailoutId osr_ast_id) { |
- if (osr_ast_id.IsNone()) { // No cache for OSR. |
- Handle<Code> cached_code = GetCodeFromOptimizedCodeMap(function); |
- if (!cached_code.is_null()) return cached_code; |
- } |
+ Handle<Code> cached_code = GetCodeFromOptimizedCodeMap(function, osr_ast_id); |
+ if (!cached_code.is_null()) return cached_code; |
SmartPointer<CompilationInfo> info(new CompilationInfoWithZone(function)); |
Isolate* isolate = info->isolate(); |
@@ -1210,7 +1212,7 @@ Handle<Code> Compiler::GetConcurrentlyOptimizedCode(OptimizedCompileJob* job) { |
Compiler::RecordFunctionCompilation( |
Logger::LAZY_COMPILE_TAG, info.get(), shared); |
if (info->shared_info()->SearchOptimizedCodeMap( |
- info->context()->native_context()) == -1) { |
+ info->context()->native_context(), info->osr_ast_id()) == -1) { |
InsertCodeIntoOptimizedCodeMap(info.get()); |
} |