Home | History | Annotate | Download | only in src

Lines Matching full:info

47   explicit ParseHandleScope(ParseInfo* info)
48 : deferred_(info->isolate()), info_(info) {}
61 explicit CompilationHandleScope(CompilationInfo* info)
62 : deferred_(info->isolate()), info_(info) {}
86 CompilationJob::CompilationJob(Isolate* isolate, CompilationInfo* info,
88 : info_(info),
96 DCHECK(ThreadId::Current().Equals(info()->isolate()->thread_id()));
99 if (FLAG_trace_opt && info()->IsOptimizing()) {
101 os << "[compiling method " << Brief(*info()->closure()) << " using "
103 if (info()->is_osr()) os << " OSR";
136 DCHECK(ThreadId::Current().Equals(info()->isolate()->thread_id()));
139 DCHECK(!info()->dependencies()->HasAborted());
163 if (info()->has_bytecode_array()) {
164 code_size = info()->bytecode_array()->SizeIncludingMetadata();
166 code_size = info()->code()->SizeIncludingMetadata();
178 DCHECK(info()->IsOptimizing());
179 Handle<JSFunction> function = info()->closure();
212 Isolate* CompilationJob::isolate() const { return info()->isolate(); }
278 CompilationInfo* info) {
282 if (info->isolate()->logger()->is_logging_code_events() ||
283 info->isolate()->is_profiling()) {
284 Handle<SharedFunctionInfo> shared = info->shared_info();
285 Handle<Script> script = info->parse_info()->script();
287 info->has_bytecode_array()
288 ? Handle<AbstractCode>::cast(info->bytecode_array())
289 : Handle<AbstractCode>::cast(info->code());
291 info->isolate()->builtins()->CompileLazy())) {
299 : info->isolate()->heap()->empty_string();
302 PROFILE(info->isolate(),
308 void EnsureFeedbackMetadata(CompilationInfo* info) {
309 DCHECK(info->has_shared_info());
317 if (info->shared_info()->feedback_metadata()->length() == 0 ||
318 !info->shared_info()->is_compiled()) {
320 info->isolate(), info->literal()->feedback_vector_spec());
321 info->shared_info()->set_feedback_metadata(*feedback_metadata);
326 CHECK(!info->shared_info()->feedback_metadata()->SpecDiffersFrom(
327 info->literal()->feedback_vector_spec()));
383 bool ShouldUseIgnition(CompilationInfo* info) {
384 DCHECK(info->has_shared_info());
385 return ShouldUseIgnition(info->shared_info(), info->is_debug());
405 CompilationJob* GetUnoptimizedCompilationJob(CompilationInfo* info) {
408 DCHECK_NOT_NULL(info->literal());
409 DCHECK_NOT_NULL(info->scope());
411 if (ShouldUseIgnition(info)) {
412 return interpreter::Interpreter::NewCompilationJob(info);
414 return FullCodeGenerator::NewCompilationJob(info);
418 void InstallSharedScopeInfo(CompilationInfo* info,
420 Handle<ScopeInfo> scope_info = info->scope()->scope_info();
422 Scope* outer_scope = info->scope()->GetOuterScopeWithContext();
428 void InstallSharedCompilationResult(CompilationInfo* info,
433 info->is_debug() && info->has_bytecode_array()) {
436 DCHECK(!info->code().is_null());
437 shared->ReplaceCode(*info->code());
438 if (info->has_bytecode_array()) {
440 shared->set_bytecode_array(*info->bytecode_array());
444 void InstallUnoptimizedCode(CompilationInfo* info) {
445 Handle<SharedFunctionInfo> shared = info->shared_info();
447 // Update the shared function info with the scope info.
448 InstallSharedScopeInfo(info, shared);
450 // Install compilation result on the shared function info
451 InstallSharedCompilationResult(info, shared);
457 CompilationInfo* info = job->info();
458 EnsureFeedbackMetadata(info);
459 DCHECK(!info->code().is_null());
460 if (info->parse_info()->literal()->should_be_used_once_hint()) {
461 info->code()->MarkToBeExecutedOnce(info->isolate());
463 InstallUnoptimizedCode(info);
464 RecordFunctionCompilation(CodeEventListener::FUNCTION_TAG, info);
497 bool GenerateUnoptimizedCode(CompilationInfo* info) {
498 if (UseAsmWasm(info->scope(), info->shared_info(), info->is_debug())) {
499 EnsureFeedbackMetadata(info);
501 wasm_data = AsmJs::CompileAsmViaWasm(info);
503 info->shared_info()->set_asm_wasm_data(*wasm_data.ToHandleChecked());
504 info->SetCode(info->isolate()->builtins()->InstantiateAsmJs());
505 InstallUnoptimizedCode(info);
510 std::unique_ptr<CompilationJob> job(GetUnoptimizedCompilationJob(info));
557 CompilationInfo info(parse_info.zone(), &parse_info,
568 if (will_serialize) info.PrepareForSerializing();
569 if (is_debug) info.MarkAsDebug();
571 if (!GenerateUnoptimizedCode(&info)) {
589 bool CompileUnoptimizedCode(CompilationInfo* info,
591 Isolate* isolate = info->isolate();
598 compilation_handle_scope.reset(new CompilationHandleScope(info));
600 if (!Compiler::Analyze(info->parse_info(), &inner_literals)) {
609 if (info->scope()->IsAsmModule() ||
618 DCHECK_NE(info->parse_info()->zone(), info->zone());
619 parse_zone = info->parse_info()->zone_shared();
624 parse_zone, info) ||
625 !GenerateUnoptimizedCode(info)) {
633 void EnsureSharedFunctionInfosArrayOnScript(ParseInfo* info) {
634 DCHECK(info->is_toplevel());
635 DCHECK(!info->script().is_null());
636 if (info->script()->shared_function_infos()->length() > 0) {
637 DCHECK_EQ(info->script()->shared_function_infos()->length(),
638 info->max_function_literal_id() + 1);
641 Isolate* isolate = info->isolate();
643 isolate->factory()->NewFixedArray(info->max_function_literal_id() + 1));
644 info->script()->set_shared_function_infos(*infos);
648 CompilationInfo* info, Compiler::ConcurrencyMode inner_function_mode) {
650 info->isolate(), &RuntimeCallStats::CompileGetUnoptimizedCode);
651 VMState<COMPILER> state(info->isolate());
652 PostponeInterruptsScope postpone(info->isolate());
656 if (!parsing::ParseAny(info->parse_info(),
662 ParseHandleScope parse_handles(info->parse_info());
663 info->parse_info()->ReopenHandlesInNewHandleScope();
664 info->parse_info()->ast_value_factory()->Internalize(info->isolate());
668 if (info->parse_info()->is_toplevel()) {
669 EnsureSharedFunctionInfosArrayOnScript(info->parse_info());
671 DCHECK_EQ(info->shared_info()->language_mode(),
672 info->literal()->language_mode());
675 if (!CompileUnoptimizedCode(info, inner_function_mode)) {
680 RecordFunctionCompilation(CodeEventListener::LAZY_COMPILE_TAG, info);
682 return info->code();
703 void InsertCodeIntoOptimizedCodeMap(CompilationInfo* info) {
704 Handle<Code> code = info->code();
709 if (info->is_function_context_specializing()) return;
711 DCHECK(!info->is_frame_specializing());
715 if (info->is_osr() && info->is_optimizing_from_bytecode()) return;
718 Handle<JSFunction> function = info->closure();
722 info->osr_ast_id());
726 CompilationInfo* info = job->info();
727 Isolate* isolate = info->isolate();
730 if (!info->is_optimizing_from_bytecode()) {
731 if (!Compiler::ParseAndAnalyze(info->parse_info())) return false;
732 EnsureFeedbackMetadata(info);
735 JSFunction::EnsureLiterals(info->closure());
748 info->closure()->ShortPrint();
749 PrintF(" because: %s]\n", GetBailoutReason(info->bailout_reason()));
757 InsertCodeIntoOptimizedCodeMap(info);
758 RecordFunctionCompilation(CodeEventListener::LAZY_COMPILE_TAG, info);
763 CompilationInfo* info = job->info();
764 Isolate* isolate = info->isolate();
769 info->closure()->ShortPrint();
778 info->closure()->ShortPrint();
785 if (!info->is_optimizing_from_bytecode()) {
786 if (!Compiler::ParseAndAnalyze(info->parse_info())) return false;
787 EnsureFeedbackMetadata(info);
790 JSFunction::EnsureLiterals(info->closure());
792 TimerEventScope<TimerEventRecompileSynchronous> timer(info->isolate());
793 RuntimeCallTimerScope runtimeTimer(info->isolate(),
803 info->closure()->ShortPrint();
859 CompilationInfo* info = job->info();
860 ParseInfo* parse_info = info->parse_info();
862 info->SetOptimizingForOsr(osr_ast_id, osr_frame);
865 if (info
866 info->AbortOptimization(kFunctionBeingDebugged);
873 if (info->shared_info()->opt_count() > kMaxOptCount) {
874 info->AbortOptimization(kDeoptimizedTooManyTimes);
883 if (use_turbofan && ShouldUseIgnition(info)) {
884 if (info->is_osr() && !ignition_osr) return MaybeHandle<Code>();
886 info->MarkAsOptimizeFromBytecode();
894 DCHECK_IMPLIES(info->is_osr() && ignition_osr,
895 info->is_optimizing_from_bytecode());
896 DCHECK_IMPLIES(info->is_osr() && !ignition_osr,
897 !info->is_optimizing_from_bytecode());
904 compilation.reset(new CompilationHandleScope(info));
909 if (use_turbofan) canonical.reset(new CanonicalHandleScope(info->isolate()));
912 info->ReopenHandlesInNewHandleScope();
921 if (GetOptimizedCodeNow(job.get())) return info->code();
929 CompilationInfo* info = job->info();
930 Isolate* isolate = info->isolate();
932 TimerEventScope<TimerEventRecompileSynchronous> timer(info->isolate());
938 Handle<SharedFunctionInfo> shared = info->shared_info();
957 } else if (info->dependencies()->HasAborted()) {
961 RecordFunctionCompilation(CodeEventListener::LAZY_COMPILE_TAG, info);
962 if (shared->SearchOptimizedCodeMap(info->context()->native_context(),
963 info->osr_ast_id()) == nullptr) {
964 InsertCodeIntoOptimizedCodeMap(info);
968 info->closure()->ShortPrint();
971 info->closure()->ReplaceCode(*info->code());
979 info->closure()->ShortPrint();
980 PrintF(" because: %s]\n", GetBailoutReason(info->bailout_reason()));
982 info->closure()->ReplaceCode(shared->code());
991 CompilationInfo info(parse_info.zone(), &parse_info, function);
1027 if (!parsing::ParseFunction(info.parse_info())) return MaybeHandle<Code>();
1028 Handle<SharedFunctionInfo> shared = info.shared_info();
1029 DCHECK_EQ(shared->language_mode(), info.literal()->language_mode());
1032 if (!Compiler::Analyze(info.parse_info()) ||
1033 !FullCodeGenerator::MakeCode(&info)) {
1038 // Update the shared function info with the scope info.
1039 InstallSharedScopeInfo(&info, shared);
1041 // Install compilation result on the shared function info
1042 InstallSharedCompilationResult(&info, shared);
1045 RecordFunctionCompilation(CodeEventListener::LAZY_COMPILE_TAG, &info);
1047 return info.code();
1118 CompilationInfo info(&compile_zone, &parse_info, function);
1121 isolate, result, GetUnoptimizedCode(&info, Compiler::CONCURRENT), Code);
1123 if (FLAG_always_opt && !info.shared_info()->HasAsmWasmData()) {
1135 Handle<SharedFunctionInfo> CompileToplevel(CompilationInfo* info) {
1136 Isolate* isolate = info->isolate();
1141 ParseInfo* parse_info = info->parse_info();
1155 { VMState<COMPILER> state(info->isolate());
1164 parse_info->ast_value_factory()->Internalize(info->isolate());
1174 ? info->isolate()->counters()->compile_eval()
1175 : info->isolate()->counters()->compile();
1180 // Allocate a shared function info object.
1189 if (!CompileUnoptimizedCode(info, Compiler::CONCURRENT)) {
1217 bool Compiler::Analyze(ParseInfo* info,
1219 DCHECK_NOT_NULL(info->literal());
1220 RuntimeCallTimerScope runtimeTimer(info->isolate(),
1222 if (!Rewriter::Rewrite(info)) return false;
1223 DeclarationScope::Analyze(info, AnalyzeMode::kRegular);
1224 if (!Renumber(info, eager_literals)) {
1227 DCHECK_NOT_NULL(info->scope());
1231 bool Compiler::ParseAndAnalyze(ParseInfo* info) {
1232 if (!parsing::ParseAny(info)) return false;
1233 if (info->is_toplevel()) EnsureSharedFunctionInfosArrayOnScript(info);
1234 if (!Compiler::Analyze(info)) return false;
1235 DCHECK_NOT_NULL(info->literal());
1236 DCHECK_NOT_NULL(info->scope());
1334 CompilationInfo info(parse_info.zone(), &parse_info,
1336 info.MarkAsDebug();
1337 if (GetUnoptimizedCode(&info, Compiler::NOT_CONCURRENT).is_null()) {
1353 // In order to ensure that live edit function info collection finds the newly
1363 CompilationInfo info(&compile_zone, &parse_info, Handle<JSFunction>::null());
1364 info.MarkAsDebug();
1367 const bool compilation_succeeded = !CompileToplevel(&info).is_null();
1376 // Restore the original function info list in order to remain side-effect
1384 bool Compiler::EnsureBytecode(CompilationInfo* info) {
1385 if (!info->shared_info()->is_compiled()) {
1386 CompilerDispatcher* dispatcher = info->isolate()->compiler_dispatcher();
1387 if (dispatcher->IsEnqueued(info->shared_info())) {
1388 if (!dispatcher->FinishNow(info->shared_info())) return false;
1389 } else if (GetUnoptimizedCode(info, Compiler::NOT_CONCURRENT).is_null()) {
1393 DCHECK(info->shared_info()->is_compiled());
1395 if (info->shared_info()->HasAsmWasmData()) return false;
1397 DCHECK_EQ(ShouldUseIgnition(info), info->shared_info()->HasBytecodeArray());
1398 return info->shared_info()->HasBytecodeArray();
1403 bool Compiler::EnsureDeoptimizationSupport(CompilationInfo* info) {
1404 DCHECK_NOT_NULL(info->literal());
1405 DCHECK_NOT_NULL(info->scope());
1406 Handle<SharedFunctionInfo> shared = info->shared_info();
1408 CompilerDispatcher* dispatcher = info->isolate()->compiler_dispatcher();
1414 Zone compile_zone(info->isolate()->allocator(), ZONE_NAME);
1415 CompilationInfo unoptimized(&compile_zone, info->parse_info(),
1416 info->closure());
1425 bool old_will_serialize_value = info->parse_info()->will_serialize();
1427 // If the current code has reloc info for serialization, also include
1428 // reloc info for serialization for the new code, so that deopt support
1438 if (!shared->is_compiled() && ShouldUseIgnition(info) &&
1439 !GenerateUnoptimizedCode(info)) {
1445 info->parse_info()->set_will_serialize(old_will_serialize_value);
1447 // The scope info might not have been set if a lazily compiled
1449 if (shared->scope_info() == ScopeInfo::Empty(info->isolate())) {
1450 InstallSharedScopeInfo(info, shared);
1453 // Install compilation result on the shared function info
1535 CompilationInfo info(&compile_zone, &parse_info,
1545 shared_info = CompileToplevel(&info);
1608 while (SharedFunctionInfo* info = iter.Next()) {
1609 if (info->HasAsmWasmData()) return true;
1746 CompilationInfo info(&compile_zone, &parse_info,
1759 info.PrepareForSerializing();
1764 result = CompileToplevel(&info);
1833 // Find any previously allocated shared function info for the given literal.
1836 // If we found an existing shared function info, return it.
1843 // Allocate a shared function info object which will be compiled lazily.
1865 // Instantiate the function and create a shared function info from it.
1878 // Copy the function data to the shared function info.
1895 CompilationInfo* info) {
1896 VMState<COMPILER> state(info->isolate());
1897 std::unique_ptr<CompilationJob> job(GetUnoptimizedCompilationJob(info));
1908 VMState<COMPILER> state(job->info()->isolate());
1909 if (job->info()->IsOptimizing()) {