Index: src/compiler/pipeline.cc |
diff --git a/src/compiler/pipeline.cc b/src/compiler/pipeline.cc |
index 1610b763578994788745923bd059155608938704..b596771c08ee4adde622ace6cd228caa8f8c24b5 100644 |
--- a/src/compiler/pipeline.cc |
+++ b/src/compiler/pipeline.cc |
@@ -359,6 +359,38 @@ class PipelineData { |
DISALLOW_COPY_AND_ASSIGN(PipelineData); |
}; |
+class PipelineImpl final { |
+ public: |
+ explicit PipelineImpl(PipelineData* data) : data_(data) {} |
+ |
+ // Helpers for executing pipeline phases. |
+ template <typename Phase> |
+ void Run(); |
+ template <typename Phase, typename Arg0> |
+ void Run(Arg0 arg_0); |
+ template <typename Phase, typename Arg0, typename Arg1> |
+ void Run(Arg0 arg_0, Arg1 arg_1); |
+ |
+ // Run the graph creation and initial optimization passes. |
+ bool CreateGraph(); |
+ |
+ // Run the concurrent optimization passes. |
+ bool OptimizeGraph(Linkage* linkage); |
+ |
+ // Perform the actual code generation and return handle to a code object. |
+ Handle<Code> GenerateCode(Linkage* linkage); |
+ |
+ bool ScheduleAndSelectInstructions(Linkage* linkage); |
+ void RunPrintAndVerify(const char* phase, bool untyped = false); |
+ Handle<Code> ScheduleAndGenerateCode(CallDescriptor* call_descriptor); |
+ void AllocateRegisters(const RegisterConfiguration* config, |
+ CallDescriptor* descriptor, bool run_verifier); |
+ |
+ CompilationInfo* info() const; |
+ Isolate* isolate() const; |
+ |
+ PipelineData* const data_; |
+}; |
namespace { |
@@ -546,7 +578,7 @@ class PipelineCompilationJob final : public CompilationJob { |
CompilationInfo info_; |
base::SmartPointer<PipelineStatistics> pipeline_statistics_; |
PipelineData data_; |
- Pipeline pipeline_; |
+ PipelineImpl pipeline_; |
Linkage* linkage_; |
}; |
@@ -620,7 +652,7 @@ class PipelineWasmCompilationJob final : public CompilationJob { |
private: |
ZonePool zone_pool_; |
PipelineData data_; |
- Pipeline pipeline_; |
+ PipelineImpl pipeline_; |
Linkage linkage_; |
}; |
@@ -653,24 +685,22 @@ PipelineWasmCompilationJob::GenerateCodeImpl() { |
return SUCCEEDED; |
} |
- |
template <typename Phase> |
-void Pipeline::Run() { |
+void PipelineImpl::Run() { |
PipelineRunScope scope(this->data_, Phase::phase_name()); |
Phase phase; |
phase.Run(this->data_, scope.zone()); |
} |
- |
template <typename Phase, typename Arg0> |
-void Pipeline::Run(Arg0 arg_0) { |
+void PipelineImpl::Run(Arg0 arg_0) { |
PipelineRunScope scope(this->data_, Phase::phase_name()); |
Phase phase; |
phase.Run(this->data_, scope.zone(), arg_0); |
} |
template <typename Phase, typename Arg0, typename Arg1> |
-void Pipeline::Run(Arg0 arg_0, Arg1 arg_1) { |
+void PipelineImpl::Run(Arg0 arg_0, Arg1 arg_1) { |
PipelineRunScope scope(this->data_, Phase::phase_name()); |
Phase phase; |
phase.Run(this->data_, scope.zone(), arg_0, arg_1); |
@@ -1295,8 +1325,7 @@ struct VerifyGraphPhase { |
} |
}; |
- |
-void Pipeline::RunPrintAndVerify(const char* phase, bool untyped) { |
+void PipelineImpl::RunPrintAndVerify(const char* phase, bool untyped) { |
if (FLAG_trace_turbo) { |
Run<PrintGraphPhase>(phase); |
} |
@@ -1305,7 +1334,7 @@ void Pipeline::RunPrintAndVerify(const char* phase, bool untyped) { |
} |
} |
-bool Pipeline::CreateGraph() { |
+bool PipelineImpl::CreateGraph() { |
PipelineData* data = this->data_; |
data->BeginPhaseKind("graph creation"); |
@@ -1412,7 +1441,7 @@ bool Pipeline::CreateGraph() { |
return true; |
} |
-bool Pipeline::OptimizeGraph(Linkage* linkage) { |
+bool PipelineImpl::OptimizeGraph(Linkage* linkage) { |
PipelineData* data = this->data_; |
data->BeginPhaseKind("block building"); |
@@ -1459,7 +1488,7 @@ Handle<Code> Pipeline::GenerateCodeForCodeStub(Isolate* isolate, |
pipeline_statistics->BeginPhaseKind("stub codegen"); |
} |
- Pipeline pipeline(&data); |
+ PipelineImpl pipeline(&data); |
DCHECK_NOT_NULL(data.schedule()); |
if (FLAG_trace_turbo) { |
@@ -1483,7 +1512,7 @@ Handle<Code> Pipeline::GenerateCodeForTesting(CompilationInfo* info) { |
base::SmartPointer<PipelineStatistics> pipeline_statistics( |
CreatePipelineStatistics(info, &zone_pool)); |
PipelineData data(&zone_pool, info, pipeline_statistics.get()); |
- Pipeline pipeline(&data); |
+ PipelineImpl pipeline(&data); |
Linkage linkage(Linkage::ComputeIncoming(data.instruction_zone(), info)); |
@@ -1515,7 +1544,7 @@ Handle<Code> Pipeline::GenerateCodeForTesting(CompilationInfo* info, |
pipeline_statistics->BeginPhaseKind("test codegen"); |
} |
- Pipeline pipeline(&data); |
+ PipelineImpl pipeline(&data); |
if (FLAG_trace_turbo) { |
FILE* json_file = OpenVisualizerLogFile(info, nullptr, "json", "w+"); |
@@ -1552,13 +1581,13 @@ bool Pipeline::AllocateRegistersForTesting(const RegisterConfiguration* config, |
sequence->zone()); |
ZonePool zone_pool(sequence->isolate()->allocator()); |
PipelineData data(&zone_pool, &info, sequence); |
- Pipeline pipeline(&data); |
+ PipelineImpl pipeline(&data); |
pipeline.data_->InitializeFrameData(nullptr); |
pipeline.AllocateRegisters(config, nullptr, run_verifier); |
return !data.compilation_failed(); |
} |
-bool Pipeline::ScheduleAndSelectInstructions(Linkage* linkage) { |
+bool PipelineImpl::ScheduleAndSelectInstructions(Linkage* linkage) { |
CallDescriptor* call_descriptor = linkage->GetIncomingDescriptor(); |
PipelineData* data = this->data_; |
@@ -1621,7 +1650,7 @@ bool Pipeline::ScheduleAndSelectInstructions(Linkage* linkage) { |
return true; |
} |
-Handle<Code> Pipeline::GenerateCode(Linkage* linkage) { |
+Handle<Code> PipelineImpl::GenerateCode(Linkage* linkage) { |
PipelineData* data = this->data_; |
data->BeginPhaseKind("code generation"); |
@@ -1670,7 +1699,7 @@ Handle<Code> Pipeline::GenerateCode(Linkage* linkage) { |
return code; |
} |
-Handle<Code> Pipeline::ScheduleAndGenerateCode( |
+Handle<Code> PipelineImpl::ScheduleAndGenerateCode( |
CallDescriptor* call_descriptor) { |
Linkage linkage(call_descriptor); |
@@ -1681,9 +1710,9 @@ Handle<Code> Pipeline::ScheduleAndGenerateCode( |
return GenerateCode(&linkage); |
} |
-void Pipeline::AllocateRegisters(const RegisterConfiguration* config, |
- CallDescriptor* descriptor, |
- bool run_verifier) { |
+void PipelineImpl::AllocateRegisters(const RegisterConfiguration* config, |
+ CallDescriptor* descriptor, |
+ bool run_verifier) { |
PipelineData* data = this->data_; |
// Don't track usage for this zone in compiler stats. |
base::SmartPointer<Zone> verifier_zone; |
@@ -1770,9 +1799,9 @@ void Pipeline::AllocateRegisters(const RegisterConfiguration* config, |
data->DeleteRegisterAllocationZone(); |
} |
-CompilationInfo* Pipeline::info() const { return data_->info(); } |
+CompilationInfo* PipelineImpl::info() const { return data_->info(); } |
-Isolate* Pipeline::isolate() const { return info()->isolate(); } |
+Isolate* PipelineImpl::isolate() const { return info()->isolate(); } |
} // namespace compiler |
} // namespace internal |