Hi,
enabling bb reorering has quite visible code size effect due to disabling two
optimization - the small block duplication in connect_traces and post-reload
crossjumping.  Small block duplication seems easy enough to allow within one
partition.   While doing so i also noticed that my changes to counts disabled
most of duplication which makes code grow.  This is because uninitialized count
is not greater than any threshold.

bootstrapped/regtested x86_64-linux, comitted.

Honza

        * bb-reorder.c (connect_traces): Allow copying of blocks within
        single partition.

Index: bb-reorder.c
===================================================================
--- bb-reorder.c        (revision 250378)
+++ bb-reorder.c        (working copy)
@@ -1302,16 +1302,15 @@ connect_traces (int n_traces, struct tra
                      }
                  }
 
-             if (crtl->has_bb_partition)
-               try_copy = false;
-
              /* Copy tiny blocks always; copy larger blocks only when the
                 edge is traversed frequently enough.  */
              if (try_copy
+                 && BB_PARTITION (best->src) == BB_PARTITION (best->dest)
                  && copy_bb_p (best->dest,
                                optimize_edge_for_speed_p (best)
                                && EDGE_FREQUENCY (best) >= freq_threshold
-                               && best->count >= count_threshold))
+                               && (!best->count.initialized_p ()
+                                   || best->count >= count_threshold)))
                {
                  basic_block new_bb;
 

Reply via email to