Chromium Code Reviews| Index: src/compiler/pipeline.cc |
| diff --git a/src/compiler/pipeline.cc b/src/compiler/pipeline.cc |
| index 28a30bede3868eda73dca4811da1ada68915b5de..dc6ed961318c01a316ba05303cb8d5f16e8d5cfa 100644 |
| --- a/src/compiler/pipeline.cc |
| +++ b/src/compiler/pipeline.cc |
| @@ -113,15 +113,19 @@ class PipelineData { |
| } |
| // For WASM compile entry point. |
| - PipelineData(ZoneStats* zone_stats, CompilationInfo* info, Graph* graph, |
| + PipelineData(ZoneStats* zone_stats, CompilationInfo* info, JSGraph* jsgraph, |
| SourcePositionTable* source_positions) |
| : isolate_(info->isolate()), |
| info_(info), |
| debug_name_(info_->GetDebugName()), |
| zone_stats_(zone_stats), |
| graph_zone_scope_(zone_stats_, ZONE_NAME), |
| - graph_(graph), |
| + graph_(jsgraph->graph()), |
| source_positions_(source_positions), |
| + machine_(jsgraph->machine()), |
| + common_(jsgraph->common()), |
| + javascript_(jsgraph->javascript()), |
|
ahaas
2016/11/28 08:34:43
I think jsgraph->javascript() should always be nul
titzer
2016/11/28 09:31:53
I think that would just made the code brittle with
|
| + jsgraph_(jsgraph), |
| instruction_zone_scope_(zone_stats_, ZONE_NAME), |
| instruction_zone_(instruction_zone_scope_.zone()), |
| register_allocation_zone_scope_(zone_stats_, ZONE_NAME), |
| @@ -599,13 +603,13 @@ PipelineCompilationJob::Status PipelineCompilationJob::FinalizeJobImpl() { |
| class PipelineWasmCompilationJob final : public CompilationJob { |
| public: |
| - explicit PipelineWasmCompilationJob(CompilationInfo* info, Graph* graph, |
| + explicit PipelineWasmCompilationJob(CompilationInfo* info, JSGraph* jsgraph, |
| CallDescriptor* descriptor, |
| SourcePositionTable* source_positions) |
| : CompilationJob(info->isolate(), info, "TurboFan", |
| State::kReadyToExecute), |
| zone_stats_(info->isolate()->allocator()), |
| - data_(&zone_stats_, info, graph, source_positions), |
| + data_(&zone_stats_, info, jsgraph, source_positions), |
| pipeline_(&data_), |
| linkage_(descriptor) {} |
| @@ -636,6 +640,23 @@ PipelineWasmCompilationJob::ExecuteJobImpl() { |
| } |
| pipeline_.RunPrintAndVerify("Machine", true); |
| + if (FLAG_wasm_opt) { |
| + PipelineData* data = &data_; |
| + PipelineRunScope scope(data, "WASM optimization"); |
| + JSGraphReducer graph_reducer(data->jsgraph(), scope.zone()); |
| + DeadCodeElimination dead_code_elimination(&graph_reducer, data->graph(), |
| + data->common()); |
| + ValueNumberingReducer value_numbering(scope.zone(), data->graph()->zone()); |
| + MachineOperatorReducer machine_reducer(data->jsgraph()); |
| + CommonOperatorReducer common_reducer(&graph_reducer, data->graph(), |
| + data->common(), data->machine()); |
| + AddReducer(data, &graph_reducer, &dead_code_elimination); |
| + AddReducer(data, &graph_reducer, &value_numbering); |
| + AddReducer(data, &graph_reducer, &machine_reducer); |
| + AddReducer(data, &graph_reducer, &common_reducer); |
| + graph_reducer.ReduceGraph(); |
| + pipeline_.RunPrintAndVerify("Optimized Machine", true); |
| + } |
| if (!pipeline_.ScheduleAndSelectInstructions(&linkage_, true)) return FAILED; |
| return SUCCEEDED; |
| @@ -1699,9 +1720,9 @@ CompilationJob* Pipeline::NewCompilationJob(Handle<JSFunction> function) { |
| // static |
| CompilationJob* Pipeline::NewWasmCompilationJob( |
| - CompilationInfo* info, Graph* graph, CallDescriptor* descriptor, |
| + CompilationInfo* info, JSGraph* jsgraph, CallDescriptor* descriptor, |
| SourcePositionTable* source_positions) { |
| - return new PipelineWasmCompilationJob(info, graph, descriptor, |
| + return new PipelineWasmCompilationJob(info, jsgraph, descriptor, |
| source_positions); |
| } |