[turbofan] Run value numbering after SimplifiedLowering.
authorbmeurer@chromium.org <bmeurer@chromium.org>
Thu, 16 Oct 2014 10:50:21 +0000 (10:50 +0000)
committerbmeurer@chromium.org <bmeurer@chromium.org>
Thu, 16 Oct 2014 10:50:21 +0000 (10:50 +0000)
Running ValueNumberingReducer together with ChangeLowering causes
trouble with the current GraphReducer and makes GVN ineffective, so
running it before we get to change lowering works around that well-known
(phase ordering) problem for now.

R=jarin@chromium.org

Review URL: https://codereview.chromium.org/660733003

git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@24656 ce2b1a6d-e550-0410-aec6-3dcde31c8c00

src/compiler/pipeline.cc

index 369f97d..707d887 100644 (file)
@@ -316,6 +316,12 @@ Handle<Code> Pipeline::GenerateCode() {
                                      SourcePosition::Unknown());
       SimplifiedLowering lowering(&jsgraph);
       lowering.LowerAllNodes();
+      ValueNumberingReducer vn_reducer(zone());
+      SimplifiedOperatorReducer simple_reducer(&jsgraph);
+      GraphReducer graph_reducer(&graph);
+      graph_reducer.AddReducer(&simple_reducer);
+      graph_reducer.AddReducer(&vn_reducer);
+      graph_reducer.ReduceGraph();
 
       VerifyAndPrintGraph(&graph, "Lowered simplified");
     }
@@ -327,13 +333,11 @@ Handle<Code> Pipeline::GenerateCode() {
                                      SourcePosition::Unknown());
       Linkage linkage(info());
       ValueNumberingReducer vn_reducer(zone());
-      SimplifiedOperatorReducer simple_reducer(&jsgraph);
       ChangeLowering lowering(&jsgraph, &linkage);
       MachineOperatorReducer mach_reducer(&jsgraph);
       GraphReducer graph_reducer(&graph);
       // TODO(titzer): Figure out if we should run all reducers at once here.
       graph_reducer.AddReducer(&vn_reducer);
-      graph_reducer.AddReducer(&simple_reducer);
       graph_reducer.AddReducer(&lowering);
       graph_reducer.AddReducer(&mach_reducer);
       graph_reducer.ReduceGraph();