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;