On 06/25/2014 06:35 AM, Kai Tietz wrote:
> Hello,
> 
> so there seems to be a fallout caused by moving peephole2 pass. See PR/61608.
> So we need indeed 2 peephole2 passes.

We don't need a second peephole pass.  Please try this.

I think there's room for cleanup here, depending on when we leave cfglayout
mode for the last time.


r~

        * bb-reorder.c (pass_duplicate_computed_gotos::execute): Cleanup
        the cfg if there were any changes.
        * passes.def: Revert move of peephole2 after reorder_blocks;
        move duplicate_computed_gotos before peephole2.

diff --git a/gcc/bb-reorder.c b/gcc/bb-reorder.c
index 61b0cab..cd68fee 100644
--- a/gcc/bb-reorder.c
+++ b/gcc/bb-reorder.c
@@ -2520,13 +2520,20 @@ pass_duplicate_computed_gotos::execute (function *fun)
       changed = true;
     }
 
-done:
-  /* Duplicating blocks above will redirect edges and may cause hot blocks
-     previously reached by both hot and cold blocks to become dominated only
-     by cold blocks.  */
+ done:
   if (changed)
-    fixup_partitions ();
-  cfg_layout_finalize ();
+    {
+      /* Duplicating blocks above will redirect edges and may cause hot
+        blocks previously reached by both hot and cold blocks to become
+        dominated only by cold blocks.  */
+      fixup_partitions ();
+
+      /* Merge the duplicated blocks into predecessors, when possible.  */
+      cfg_layout_finalize ();
+      cleanup_cfg (0);
+    }
+  else
+    cfg_layout_finalize ();
 
   BITMAP_FREE (candidates);
   return 0;
diff --git a/gcc/passes.def b/gcc/passes.def
index 280cf16..f13df6c 100644
--- a/gcc/passes.def
+++ b/gcc/passes.def
@@ -396,20 +396,13 @@ along with GCC; see the file COPYING3.  If not see
          NEXT_PASS (pass_rtl_dse2);
          NEXT_PASS (pass_stack_adjustments);
          NEXT_PASS (pass_jump2);
+         NEXT_PASS (pass_duplicate_computed_gotos);
+         NEXT_PASS (pass_peephole2);
          NEXT_PASS (pass_if_after_reload);
          NEXT_PASS (pass_regrename);
          NEXT_PASS (pass_cprop_hardreg);
          NEXT_PASS (pass_fast_rtl_dce);
-         NEXT_PASS (pass_duplicate_computed_gotos);
          NEXT_PASS (pass_reorder_blocks);
-         /* We need to run peephole2 pass after the duplicate-
-            compute-gotos and the reorder-blocks pass (PR/39284).
-            We have a single indirect branch in the entire function
-            before duplicate-compute-gotos pass.  This vastly reduces
-            the size of the CFG.
-            For preventing to run peephole2 pass twice, its run after
-            the jump2 got removed.  */
-         NEXT_PASS (pass_peephole2);
          NEXT_PASS (pass_branch_target_load_optimize2);
          NEXT_PASS (pass_leaf_regs);
          NEXT_PASS (pass_split_before_sched2);

Reply via email to