Chromium Code Reviews| Index: src/compiler/pipeline.cc |
| diff --git a/src/compiler/pipeline.cc b/src/compiler/pipeline.cc |
| index 9683a83d68dc7b5c6c6132ce98b30d934476f05f..13bb24d20e0ece90fb6c08cdae425f651782e0f2 100644 |
| --- a/src/compiler/pipeline.cc |
| +++ b/src/compiler/pipeline.cc |
| @@ -1032,12 +1032,33 @@ struct EffectControlLinearizationPhase { |
| } |
| }; |
| +// The store-store elimination greatly benefits from doing a common operator |
| +// reducer just before it, to eliminate conditional deopts with a constant |
| +// condition. |
| + |
| +struct CommonOperatorReducerPhase { |
|
Jarin
2016/07/25 09:52:13
Rename to DeadCodeEliminationPhase (because that i
bgeron
2016/07/27 13:40:37
Done.
|
| + static const char* phase_name() { return "common operator reducer"; } |
| + |
| + void Run(PipelineData* data, Zone* temp_zone) { |
| + // Run the common operator reducer. |
| + JSGraphReducer graph_reducer(data->jsgraph(), temp_zone); |
| + DeadCodeElimination dead_code_elimination(&graph_reducer, data->graph(), |
| + data->common()); |
| + CommonOperatorReducer common_reducer(&graph_reducer, data->graph(), |
| + data->common(), data->machine()); |
| + AddReducer(data, &graph_reducer, &dead_code_elimination); |
| + AddReducer(data, &graph_reducer, &common_reducer); |
| + graph_reducer.ReduceGraph(); |
| + } |
| +}; |
| + |
| struct StoreStoreEliminationPhase { |
| - static const char* phase_name() { return "Store-store elimination"; } |
| + static const char* phase_name() { return "store-store elimination"; } |
| void Run(PipelineData* data, Zone* temp_zone) { |
| - StoreStoreElimination store_store_elimination(data->jsgraph(), temp_zone); |
| - store_store_elimination.Run(); |
| + GraphTrimmer(temp_zone, data->graph()).TrimGraph(); |
|
Jarin
2016/07/25 09:52:13
Could you call the trimming on the roots, too? (As
bgeron
2016/07/27 13:40:37
Done. Actually, I think the graph would be trimmed
|
| + |
| + StoreStoreElimination::Run(data->jsgraph(), temp_zone); |
| } |
| }; |
| @@ -1518,6 +1539,9 @@ bool PipelineImpl::OptimizeGraph(Linkage* linkage) { |
| Run<EffectControlLinearizationPhase>(); |
| RunPrintAndVerify("Effect and control linearized", true); |
| + Run<CommonOperatorReducerPhase>(); |
| + RunPrintAndVerify("Common operator reducer", true); |
| + |
| if (FLAG_turbo_store_elimination) { |
| Run<StoreStoreEliminationPhase>(); |
| RunPrintAndVerify("Store-store elimination", true); |