Commit 1986a486 authored by mstarzinger's avatar mstarzinger Committed by Commit bot

[interpreter] CompilationInfo::unoptimized_code only for OSR.

The field in question is only needed when the optimizing compiler is
triggered via OSR. All other paths (e.g. from bytecode stream) should
not rely on the unoptimized code being present.

R=yangguo@chromium.org

Review URL: https://codereview.chromium.org/1685633002

Cr-Commit-Position: refs/heads/master@{#33860}
parent defcc642
...@@ -1024,7 +1024,7 @@ MaybeHandle<Code> Compiler::GetLazyCode(Handle<JSFunction> function) { ...@@ -1024,7 +1024,7 @@ MaybeHandle<Code> Compiler::GetLazyCode(Handle<JSFunction> function) {
VMState<COMPILER> state(isolate); VMState<COMPILER> state(isolate);
PostponeInterruptsScope postpone(isolate); PostponeInterruptsScope postpone(isolate);
info.SetOptimizing(BailoutId::None(), handle(function->shared()->code())); info.SetOptimizing();
if (GetOptimizedCodeNow(&info)) { if (GetOptimizedCodeNow(&info)) {
DCHECK(function->shared()->is_compiled()); DCHECK(function->shared()->is_compiled());
...@@ -1771,7 +1771,7 @@ MaybeHandle<Code> Compiler::GetOptimizedCode(Handle<JSFunction> function, ...@@ -1771,7 +1771,7 @@ MaybeHandle<Code> Compiler::GetOptimizedCode(Handle<JSFunction> function,
DCHECK(!isolate->has_pending_exception()); DCHECK(!isolate->has_pending_exception());
PostponeInterruptsScope postpone(isolate); PostponeInterruptsScope postpone(isolate);
info->SetOptimizing(osr_ast_id, current_code); info->SetOptimizingForOsr(osr_ast_id, current_code);
if (mode == CONCURRENT) { if (mode == CONCURRENT) {
if (GetOptimizedCodeLater(info.get())) { if (GetOptimizedCodeLater(info.get())) {
......
...@@ -247,15 +247,18 @@ class CompilationInfo { ...@@ -247,15 +247,18 @@ class CompilationInfo {
// Accessors for the different compilation modes. // Accessors for the different compilation modes.
bool IsOptimizing() const { return mode_ == OPTIMIZE; } bool IsOptimizing() const { return mode_ == OPTIMIZE; }
bool IsStub() const { return mode_ == STUB; } bool IsStub() const { return mode_ == STUB; }
void SetOptimizing(BailoutId osr_ast_id, Handle<Code> unoptimized) { void SetOptimizing() {
DCHECK(has_shared_info()); DCHECK(has_shared_info());
SetMode(OPTIMIZE); SetMode(OPTIMIZE);
osr_ast_id_ = osr_ast_id;
unoptimized_code_ = unoptimized;
optimization_id_ = isolate()->NextOptimizationId(); optimization_id_ = isolate()->NextOptimizationId();
code_flags_ = code_flags_ =
Code::KindField::update(code_flags_, Code::OPTIMIZED_FUNCTION); Code::KindField::update(code_flags_, Code::OPTIMIZED_FUNCTION);
} }
void SetOptimizingForOsr(BailoutId osr_ast_id, Handle<Code> unoptimized) {
SetOptimizing();
osr_ast_id_ = osr_ast_id;
unoptimized_code_ = unoptimized;
}
// Deoptimization support. // Deoptimization support.
bool HasDeoptimizationSupport() const { bool HasDeoptimizationSupport() const {
......
...@@ -170,7 +170,7 @@ class FunctionTester : public InitializedHandleScope { ...@@ -170,7 +170,7 @@ class FunctionTester : public InitializedHandleScope {
info.MarkAsDeoptimizationEnabled(); info.MarkAsDeoptimizationEnabled();
CHECK(Parser::ParseStatic(info.parse_info())); CHECK(Parser::ParseStatic(info.parse_info()));
info.SetOptimizing(BailoutId::None(), Handle<Code>(function->code())); info.SetOptimizing();
if (flags_ & CompilationInfo::kFunctionContextSpecializing) { if (flags_ & CompilationInfo::kFunctionContextSpecializing) {
info.MarkAsFunctionContextSpecializing(); info.MarkAsFunctionContextSpecializing();
} }
...@@ -231,8 +231,7 @@ class FunctionTester : public InitializedHandleScope { ...@@ -231,8 +231,7 @@ class FunctionTester : public InitializedHandleScope {
CompilationInfo info(&parse_info); CompilationInfo info(&parse_info);
CHECK(Parser::ParseStatic(info.parse_info())); CHECK(Parser::ParseStatic(info.parse_info()));
info.SetOptimizing(BailoutId::None(), info.SetOptimizing();
Handle<Code>(function->shared()->code()));
CHECK(Compiler::Analyze(info.parse_info())); CHECK(Compiler::Analyze(info.parse_info()));
CHECK(Compiler::EnsureDeoptimizationSupport(&info)); CHECK(Compiler::EnsureDeoptimizationSupport(&info));
......
...@@ -18,7 +18,7 @@ static void RunPipeline(Zone* zone, const char* source) { ...@@ -18,7 +18,7 @@ static void RunPipeline(Zone* zone, const char* source) {
ParseInfo parse_info(zone, function); ParseInfo parse_info(zone, function);
CHECK(Compiler::ParseAndAnalyze(&parse_info)); CHECK(Compiler::ParseAndAnalyze(&parse_info));
CompilationInfo info(&parse_info); CompilationInfo info(&parse_info);
info.SetOptimizing(BailoutId::None(), Handle<Code>(function->code())); info.SetOptimizing();
Pipeline pipeline(&info); Pipeline pipeline(&info);
Handle<Code> code = pipeline.GenerateCode(); Handle<Code> code = pipeline.GenerateCode();
......
...@@ -124,7 +124,7 @@ class BytecodeGraphTester { ...@@ -124,7 +124,7 @@ class BytecodeGraphTester {
ParseInfo parse_info(zone_, function); ParseInfo parse_info(zone_, function);
CompilationInfo compilation_info(&parse_info); CompilationInfo compilation_info(&parse_info);
compilation_info.SetOptimizing(BailoutId::None(), Handle<Code>()); compilation_info.SetOptimizing();
compilation_info.MarkAsDeoptimizationEnabled(); compilation_info.MarkAsDeoptimizationEnabled();
compiler::Pipeline pipeline(&compilation_info); compiler::Pipeline pipeline(&compilation_info);
Handle<Code> code = pipeline.GenerateCode(); Handle<Code> code = pipeline.GenerateCode();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment