PR optimization/13430, PR optimization/12322
authorJosef Zlomek <zlomekj@suse.cz>
Sat, 20 Dec 2003 16:31:12 +0000 (17:31 +0100)
committerJosef Zlomek <zlomek@gcc.gnu.org>
Sat, 20 Dec 2003 16:31:12 +0000 (16:31 +0000)
PR optimization/13430, PR optimization/12322
* bb-reorder.c (copy_bb_p): Do not allow block with many successors to
be copied.
(find_traces_1_round): Surround check for fake edges by
#ifdef ENABLE_CHECKING #endif.

From-SVN: r74887

gcc/ChangeLog
gcc/bb-reorder.c

index c7f9559625ea5b3876b7b48b3c48b7ca052ab54f..955e05f342abd9d7aa159a2b138c2f9a9b53f3d7 100644 (file)
@@ -1,3 +1,11 @@
+2003-12-20  Josef Zlomek  <zlomekj@suse.cz>
+
+       PR optimization/13430, PR optimization/12322
+       * bb-reorder.c (copy_bb_p): Do not allow block with many successors to
+       be copied.
+       (find_traces_1_round): Surround check for fake edges by
+       #ifdef ENABLE_CHECKING #endif.
+
 2003-12-20  Eric Botcazou  <ebotcazou@libertysurf.fr>
 
        PR other/7956
index 85e184dd719417cd1dc69928171d9d7632048bb8..fc50b6494d3915e09f2493f79c2a81011ee1daf1 100644 (file)
@@ -415,8 +415,10 @@ find_traces_1_round (int branch_th, int exec_th, gcov_type count_th,
          /* Select the successor that will be placed after BB.  */
          for (e = bb->succ; e; e = e->succ_next)
            {
+#ifdef ENABLE_CHECKING
              if (e->flags & EDGE_FAKE)
                abort ();
+#endif
 
              if (e->dest == EXIT_BLOCK_PTR)
                continue;
@@ -1001,6 +1003,8 @@ copy_bb_p (basic_block bb, int code_may_grow)
   int size = 0;
   int max_size = uncond_jump_length;
   rtx insn;
+  int n_succ;
+  edge e;
 
   if (!bb->frequency)
     return false;
@@ -1009,6 +1013,15 @@ copy_bb_p (basic_block bb, int code_may_grow)
   if (!cfg_layout_can_duplicate_bb_p (bb))
     return false;
 
+  /* Avoid duplicating blocks which have many successors (PR/13430).  */
+  n_succ = 0;
+  for (e = bb->succ; e; e = e->succ_next)
+    {
+      n_succ++;
+      if (n_succ > 8)
+       return false;
+    }
+
   if (code_may_grow && maybe_hot_bb_p (bb))
     max_size *= 8;