Index: src/compiler/pipeline.cc |
diff --git a/src/compiler/pipeline.cc b/src/compiler/pipeline.cc |
index ba5facc57d171064e1c92077ef8d071df413e9fa..c54861ad99f762575c8d64fb20c1a58cca781a12 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()), |
+ jsgraph_(jsgraph), |
instruction_zone_scope_(zone_stats_, ZONE_NAME), |
instruction_zone_(instruction_zone_scope_.zone()), |
register_allocation_zone_scope_(zone_stats_, ZONE_NAME), |
@@ -603,13 +607,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) {} |
@@ -640,6 +644,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; |
@@ -1703,9 +1724,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); |
} |