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

Side by Side Diff: src/compiler.cc

Issue 1903723002: [compiler] Remove CompilationInfo::abstract_code accessor. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@local_cleanup-compiler-simplify-26
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 | « src/compiler.h ('k') | no next file » | 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/ast-numbering.h" 9 #include "src/ast/ast-numbering.h"
10 #include "src/ast/prettyprinter.h" 10 #include "src/ast/prettyprinter.h"
(...skipping 429 matching lines...) Expand 10 before | Expand all | Expand 10 after
440 time_taken_to_codegen_); 440 time_taken_to_codegen_);
441 } 441 }
442 } 442 }
443 443
444 // ---------------------------------------------------------------------------- 444 // ----------------------------------------------------------------------------
445 // Local helper methods that make up the compilation pipeline. 445 // Local helper methods that make up the compilation pipeline.
446 446
447 namespace { 447 namespace {
448 448
449 void RecordFunctionCompilation(Logger::LogEventsAndTags tag, 449 void RecordFunctionCompilation(Logger::LogEventsAndTags tag,
450 CompilationInfo* info, 450 CompilationInfo* info) {
451 Handle<SharedFunctionInfo> shared) {
452 // SharedFunctionInfo is passed separately, because if CompilationInfo
453 // was created using Script object, it will not have it.
454
455 // Log the code generation. If source information is available include 451 // Log the code generation. If source information is available include
456 // script name and line number. Check explicitly whether logging is 452 // script name and line number. Check explicitly whether logging is
457 // enabled as finding the line number is not free. 453 // enabled as finding the line number is not free.
458 if (info->isolate()->logger()->is_logging_code_events() || 454 if (info->isolate()->logger()->is_logging_code_events() ||
459 info->isolate()->cpu_profiler()->is_profiling()) { 455 info->isolate()->cpu_profiler()->is_profiling()) {
456 Handle<SharedFunctionInfo> shared = info->shared_info();
460 Handle<Script> script = info->parse_info()->script(); 457 Handle<Script> script = info->parse_info()->script();
461 Handle<AbstractCode> abstract_code = info->abstract_code(); 458 Handle<AbstractCode> abstract_code =
459 info->has_bytecode_array()
460 ? Handle<AbstractCode>::cast(info->bytecode_array())
461 : Handle<AbstractCode>::cast(info->code());
462 if (abstract_code.is_identical_to( 462 if (abstract_code.is_identical_to(
463 info->isolate()->builtins()->CompileLazy())) { 463 info->isolate()->builtins()->CompileLazy())) {
464 return; 464 return;
465 } 465 }
466 int line_num = Script::GetLineNumber(script, shared->start_position()) + 1; 466 int line_num = Script::GetLineNumber(script, shared->start_position()) + 1;
467 int column_num = 467 int column_num =
468 Script::GetColumnNumber(script, shared->start_position()) + 1; 468 Script::GetColumnNumber(script, shared->start_position()) + 1;
469 String* script_name = script->name()->IsString() 469 String* script_name = script->name()->IsString()
470 ? String::cast(script->name()) 470 ? String::cast(script->name())
471 : info->isolate()->heap()->empty_string(); 471 : info->isolate()->heap()->empty_string();
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
576 VMState<COMPILER> state(info->isolate()); 576 VMState<COMPILER> state(info->isolate());
577 PostponeInterruptsScope postpone(info->isolate()); 577 PostponeInterruptsScope postpone(info->isolate());
578 578
579 // Parse and update CompilationInfo with the results. 579 // Parse and update CompilationInfo with the results.
580 if (!Parser::ParseStatic(info->parse_info())) return MaybeHandle<Code>(); 580 if (!Parser::ParseStatic(info->parse_info())) return MaybeHandle<Code>();
581 Handle<SharedFunctionInfo> shared = info->shared_info(); 581 Handle<SharedFunctionInfo> shared = info->shared_info();
582 DCHECK_EQ(shared->language_mode(), info->literal()->language_mode()); 582 DCHECK_EQ(shared->language_mode(), info->literal()->language_mode());
583 583
584 // Compile either unoptimized code or bytecode for the interpreter. 584 // Compile either unoptimized code or bytecode for the interpreter.
585 if (!CompileBaselineCode(info)) return MaybeHandle<Code>(); 585 if (!CompileBaselineCode(info)) return MaybeHandle<Code>();
586 RecordFunctionCompilation(Logger::LAZY_COMPILE_TAG, info, shared); 586 RecordFunctionCompilation(Logger::LAZY_COMPILE_TAG, info);
587 587
588 // Update the shared function info with the scope info. Allocating the 588 // Update the shared function info with the scope info. Allocating the
589 // ScopeInfo object may cause a GC. 589 // ScopeInfo object may cause a GC.
590 Handle<ScopeInfo> scope_info = 590 Handle<ScopeInfo> scope_info =
591 ScopeInfo::Create(info->isolate(), info->zone(), info->scope()); 591 ScopeInfo::Create(info->isolate(), info->zone(), info->scope());
592 592
593 // Install compilation result on the shared function info 593 // Install compilation result on the shared function info
594 InstallBaselineCompilationResult(info, shared, scope_info); 594 InstallBaselineCompilationResult(info, shared, scope_info);
595 595
596 return info->code(); 596 return info->code();
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
719 info->closure()->ShortPrint(); 719 info->closure()->ShortPrint();
720 PrintF(" because: %s]\n", GetBailoutReason(info->bailout_reason())); 720 PrintF(" because: %s]\n", GetBailoutReason(info->bailout_reason()));
721 } 721 }
722 return false; 722 return false;
723 } 723 }
724 724
725 // Success! 725 // Success!
726 job->RecordOptimizationStats(); 726 job->RecordOptimizationStats();
727 DCHECK(!isolate->has_pending_exception()); 727 DCHECK(!isolate->has_pending_exception());
728 InsertCodeIntoOptimizedCodeMap(info); 728 InsertCodeIntoOptimizedCodeMap(info);
729 RecordFunctionCompilation(Logger::LAZY_COMPILE_TAG, info, 729 RecordFunctionCompilation(Logger::LAZY_COMPILE_TAG, info);
730 info->shared_info());
731 return true; 730 return true;
732 } 731 }
733 732
734 bool GetOptimizedCodeLater(CompilationInfo* info) { 733 bool GetOptimizedCodeLater(CompilationInfo* info) {
735 Isolate* isolate = info->isolate(); 734 Isolate* isolate = info->isolate();
736 CanonicalHandleScope canonical(isolate); 735 CanonicalHandleScope canonical(isolate);
737 TimerEventScope<TimerEventOptimizeCode> optimize_code_timer(isolate); 736 TimerEventScope<TimerEventOptimizeCode> optimize_code_timer(isolate);
738 TRACE_EVENT0("v8", "V8.OptimizeCode"); 737 TRACE_EVENT0("v8", "V8.OptimizeCode");
739 738
740 if (!isolate->optimizing_compile_dispatcher()->IsQueueAvailable()) { 739 if (!isolate->optimizing_compile_dispatcher()->IsQueueAvailable()) {
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after
1020 InstallBaselineCompilationResult(info, result, scope_info); 1019 InstallBaselineCompilationResult(info, result, scope_info);
1021 1020
1022 Handle<String> script_name = 1021 Handle<String> script_name =
1023 script->name()->IsString() 1022 script->name()->IsString()
1024 ? Handle<String>(String::cast(script->name())) 1023 ? Handle<String>(String::cast(script->name()))
1025 : isolate->factory()->empty_string(); 1024 : isolate->factory()->empty_string();
1026 Logger::LogEventsAndTags log_tag = info->is_eval() 1025 Logger::LogEventsAndTags log_tag = info->is_eval()
1027 ? Logger::EVAL_TAG 1026 ? Logger::EVAL_TAG
1028 : Logger::ToNativeByScript(Logger::SCRIPT_TAG, *script); 1027 : Logger::ToNativeByScript(Logger::SCRIPT_TAG, *script);
1029 1028
1030 PROFILE(isolate, CodeCreateEvent(log_tag, *info->abstract_code(), *result, 1029 PROFILE(isolate, CodeCreateEvent(log_tag, result->abstract_code(), *result,
1031 info, *script_name)); 1030 info, *script_name));
1032 1031
1033 if (!script.is_null()) 1032 if (!script.is_null())
1034 script->set_compilation_state(Script::COMPILATION_STATE_COMPILED); 1033 script->set_compilation_state(Script::COMPILATION_STATE_COMPILED);
1035 1034
1036 live_edit_tracker.RecordFunctionInfo(result, lit, info->zone()); 1035 live_edit_tracker.RecordFunctionInfo(result, lit, info->zone());
1037 } 1036 }
1038 1037
1039 return result; 1038 return result;
1040 } 1039 }
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
1211 1210
1212 // The scope info might not have been set if a lazily compiled 1211 // The scope info might not have been set if a lazily compiled
1213 // function is inlined before being called for the first time. 1212 // function is inlined before being called for the first time.
1214 if (shared->scope_info() == ScopeInfo::Empty(info->isolate())) { 1213 if (shared->scope_info() == ScopeInfo::Empty(info->isolate())) {
1215 Handle<ScopeInfo> target_scope_info = 1214 Handle<ScopeInfo> target_scope_info =
1216 ScopeInfo::Create(info->isolate(), info->zone(), info->scope()); 1215 ScopeInfo::Create(info->isolate(), info->zone(), info->scope());
1217 shared->set_scope_info(*target_scope_info); 1216 shared->set_scope_info(*target_scope_info);
1218 } 1217 }
1219 1218
1220 // The existing unoptimized code was replaced with the new one. 1219 // The existing unoptimized code was replaced with the new one.
1221 RecordFunctionCompilation(Logger::LAZY_COMPILE_TAG, &unoptimized, shared); 1220 RecordFunctionCompilation(Logger::LAZY_COMPILE_TAG, &unoptimized);
1222 } 1221 }
1223 return true; 1222 return true;
1224 } 1223 }
1225 1224
1226 MaybeHandle<JSFunction> Compiler::GetFunctionFromEval( 1225 MaybeHandle<JSFunction> Compiler::GetFunctionFromEval(
1227 Handle<String> source, Handle<SharedFunctionInfo> outer_info, 1226 Handle<String> source, Handle<SharedFunctionInfo> outer_info,
1228 Handle<Context> context, LanguageMode language_mode, 1227 Handle<Context> context, LanguageMode language_mode,
1229 ParseRestriction restriction, int eval_scope_position, int eval_position, 1228 ParseRestriction restriction, int eval_scope_position, int eval_position,
1230 int line_offset, int column_offset, Handle<Object> script_name, 1229 int line_offset, int column_offset, Handle<Object> script_name,
1231 ScriptOriginOptions options) { 1230 ScriptOriginOptions options) {
(...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after
1539 literal->should_be_used_once_hint()) { 1538 literal->should_be_used_once_hint()) {
1540 info.code()->MarkToBeExecutedOnce(isolate); 1539 info.code()->MarkToBeExecutedOnce(isolate);
1541 } 1540 }
1542 // Install compilation result on the shared function info. 1541 // Install compilation result on the shared function info.
1543 InstallBaselineCompilationResult(&info, result, scope_info); 1542 InstallBaselineCompilationResult(&info, result, scope_info);
1544 } else { 1543 } else {
1545 return Handle<SharedFunctionInfo>::null(); 1544 return Handle<SharedFunctionInfo>::null();
1546 } 1545 }
1547 1546
1548 if (maybe_existing.is_null()) { 1547 if (maybe_existing.is_null()) {
1549 RecordFunctionCompilation(Logger::FUNCTION_TAG, &info, result); 1548 RecordFunctionCompilation(Logger::FUNCTION_TAG, &info);
1550 live_edit_tracker.RecordFunctionInfo(result, literal, info.zone()); 1549 live_edit_tracker.RecordFunctionInfo(result, literal, info.zone());
1551 } 1550 }
1552 1551
1553 return result; 1552 return result;
1554 } 1553 }
1555 1554
1556 Handle<SharedFunctionInfo> Compiler::GetSharedFunctionInfoForNative( 1555 Handle<SharedFunctionInfo> Compiler::GetSharedFunctionInfoForNative(
1557 v8::Extension* extension, Handle<String> name) { 1556 v8::Extension* extension, Handle<String> name) {
1558 Isolate* isolate = name->GetIsolate(); 1557 Isolate* isolate = name->GetIsolate();
1559 v8::Isolate* v8_isolate = reinterpret_cast<v8::Isolate*>(isolate); 1558 v8::Isolate* v8_isolate = reinterpret_cast<v8::Isolate*>(isolate);
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
1613 // Except when OSR already disabled optimization for some reason. 1612 // Except when OSR already disabled optimization for some reason.
1614 // 3) The code may have already been invalidated due to dependency change. 1613 // 3) The code may have already been invalidated due to dependency change.
1615 // 4) Code generation may have failed. 1614 // 4) Code generation may have failed.
1616 if (job->last_status() == OptimizedCompileJob::SUCCEEDED) { 1615 if (job->last_status() == OptimizedCompileJob::SUCCEEDED) {
1617 if (shared->optimization_disabled()) { 1616 if (shared->optimization_disabled()) {
1618 job->RetryOptimization(kOptimizationDisabled); 1617 job->RetryOptimization(kOptimizationDisabled);
1619 } else if (info->dependencies()->HasAborted()) { 1618 } else if (info->dependencies()->HasAborted()) {
1620 job->RetryOptimization(kBailedOutDueToDependencyChange); 1619 job->RetryOptimization(kBailedOutDueToDependencyChange);
1621 } else if (job->GenerateCode() == OptimizedCompileJob::SUCCEEDED) { 1620 } else if (job->GenerateCode() == OptimizedCompileJob::SUCCEEDED) {
1622 job->RecordOptimizationStats(); 1621 job->RecordOptimizationStats();
1623 RecordFunctionCompilation(Logger::LAZY_COMPILE_TAG, info.get(), shared); 1622 RecordFunctionCompilation(Logger::LAZY_COMPILE_TAG, info.get());
1624 if (shared->SearchOptimizedCodeMap(info->context()->native_context(), 1623 if (shared->SearchOptimizedCodeMap(info->context()->native_context(),
1625 info->osr_ast_id()).code == nullptr) { 1624 info->osr_ast_id()).code == nullptr) {
1626 InsertCodeIntoOptimizedCodeMap(info.get()); 1625 InsertCodeIntoOptimizedCodeMap(info.get());
1627 } 1626 }
1628 if (FLAG_trace_opt) { 1627 if (FLAG_trace_opt) {
1629 PrintF("[completed optimizing "); 1628 PrintF("[completed optimizing ");
1630 info->closure()->ShortPrint(); 1629 info->closure()->ShortPrint();
1631 PrintF("]\n"); 1630 PrintF("]\n");
1632 } 1631 }
1633 info->closure()->ReplaceCode(*info->code()); 1632 info->closure()->ReplaceCode(*info->code());
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1675 MaybeHandle<Code> code; 1674 MaybeHandle<Code> code;
1676 if (cached.code != nullptr) code = handle(cached.code); 1675 if (cached.code != nullptr) code = handle(cached.code);
1677 Handle<Context> native_context(function->context()->native_context()); 1676 Handle<Context> native_context(function->context()->native_context());
1678 SharedFunctionInfo::AddToOptimizedCodeMap(shared, native_context, code, 1677 SharedFunctionInfo::AddToOptimizedCodeMap(shared, native_context, code,
1679 literals, BailoutId::None()); 1678 literals, BailoutId::None());
1680 } 1679 }
1681 } 1680 }
1682 1681
1683 } // namespace internal 1682 } // namespace internal
1684 } // namespace v8 1683 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698