Commit 475f194b authored by Maya Lekova's avatar Maya Lekova Committed by Commit Bot

[turbofan] Move inlining to the background if --concurrent-inlining is enabled

Bug: v8:7790
Change-Id: Ifb0de3ca0a300734f2dcc8c104c8186367ca520b
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1800573
Commit-Queue: Maya Lekova <mslekova@chromium.org>
Reviewed-by: 's avatarGeorg Neis <neis@chromium.org>
Cr-Commit-Position: refs/heads/master@{#63720}
parent deac757b
...@@ -595,7 +595,10 @@ class PipelineImpl final { ...@@ -595,7 +595,10 @@ class PipelineImpl final {
template <typename Phase, typename... Args> template <typename Phase, typename... Args>
void Run(Args&&... args); void Run(Args&&... args);
// Step A. Run the graph creation and initial optimization passes. // Step A.1. Serialize the data needed for the compilation front-end.
void Serialize();
// Step A.2. Run the graph creation and initial optimization passes.
bool CreateGraph(); bool CreateGraph();
// Step B. Run the concurrent optimization passes. // Step B. Run the concurrent optimization passes.
...@@ -1052,9 +1055,13 @@ PipelineCompilationJob::Status PipelineCompilationJob::PrepareJobImpl( ...@@ -1052,9 +1055,13 @@ PipelineCompilationJob::Status PipelineCompilationJob::PrepareJobImpl(
// assembly. // assembly.
Deoptimizer::EnsureCodeForDeoptimizationEntries(isolate); Deoptimizer::EnsureCodeForDeoptimizationEntries(isolate);
if (!pipeline_.CreateGraph()) { pipeline_.Serialize();
CHECK(!isolate->has_pending_exception());
return AbortOptimization(BailoutReason::kGraphBuildingFailed); if (!FLAG_concurrent_inlining) {
if (!pipeline_.CreateGraph()) {
CHECK(!isolate->has_pending_exception());
return AbortOptimization(BailoutReason::kGraphBuildingFailed);
}
} }
return SUCCEEDED; return SUCCEEDED;
...@@ -1066,6 +1073,12 @@ PipelineCompilationJob::Status PipelineCompilationJob::ExecuteJobImpl() { ...@@ -1066,6 +1073,12 @@ PipelineCompilationJob::Status PipelineCompilationJob::ExecuteJobImpl() {
this, TRACE_EVENT_FLAG_FLOW_IN | TRACE_EVENT_FLAG_FLOW_OUT, "function", this, TRACE_EVENT_FLAG_FLOW_IN | TRACE_EVENT_FLAG_FLOW_OUT, "function",
compilation_info()->shared_info()->TraceIDRef()); compilation_info()->shared_info()->TraceIDRef());
if (FLAG_concurrent_inlining) {
if (!pipeline_.CreateGraph()) {
return AbortOptimization(BailoutReason::kGraphBuildingFailed);
}
}
bool success; bool success;
if (FLAG_turboprop) { if (FLAG_turboprop) {
success = pipeline_.OptimizeGraphForMidTier(linkage_); success = pipeline_.OptimizeGraphForMidTier(linkage_);
...@@ -2213,10 +2226,10 @@ void PipelineImpl::RunPrintAndVerify(const char* phase, bool untyped) { ...@@ -2213,10 +2226,10 @@ void PipelineImpl::RunPrintAndVerify(const char* phase, bool untyped) {
} }
} }
bool PipelineImpl::CreateGraph() { void PipelineImpl::Serialize() {
PipelineData* data = this->data_; PipelineData* data = this->data_;
data->BeginPhaseKind("V8.TFGraphCreation"); data->BeginPhaseKind("V8.TFBrokerInitAndSerialization");
if (info()->trace_turbo_json_enabled() || if (info()->trace_turbo_json_enabled() ||
info()->trace_turbo_graph_enabled()) { info()->trace_turbo_graph_enabled()) {
...@@ -2240,7 +2253,15 @@ bool PipelineImpl::CreateGraph() { ...@@ -2240,7 +2253,15 @@ bool PipelineImpl::CreateGraph() {
if (FLAG_concurrent_inlining) { if (FLAG_concurrent_inlining) {
Run<HeapBrokerInitializationPhase>(); Run<HeapBrokerInitializationPhase>();
Run<SerializationPhase>(); Run<SerializationPhase>();
data->broker()->StopSerializing();
} }
data->EndPhaseKind();
}
bool PipelineImpl::CreateGraph() {
PipelineData* data = this->data_;
data->BeginPhaseKind("V8.TFGraphCreation");
Run<GraphBuilderPhase>(); Run<GraphBuilderPhase>();
RunPrintAndVerify(GraphBuilderPhase::phase_name(), true); RunPrintAndVerify(GraphBuilderPhase::phase_name(), true);
...@@ -2269,12 +2290,7 @@ bool PipelineImpl::CreateGraph() { ...@@ -2269,12 +2290,7 @@ bool PipelineImpl::CreateGraph() {
// Run the type-sensitive lowerings and optimizations on the graph. // Run the type-sensitive lowerings and optimizations on the graph.
{ {
if (FLAG_concurrent_inlining) { if (!FLAG_concurrent_inlining) {
// TODO(neis): Remove CopyMetadataForConcurrentCompilePhase call once
// brokerization of JSNativeContextSpecialization is complete.
Run<CopyMetadataForConcurrentCompilePhase>();
data->broker()->StopSerializing();
} else {
Run<HeapBrokerInitializationPhase>(); Run<HeapBrokerInitializationPhase>();
Run<CopyMetadataForConcurrentCompilePhase>(); Run<CopyMetadataForConcurrentCompilePhase>();
data->broker()->StopSerializing(); data->broker()->StopSerializing();
...@@ -2676,6 +2692,7 @@ MaybeHandle<Code> Pipeline::GenerateCodeForTesting( ...@@ -2676,6 +2692,7 @@ MaybeHandle<Code> Pipeline::GenerateCodeForTesting(
Linkage linkage(Linkage::ComputeIncoming(data.instruction_zone(), info)); Linkage linkage(Linkage::ComputeIncoming(data.instruction_zone(), info));
Deoptimizer::EnsureCodeForDeoptimizationEntries(isolate); Deoptimizer::EnsureCodeForDeoptimizationEntries(isolate);
pipeline.Serialize();
if (!pipeline.CreateGraph()) return MaybeHandle<Code>(); if (!pipeline.CreateGraph()) return MaybeHandle<Code>();
if (!pipeline.OptimizeGraph(&linkage)) return MaybeHandle<Code>(); if (!pipeline.OptimizeGraph(&linkage)) return MaybeHandle<Code>();
pipeline.AssembleCode(&linkage); pipeline.AssembleCode(&linkage);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment