bb-reorder: Improve the simple algorithm for -Os (PR67864)
As the PR points out, the "simple" reorder algorithm makes bigger code than the STC algorithm did, for -Os, for x86. I now tested it for many different targets and it turns out to be worse everywhere. This simple patch tunes "simple" a bit; this makes it better than STC almost everywhere. The only exceptions (for the targets where I have results) are x86 and mn10300. For those targets it may be best to switch the default algorithm for -Os to STC. 2015-10-11 Segher Boessenkool <segher@kernel.crashing.org> PR rtl-optimization/67864 * gcc/bb-reorder (reorder_basic_blocks_simple): Prefer existing fallthrough edges for conditional jumps. Don't sort candidate edges if not optimizing for speed. From-SVN: r228692
This commit is contained in:
parent
fac812f0bd
commit
c70f0ca26b
|
@ -1,3 +1,10 @@
|
||||||
|
2015-10-11 Segher Boessenkool <segher@kernel.crashing.org>
|
||||||
|
|
||||||
|
PR rtl-optimization/67864
|
||||||
|
* gcc/bb-reorder (reorder_basic_blocks_simple): Prefer existing
|
||||||
|
fallthrough edges for conditional jumps. Don't sort candidate
|
||||||
|
edges if not optimizing for speed.
|
||||||
|
|
||||||
2015-10-10 Trevor Saunders <tbsaunde+gcc@tbsaunde.org>
|
2015-10-10 Trevor Saunders <tbsaunde+gcc@tbsaunde.org>
|
||||||
|
|
||||||
* defaults.h (REVERSE_CONDITION): New default definition.
|
* defaults.h (REVERSE_CONDITION): New default definition.
|
||||||
|
|
|
@ -2318,15 +2318,23 @@ reorder_basic_blocks_simple (void)
|
||||||
|
|
||||||
if (any_condjump_p (end))
|
if (any_condjump_p (end))
|
||||||
{
|
{
|
||||||
edges[n++] = EDGE_SUCC (bb, 0);
|
edge e0 = EDGE_SUCC (bb, 0);
|
||||||
edges[n++] = EDGE_SUCC (bb, 1);
|
edge e1 = EDGE_SUCC (bb, 1);
|
||||||
|
/* When optimizing for size it is best to keep the original
|
||||||
|
fallthrough edges. */
|
||||||
|
if (e1->flags & EDGE_FALLTHRU)
|
||||||
|
std::swap (e0, e1);
|
||||||
|
edges[n++] = e0;
|
||||||
|
edges[n++] = e1;
|
||||||
}
|
}
|
||||||
else if (single_succ_p (bb))
|
else if (single_succ_p (bb))
|
||||||
edges[n++] = EDGE_SUCC (bb, 0);
|
edges[n++] = EDGE_SUCC (bb, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Sort the edges, the most desirable first. */
|
/* Sort the edges, the most desirable first. When optimizing for size
|
||||||
|
all edges are equally desirable. */
|
||||||
|
|
||||||
|
if (optimize_function_for_speed_p (cfun))
|
||||||
std::stable_sort (edges, edges + n, edge_order);
|
std::stable_sort (edges, edges + n, edge_order);
|
||||||
|
|
||||||
/* Now decide which of those edges to make fallthrough edges. We set
|
/* Now decide which of those edges to make fallthrough edges. We set
|
||||||
|
|
Loading…
Reference in New Issue