Commit 6a49f3c9 by Jan Hubicka Committed by Jan Hubicka

lto-partition.c (lto_balanced_map): Always base order on source file order.

	* lto-partition.c (lto_balanced_map): Always base order on 
	source file order.

Co-Authored-By: Martin Liska <marxin.liska@gmail.com>

From-SVN: r202041
parent 8dce4dbc
2013-08-06 Jan Hubicka <jh@suse.cz> 2013-08-06 Jan Hubicka <jh@suse.cz>
Martin Liska <marxin.liska@gmail.com>
* lto-partition.c (lto_balanced_map): Always base order on
source file order.
2013-08-06 Jan Hubicka <jh@suse.cz>
* lto.c (lto_materialize_function): Do not read body anymore. * lto.c (lto_materialize_function): Do not read body anymore.
......
...@@ -449,11 +449,9 @@ lto_balanced_map (void) ...@@ -449,11 +449,9 @@ lto_balanced_map (void)
{ {
int n_nodes = 0; int n_nodes = 0;
int n_varpool_nodes = 0, varpool_pos = 0, best_varpool_pos = 0; int n_varpool_nodes = 0, varpool_pos = 0, best_varpool_pos = 0;
struct cgraph_node **postorder =
XCNEWVEC (struct cgraph_node *, cgraph_n_nodes);
struct cgraph_node **order = XNEWVEC (struct cgraph_node *, cgraph_max_uid); struct cgraph_node **order = XNEWVEC (struct cgraph_node *, cgraph_max_uid);
struct varpool_node **varpool_order = NULL; struct varpool_node **varpool_order = NULL;
int i, postorder_len; int i;
struct cgraph_node *node; struct cgraph_node *node;
int total_size = 0, best_total_size = 0; int total_size = 0, best_total_size = 0;
int partition_size; int partition_size;
...@@ -468,24 +466,20 @@ lto_balanced_map (void) ...@@ -468,24 +466,20 @@ lto_balanced_map (void)
FOR_EACH_VARIABLE (vnode) FOR_EACH_VARIABLE (vnode)
gcc_assert (!vnode->symbol.aux); gcc_assert (!vnode->symbol.aux);
/* Until we have better ordering facility, use toplogical order.
Include only nodes we will partition and compute estimate of program
size. Note that since nodes that are not partitioned might be put into
multiple partitions, this is just an estimate of real size. This is why
we keep partition_size updated after every partition is finalized. */
postorder_len = ipa_reverse_postorder (postorder);
for (i = 0; i < postorder_len; i++) FOR_EACH_DEFINED_FUNCTION (node)
{ if (get_symbol_class ((symtab_node) node) == SYMBOL_PARTITION)
node = postorder[i]; {
if (get_symbol_class ((symtab_node) node) == SYMBOL_PARTITION) order[n_nodes++] = node;
{ total_size += inline_summary (node)->size;
order[n_nodes++] = node; }
total_size += inline_summary (node)->size;
}
}
free (postorder);
/* Streaming works best when the source units do not cross partition
boundaries much. This is because importing function from a source
unit tends to import a lot of global trees defined there. We should
get better about minimizing the function bounday, but until that
things works smoother if we order in source order. */
qsort (order, n_nodes, sizeof (struct cgraph_node *), node_cmp);
if (!flag_toplevel_reorder) if (!flag_toplevel_reorder)
{ {
qsort (order, n_nodes, sizeof (struct cgraph_node *), node_cmp); qsort (order, n_nodes, sizeof (struct cgraph_node *), node_cmp);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment