| 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 | 
|  |