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

Side by Side Diff: src/compiler.cc

Issue 1153483002: [turbofan] Enable deoptimization for non-asm.js TurboFan code. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fix Michis comment. REBASE Created 5 years, 7 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 unified diff | Download patch
« no previous file with comments | « no previous file | src/compiler/js-inlining.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/compiler.h" 5 #include "src/compiler.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "src/ast-numbering.h" 9 #include "src/ast-numbering.h"
10 #include "src/bootstrapper.h" 10 #include "src/bootstrapper.h"
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 // Compiling for the snapshot typically results in different code than 107 // Compiling for the snapshot typically results in different code than
108 // compiling later on. This means that code recompiled with deoptimization 108 // compiling later on. This means that code recompiled with deoptimization
109 // support won't be "equivalent" (as defined by SharedFunctionInfo:: 109 // support won't be "equivalent" (as defined by SharedFunctionInfo::
110 // EnableDeoptimizationSupport), so it will replace the old code and all 110 // EnableDeoptimizationSupport), so it will replace the old code and all
111 // its type feedback. To avoid this, always compile functions in the snapshot 111 // its type feedback. To avoid this, always compile functions in the snapshot
112 // with deoptimization support. 112 // with deoptimization support.
113 if (isolate_->serializer_enabled()) EnableDeoptimizationSupport(); 113 if (isolate_->serializer_enabled()) EnableDeoptimizationSupport();
114 114
115 if (isolate_->debug()->is_active()) MarkAsDebug(); 115 if (isolate_->debug()->is_active()) MarkAsDebug();
116 if (FLAG_context_specialization) MarkAsContextSpecializing(); 116 if (FLAG_context_specialization) MarkAsContextSpecializing();
117 if (FLAG_turbo_deoptimization) MarkAsDeoptimizationEnabled();
118 if (FLAG_turbo_inlining) MarkAsInliningEnabled(); 117 if (FLAG_turbo_inlining) MarkAsInliningEnabled();
119 if (FLAG_turbo_source_positions) MarkAsSourcePositionsEnabled(); 118 if (FLAG_turbo_source_positions) MarkAsSourcePositionsEnabled();
120 if (FLAG_turbo_splitting) MarkAsSplittingEnabled(); 119 if (FLAG_turbo_splitting) MarkAsSplittingEnabled();
121 if (FLAG_turbo_types) MarkAsTypingEnabled(); 120 if (FLAG_turbo_types) MarkAsTypingEnabled();
122 121
123 if (has_shared_info() && shared_info()->is_compiled()) { 122 if (has_shared_info() && shared_info()->is_compiled()) {
124 // We should initialize the CompilationInfo feedback vector from the 123 // We should initialize the CompilationInfo feedback vector from the
125 // passed in shared info, rather than creating a new one. 124 // passed in shared info, rather than creating a new one.
126 feedback_vector_ = Handle<TypeFeedbackVector>( 125 feedback_vector_ = Handle<TypeFeedbackVector>(
127 shared_info()->feedback_vector(), parse_info->isolate()); 126 shared_info()->feedback_vector(), parse_info->isolate());
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after
386 if (info()->is_osr()) os << " OSR"; 385 if (info()->is_osr()) os << " OSR";
387 os << "]" << std::endl; 386 os << "]" << std::endl;
388 } 387 }
389 388
390 if (info()->shared_info()->asm_function()) { 389 if (info()->shared_info()->asm_function()) {
391 info()->MarkAsContextSpecializing(); 390 info()->MarkAsContextSpecializing();
392 } else if (FLAG_turbo_type_feedback) { 391 } else if (FLAG_turbo_type_feedback) {
393 info()->MarkAsTypeFeedbackEnabled(); 392 info()->MarkAsTypeFeedbackEnabled();
394 info()->EnsureFeedbackVector(); 393 info()->EnsureFeedbackVector();
395 } 394 }
395 if (!info()->shared_info()->asm_function() ||
396 FLAG_turbo_asm_deoptimization) {
397 info()->MarkAsDeoptimizationEnabled();
398 }
396 399
397 Timer t(this, &time_taken_to_create_graph_); 400 Timer t(this, &time_taken_to_create_graph_);
398 compiler::Pipeline pipeline(info()); 401 compiler::Pipeline pipeline(info());
399 pipeline.GenerateCode(); 402 pipeline.GenerateCode();
400 if (!info()->code().is_null()) { 403 if (!info()->code().is_null()) {
401 return SetLastStatus(SUCCEEDED); 404 return SetLastStatus(SUCCEEDED);
402 } 405 }
403 } 406 }
404 407
405 if (!isolate()->use_crankshaft()) { 408 if (!isolate()->use_crankshaft()) {
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
495 498
496 return SetLastStatus(BAILED_OUT); 499 return SetLastStatus(BAILED_OUT);
497 } 500 }
498 501
499 502
500 OptimizedCompileJob::Status OptimizedCompileJob::GenerateCode() { 503 OptimizedCompileJob::Status OptimizedCompileJob::GenerateCode() {
501 DCHECK(last_status() == SUCCEEDED); 504 DCHECK(last_status() == SUCCEEDED);
502 // TODO(turbofan): Currently everything is done in the first phase. 505 // TODO(turbofan): Currently everything is done in the first phase.
503 if (!info()->code().is_null()) { 506 if (!info()->code().is_null()) {
504 info()->dependencies()->Commit(info()->code()); 507 info()->dependencies()->Commit(info()->code());
505 if (FLAG_turbo_deoptimization) { 508 if (info()->is_deoptimization_enabled()) {
506 info()->parse_info()->context()->native_context()->AddOptimizedCode( 509 info()->parse_info()->context()->native_context()->AddOptimizedCode(
507 *info()->code()); 510 *info()->code());
508 } 511 }
509 RecordOptimizationStats(); 512 RecordOptimizationStats();
510 return last_status(); 513 return last_status();
511 } 514 }
512 515
513 DCHECK(!info()->dependencies()->HasAborted()); 516 DCHECK(!info()->dependencies()->HasAborted());
514 DisallowCodeDependencyChange no_dependency_change; 517 DisallowCodeDependencyChange no_dependency_change;
515 DisallowJavascriptExecution no_js(isolate()); 518 DisallowJavascriptExecution no_js(isolate());
(...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after
841 844
842 845
843 MaybeHandle<Code> Compiler::GetLazyCode(Handle<JSFunction> function) { 846 MaybeHandle<Code> Compiler::GetLazyCode(Handle<JSFunction> function) {
844 Isolate* isolate = function->GetIsolate(); 847 Isolate* isolate = function->GetIsolate();
845 DCHECK(!isolate->has_pending_exception()); 848 DCHECK(!isolate->has_pending_exception());
846 DCHECK(!function->is_compiled()); 849 DCHECK(!function->is_compiled());
847 AggregatedHistogramTimerScope timer(isolate->counters()->compile_lazy()); 850 AggregatedHistogramTimerScope timer(isolate->counters()->compile_lazy());
848 // If the debugger is active, do not compile with turbofan unless we can 851 // If the debugger is active, do not compile with turbofan unless we can
849 // deopt from turbofan code. 852 // deopt from turbofan code.
850 if (FLAG_turbo_asm && function->shared()->asm_function() && 853 if (FLAG_turbo_asm && function->shared()->asm_function() &&
851 (FLAG_turbo_deoptimization || !isolate->debug()->is_active()) && 854 (FLAG_turbo_asm_deoptimization || !isolate->debug()->is_active()) &&
852 !FLAG_turbo_osr) { 855 !FLAG_turbo_osr) {
853 CompilationInfoWithZone info(function); 856 CompilationInfoWithZone info(function);
854 857
855 VMState<COMPILER> state(isolate); 858 VMState<COMPILER> state(isolate);
856 PostponeInterruptsScope postpone(isolate); 859 PostponeInterruptsScope postpone(isolate);
857 860
858 info.SetOptimizing(BailoutId::None(), handle(function->shared()->code())); 861 info.SetOptimizing(BailoutId::None(), handle(function->shared()->code()));
859 862
860 if (GetOptimizedCodeNow(&info)) { 863 if (GetOptimizedCodeNow(&info)) {
861 DCHECK(function->shared()->is_compiled()); 864 DCHECK(function->shared()->is_compiled());
(...skipping 699 matching lines...) Expand 10 before | Expand all | Expand 10 after
1561 } 1564 }
1562 1565
1563 1566
1564 #if DEBUG 1567 #if DEBUG
1565 void CompilationInfo::PrintAstForTesting() { 1568 void CompilationInfo::PrintAstForTesting() {
1566 PrintF("--- Source from AST ---\n%s\n", 1569 PrintF("--- Source from AST ---\n%s\n",
1567 PrettyPrinter(isolate(), zone()).PrintProgram(function())); 1570 PrettyPrinter(isolate(), zone()).PrintProgram(function()));
1568 } 1571 }
1569 #endif 1572 #endif
1570 } } // namespace v8::internal 1573 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « no previous file | src/compiler/js-inlining.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698