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

Side by Side Diff: src/compiler.cc

Issue 1891663004: [compiler] Prevent unnecessary parsing with interpreter. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 8 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/pipeline.cc » ('j') | src/compiler/pipeline.cc » ('J')
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/ast-numbering.h" 9 #include "src/ast/ast-numbering.h"
10 #include "src/ast/prettyprinter.h" 10 #include "src/ast/prettyprinter.h"
(...skipping 701 matching lines...) Expand 10 before | Expand all | Expand 10 after
712 passes_turbo_filter) && 712 passes_turbo_filter) &&
713 passes_osr_test; 713 passes_osr_test;
714 } 714 }
715 715
716 bool GetOptimizedCodeNow(CompilationInfo* info) { 716 bool GetOptimizedCodeNow(CompilationInfo* info) {
717 Isolate* isolate = info->isolate(); 717 Isolate* isolate = info->isolate();
718 CanonicalHandleScope canonical(isolate); 718 CanonicalHandleScope canonical(isolate);
719 TimerEventScope<TimerEventOptimizeCode> optimize_code_timer(isolate); 719 TimerEventScope<TimerEventOptimizeCode> optimize_code_timer(isolate);
720 TRACE_EVENT0("v8", "V8.OptimizeCode"); 720 TRACE_EVENT0("v8", "V8.OptimizeCode");
721 721
722 if (!Compiler::ParseAndAnalyze(info->parse_info())) return false; 722 bool use_turbofan = UseTurboFan(info);
723 OptimizedCompileJob* job = use_turbofan
724 ? compiler::Pipeline::NewCompilationJob(info)
725 : new (info->zone()) HCompilationJob(info);
726
727 // Parsing is not required when optimizing from existing bytecode.
728 if (!use_turbofan || !info->shared_info()->HasBytecodeArray()) {
729 if (!Compiler::ParseAndAnalyze(info->parse_info())) return false;
730 }
723 731
724 TimerEventScope<TimerEventRecompileSynchronous> timer(isolate); 732 TimerEventScope<TimerEventRecompileSynchronous> timer(isolate);
725 TRACE_EVENT0("v8", "V8.RecompileSynchronous"); 733 TRACE_EVENT0("v8", "V8.RecompileSynchronous");
726 734
727 OptimizedCompileJob* job = UseTurboFan(info)
728 ? compiler::Pipeline::NewCompilationJob(info)
729 : new (info->zone()) HCompilationJob(info);
730 if (job->CreateGraph() != OptimizedCompileJob::SUCCEEDED || 735 if (job->CreateGraph() != OptimizedCompileJob::SUCCEEDED ||
731 job->OptimizeGraph() != OptimizedCompileJob::SUCCEEDED || 736 job->OptimizeGraph() != OptimizedCompileJob::SUCCEEDED ||
732 job->GenerateCode() != OptimizedCompileJob::SUCCEEDED) { 737 job->GenerateCode() != OptimizedCompileJob::SUCCEEDED) {
733 if (FLAG_trace_opt) { 738 if (FLAG_trace_opt) {
734 PrintF("[aborted optimizing "); 739 PrintF("[aborted optimizing ");
735 info->closure()->ShortPrint(); 740 info->closure()->ShortPrint();
736 PrintF(" because: %s]\n", GetBailoutReason(info->bailout_reason())); 741 PrintF(" because: %s]\n", GetBailoutReason(info->bailout_reason()));
737 } 742 }
738 return false; 743 return false;
739 } 744 }
(...skipping 15 matching lines...) Expand all
755 760
756 if (!isolate->optimizing_compile_dispatcher()->IsQueueAvailable()) { 761 if (!isolate->optimizing_compile_dispatcher()->IsQueueAvailable()) {
757 if (FLAG_trace_concurrent_recompilation) { 762 if (FLAG_trace_concurrent_recompilation) {
758 PrintF(" ** Compilation queue full, will retry optimizing "); 763 PrintF(" ** Compilation queue full, will retry optimizing ");
759 info->closure()->ShortPrint(); 764 info->closure()->ShortPrint();
760 PrintF(" later.\n"); 765 PrintF(" later.\n");
761 } 766 }
762 return false; 767 return false;
763 } 768 }
764 769
770 bool use_turbofan = UseTurboFan(info);
771 OptimizedCompileJob* job = use_turbofan
772 ? compiler::Pipeline::NewCompilationJob(info)
773 : new (info->zone()) HCompilationJob(info);
774
775 // All handles below this point will be allocated in a deferred handle scope
776 // that is detached and handed off to the background thread when we return.
765 CompilationHandleScope handle_scope(info); 777 CompilationHandleScope handle_scope(info);
766 if (!Compiler::ParseAndAnalyze(info->parse_info())) return false; 778
779 // Parsing is not required when optimizing from existing bytecode.
780 if (!use_turbofan || !info->shared_info()->HasBytecodeArray()) {
781 if (!Compiler::ParseAndAnalyze(info->parse_info())) return false;
782 }
767 783
768 // Reopen handles in the new CompilationHandleScope. 784 // Reopen handles in the new CompilationHandleScope.
769 info->ReopenHandlesInNewHandleScope(); 785 info->ReopenHandlesInNewHandleScope();
770 info->parse_info()->ReopenHandlesInNewHandleScope(); 786 info->parse_info()->ReopenHandlesInNewHandleScope();
771 787
772 TimerEventScope<TimerEventRecompileSynchronous> timer(info->isolate()); 788 TimerEventScope<TimerEventRecompileSynchronous> timer(info->isolate());
773 TRACE_EVENT0("v8", "V8.RecompileSynchronous"); 789 TRACE_EVENT0("v8", "V8.RecompileSynchronous");
774 790
775 OptimizedCompileJob* job = UseTurboFan(info) 791 if (job->CreateGraph() != OptimizedCompileJob::SUCCEEDED) return false;
776 ? compiler::Pipeline::NewCompilationJob(info)
777 : new (info->zone()) HCompilationJob(info);
778 OptimizedCompileJob::Status status = job->CreateGraph();
779 if (status != OptimizedCompileJob::SUCCEEDED) return false;
780 isolate->optimizing_compile_dispatcher()->QueueForOptimization(job); 792 isolate->optimizing_compile_dispatcher()->QueueForOptimization(job);
781 793
782 if (FLAG_trace_concurrent_recompilation) { 794 if (FLAG_trace_concurrent_recompilation) {
783 PrintF(" ** Queued "); 795 PrintF(" ** Queued ");
784 info->closure()->ShortPrint(); 796 info->closure()->ShortPrint();
785 if (info->is_osr()) { 797 if (info->is_osr()) {
786 PrintF(" for concurrent OSR at %d.\n", info->osr_ast_id().ToInt()); 798 PrintF(" for concurrent OSR at %d.\n", info->osr_ast_id().ToInt());
787 } else { 799 } else {
788 PrintF(" for concurrent optimization.\n"); 800 PrintF(" for concurrent optimization.\n");
789 } 801 }
(...skipping 870 matching lines...) Expand 10 before | Expand all | Expand 10 after
1660 MaybeHandle<Code> code; 1672 MaybeHandle<Code> code;
1661 if (cached.code != nullptr) code = handle(cached.code); 1673 if (cached.code != nullptr) code = handle(cached.code);
1662 Handle<Context> native_context(function->context()->native_context()); 1674 Handle<Context> native_context(function->context()->native_context());
1663 SharedFunctionInfo::AddToOptimizedCodeMap(shared, native_context, code, 1675 SharedFunctionInfo::AddToOptimizedCodeMap(shared, native_context, code,
1664 literals, BailoutId::None()); 1676 literals, BailoutId::None());
1665 } 1677 }
1666 } 1678 }
1667 1679
1668 } // namespace internal 1680 } // namespace internal
1669 } // namespace v8 1681 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | src/compiler/pipeline.cc » ('j') | src/compiler/pipeline.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698