OLD | NEW |
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 513 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
524 } else { | 524 } else { |
525 Handle<Code> code = info->code(); | 525 Handle<Code> code = info->code(); |
526 size += code->CodeSize(); | 526 size += code->CodeSize(); |
527 size += code->relocation_info()->Size(); | 527 size += code->relocation_info()->Size(); |
528 size += code->deoptimization_data()->Size(); | 528 size += code->deoptimization_data()->Size(); |
529 size += code->handler_table()->Size(); | 529 size += code->handler_table()->Size(); |
530 } | 530 } |
531 return size; | 531 return size; |
532 } | 532 } |
533 | 533 |
534 bool GenerateBaselineCode(CompilationInfo* info) { | 534 bool GenerateUnoptimizedCode(CompilationInfo* info) { |
535 bool success; | 535 bool success; |
536 EnsureFeedbackVector(info); | 536 EnsureFeedbackVector(info); |
537 if (FLAG_ignition && UseIgnition(info)) { | 537 if (FLAG_ignition && UseIgnition(info)) { |
538 success = interpreter::Interpreter::MakeBytecode(info); | 538 success = interpreter::Interpreter::MakeBytecode(info); |
539 } else { | 539 } else { |
540 success = FullCodeGenerator::MakeCode(info); | 540 success = FullCodeGenerator::MakeCode(info); |
541 } | 541 } |
542 if (success) { | 542 if (success) { |
543 Isolate* isolate = info->isolate(); | 543 Isolate* isolate = info->isolate(); |
544 Counters* counters = isolate->counters(); | 544 Counters* counters = isolate->counters(); |
| 545 // TODO(4280): Rename counters from "baseline" to "unoptimized" eventually. |
545 counters->total_baseline_code_size()->Increment(CodeAndMetadataSize(info)); | 546 counters->total_baseline_code_size()->Increment(CodeAndMetadataSize(info)); |
546 counters->total_baseline_compile_count()->Increment(1); | 547 counters->total_baseline_compile_count()->Increment(1); |
547 } | 548 } |
548 return success; | 549 return success; |
549 } | 550 } |
550 | 551 |
551 bool CompileBaselineCode(CompilationInfo* info) { | 552 bool CompileUnoptimizedCode(CompilationInfo* info) { |
552 DCHECK(AllowCompilation::IsAllowed(info->isolate())); | 553 DCHECK(AllowCompilation::IsAllowed(info->isolate())); |
553 if (!Compiler::Analyze(info->parse_info()) || !GenerateBaselineCode(info)) { | 554 if (!Compiler::Analyze(info->parse_info()) || |
| 555 !GenerateUnoptimizedCode(info)) { |
554 Isolate* isolate = info->isolate(); | 556 Isolate* isolate = info->isolate(); |
555 if (!isolate->has_pending_exception()) isolate->StackOverflow(); | 557 if (!isolate->has_pending_exception()) isolate->StackOverflow(); |
556 return false; | 558 return false; |
557 } | 559 } |
558 return true; | 560 return true; |
559 } | 561 } |
560 | 562 |
561 void InstallSharedScopeInfo(CompilationInfo* info, | 563 void InstallSharedScopeInfo(CompilationInfo* info, |
562 Handle<SharedFunctionInfo> shared) { | 564 Handle<SharedFunctionInfo> shared) { |
563 Handle<ScopeInfo> scope_info = | 565 Handle<ScopeInfo> scope_info = |
(...skipping 16 matching lines...) Expand all Loading... |
580 MUST_USE_RESULT MaybeHandle<Code> GetUnoptimizedCode(CompilationInfo* info) { | 582 MUST_USE_RESULT MaybeHandle<Code> GetUnoptimizedCode(CompilationInfo* info) { |
581 VMState<COMPILER> state(info->isolate()); | 583 VMState<COMPILER> state(info->isolate()); |
582 PostponeInterruptsScope postpone(info->isolate()); | 584 PostponeInterruptsScope postpone(info->isolate()); |
583 | 585 |
584 // Parse and update CompilationInfo with the results. | 586 // Parse and update CompilationInfo with the results. |
585 if (!Parser::ParseStatic(info->parse_info())) return MaybeHandle<Code>(); | 587 if (!Parser::ParseStatic(info->parse_info())) return MaybeHandle<Code>(); |
586 Handle<SharedFunctionInfo> shared = info->shared_info(); | 588 Handle<SharedFunctionInfo> shared = info->shared_info(); |
587 DCHECK_EQ(shared->language_mode(), info->literal()->language_mode()); | 589 DCHECK_EQ(shared->language_mode(), info->literal()->language_mode()); |
588 | 590 |
589 // Compile either unoptimized code or bytecode for the interpreter. | 591 // Compile either unoptimized code or bytecode for the interpreter. |
590 if (!CompileBaselineCode(info)) return MaybeHandle<Code>(); | 592 if (!CompileUnoptimizedCode(info)) return MaybeHandle<Code>(); |
591 RecordFunctionCompilation(Logger::LAZY_COMPILE_TAG, info); | 593 RecordFunctionCompilation(Logger::LAZY_COMPILE_TAG, info); |
592 | 594 |
593 // Update the shared function info with the scope info. | 595 // Update the shared function info with the scope info. |
594 InstallSharedScopeInfo(info, shared); | 596 InstallSharedScopeInfo(info, shared); |
595 | 597 |
596 // Install compilation result on the shared function info | 598 // Install compilation result on the shared function info |
597 InstallSharedCompilationResult(info, shared); | 599 InstallSharedCompilationResult(info, shared); |
598 | 600 |
599 return info->code(); | 601 return info->code(); |
600 } | 602 } |
(...skipping 404 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1005 DCHECK_EQ(RelocInfo::kNoPosition, lit->function_token_position()); | 1007 DCHECK_EQ(RelocInfo::kNoPosition, lit->function_token_position()); |
1006 result = NewSharedFunctionInfoForLiteral(isolate, lit, script); | 1008 result = NewSharedFunctionInfoForLiteral(isolate, lit, script); |
1007 result->set_is_toplevel(true); | 1009 result->set_is_toplevel(true); |
1008 if (info->is_eval()) { | 1010 if (info->is_eval()) { |
1009 // Eval scripts cannot be (re-)compiled without context. | 1011 // Eval scripts cannot be (re-)compiled without context. |
1010 result->set_allows_lazy_compilation_without_context(false); | 1012 result->set_allows_lazy_compilation_without_context(false); |
1011 } | 1013 } |
1012 parse_info->set_shared_info(result); | 1014 parse_info->set_shared_info(result); |
1013 | 1015 |
1014 // Compile the code. | 1016 // Compile the code. |
1015 if (!CompileBaselineCode(info)) { | 1017 if (!CompileUnoptimizedCode(info)) { |
1016 return Handle<SharedFunctionInfo>::null(); | 1018 return Handle<SharedFunctionInfo>::null(); |
1017 } | 1019 } |
1018 | 1020 |
1019 // Update the shared function info with the scope info. | 1021 // Update the shared function info with the scope info. |
1020 InstallSharedScopeInfo(info, result); | 1022 InstallSharedScopeInfo(info, result); |
1021 | 1023 |
1022 // Install compilation result on the shared function info | 1024 // Install compilation result on the shared function info |
1023 InstallSharedCompilationResult(info, result); | 1025 InstallSharedCompilationResult(info, result); |
1024 | 1026 |
1025 Handle<String> script_name = | 1027 Handle<String> script_name = |
(...skipping 497 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1523 | 1525 |
1524 // Consider compiling eagerly when compiling bytecode for Ignition. | 1526 // Consider compiling eagerly when compiling bytecode for Ignition. |
1525 lazy &= | 1527 lazy &= |
1526 !(FLAG_ignition && FLAG_ignition_eager && !isolate->serializer_enabled()); | 1528 !(FLAG_ignition && FLAG_ignition_eager && !isolate->serializer_enabled()); |
1527 | 1529 |
1528 // Generate code | 1530 // Generate code |
1529 TimerEventScope<TimerEventCompileCode> timer(isolate); | 1531 TimerEventScope<TimerEventCompileCode> timer(isolate); |
1530 TRACE_EVENT0("v8", "V8.CompileCode"); | 1532 TRACE_EVENT0("v8", "V8.CompileCode"); |
1531 if (lazy) { | 1533 if (lazy) { |
1532 info.SetCode(isolate->builtins()->CompileLazy()); | 1534 info.SetCode(isolate->builtins()->CompileLazy()); |
1533 } else if (Renumber(info.parse_info()) && GenerateBaselineCode(&info)) { | 1535 } else if (Renumber(info.parse_info()) && GenerateUnoptimizedCode(&info)) { |
1534 // Code generation will ensure that the feedback vector is present and | 1536 // Code generation will ensure that the feedback vector is present and |
1535 // appropriately sized. | 1537 // appropriately sized. |
1536 DCHECK(!info.code().is_null()); | 1538 DCHECK(!info.code().is_null()); |
1537 if (literal->should_eager_compile() && | 1539 if (literal->should_eager_compile() && |
1538 literal->should_be_used_once_hint()) { | 1540 literal->should_be_used_once_hint()) { |
1539 info.code()->MarkToBeExecutedOnce(isolate); | 1541 info.code()->MarkToBeExecutedOnce(isolate); |
1540 } | 1542 } |
1541 // Update the shared function info with the scope info. | 1543 // Update the shared function info with the scope info. |
1542 InstallSharedScopeInfo(&info, result); | 1544 InstallSharedScopeInfo(&info, result); |
1543 // Install compilation result on the shared function info. | 1545 // Install compilation result on the shared function info. |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1676 MaybeHandle<Code> code; | 1678 MaybeHandle<Code> code; |
1677 if (cached.code != nullptr) code = handle(cached.code); | 1679 if (cached.code != nullptr) code = handle(cached.code); |
1678 Handle<Context> native_context(function->context()->native_context()); | 1680 Handle<Context> native_context(function->context()->native_context()); |
1679 SharedFunctionInfo::AddToOptimizedCodeMap(shared, native_context, code, | 1681 SharedFunctionInfo::AddToOptimizedCodeMap(shared, native_context, code, |
1680 literals, BailoutId::None()); | 1682 literals, BailoutId::None()); |
1681 } | 1683 } |
1682 } | 1684 } |
1683 | 1685 |
1684 } // namespace internal | 1686 } // namespace internal |
1685 } // namespace v8 | 1687 } // namespace v8 |
OLD | NEW |