Chromium Code Reviews| Index: src/compiler.cc |
| diff --git a/src/compiler.cc b/src/compiler.cc |
| index 9b59aca2e4d9da62a68b4600ce26c7db8b7f1c82..42c8bd89e9d1eba648a5444bc2b085e40b6a762a 100644 |
| --- a/src/compiler.cc |
| +++ b/src/compiler.cc |
| @@ -585,6 +585,10 @@ void InsertCodeIntoOptimizedCodeMap(CompilationInfo* info) { |
| // Frame specialization implies function context specialization. |
| DCHECK(!info->is_frame_specializing()); |
| + // TODO(4764): When compiling for OSR from bytecode, BailoutId might derive |
| + // from bytecode offset and overlap with actual BailoutId. No caching! |
| + if (info->is_osr() && info->is_optimizing_from_bytecode()) return; |
| + |
| // Cache optimized context-specific code. |
| Handle<JSFunction> function = info->closure(); |
| Handle<SharedFunctionInfo> shared(function->shared()); |
| @@ -745,13 +749,15 @@ MaybeHandle<Code> GetOptimizedCode(Handle<JSFunction> function, |
| Isolate* isolate = function->GetIsolate(); |
| Handle<SharedFunctionInfo> shared(function->shared(), isolate); |
| - // TODO(4764): Remove this guard once OSR graph construction works. |
| - if (!osr_ast_id.IsNone() && osr_frame->is_interpreted()) { |
| - return MaybeHandle<Code>(); |
| - } |
| + // TODO(4764): When compiling for OSR from bytecode, BailoutId might derive |
| + // from bytecode offset and overlap with actual BailoutId. No lookup! |
|
rmcilroy
2016/07/26 11:23:37
This comment should maybe be in the if below?
Michael Starzinger
2016/07/26 14:43:15
Done.
|
| + bool ignition_osr = !osr_ast_id.IsNone() && osr_frame->is_interpreted(); |
|
rmcilroy
2016/07/26 11:23:37
Should this check just be osr_frame->is_interprete
Michael Starzinger
2016/07/26 14:43:15
Done. As discussed offline, we still need to check
|
| + DCHECK_IMPLIES(ignition_osr, FLAG_ignition_osr); // Only when enabled. |
| + if (ignition_osr && !FLAG_turbo_from_bytecode) return MaybeHandle<Code>(); |
|
rmcilroy
2016/07/26 11:23:37
nit - newline above to make this bailout clear.
Michael Starzinger
2016/07/26 14:43:15
Done. Also added a comment explaining this bailout
|
| Handle<Code> cached_code; |
| - if (GetCodeFromOptimizedCodeMap(function, osr_ast_id) |
| + if (!ignition_osr && |
| + GetCodeFromOptimizedCodeMap(function, osr_ast_id) |
| .ToHandle(&cached_code)) { |
| if (FLAG_trace_opt) { |
| PrintF("[found optimized code for "); |
| @@ -772,7 +778,7 @@ MaybeHandle<Code> GetOptimizedCode(Handle<JSFunction> function, |
| VMState<COMPILER> state(isolate); |
| DCHECK(!isolate->has_pending_exception()); |
| PostponeInterruptsScope postpone(isolate); |
| - bool use_turbofan = UseTurboFan(shared); |
| + bool use_turbofan = UseTurboFan(shared) || ignition_osr; |
| std::unique_ptr<CompilationJob> job( |
| use_turbofan ? compiler::Pipeline::NewCompilationJob(function) |
| : new HCompilationJob(function)); |