From: Jan Hubicka Date: Wed, 28 Aug 2013 06:51:27 +0000 (+0200) Subject: lto-partition.c (lto_balanced_map): Always base order on source file order. X-Git-Tag: upstream/12.2.0~68217 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6a49f3c94c266accd6561cc9784cfeaa086fde11;p=platform%2Fupstream%2Fgcc.git 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 From-SVN: r202041 --- diff --git a/gcc/lto/ChangeLog b/gcc/lto/ChangeLog index cb10a4b..3ffc5f6 100644 --- a/gcc/lto/ChangeLog +++ b/gcc/lto/ChangeLog @@ -1,4 +1,10 @@ 2013-08-06 Jan Hubicka + Martin Liska + + * lto-partition.c (lto_balanced_map): Always base order on + source file order. + +2013-08-06 Jan Hubicka * lto.c (lto_materialize_function): Do not read body anymore. diff --git a/gcc/lto/lto-partition.c b/gcc/lto/lto-partition.c index 879218c..e05f805 100644 --- a/gcc/lto/lto-partition.c +++ b/gcc/lto/lto-partition.c @@ -449,11 +449,9 @@ lto_balanced_map (void) { int n_nodes = 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 varpool_node **varpool_order = NULL; - int i, postorder_len; + int i; struct cgraph_node *node; int total_size = 0, best_total_size = 0; int partition_size; @@ -468,24 +466,20 @@ lto_balanced_map (void) FOR_EACH_VARIABLE (vnode) 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++) - { - node = postorder[i]; - if (get_symbol_class ((symtab_node) node) == SYMBOL_PARTITION) - { - order[n_nodes++] = node; - total_size += inline_summary (node)->size; - } - } - free (postorder); + FOR_EACH_DEFINED_FUNCTION (node) + if (get_symbol_class ((symtab_node) node) == SYMBOL_PARTITION) + { + order[n_nodes++] = node; + total_size += inline_summary (node)->size; + } + /* 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) { qsort (order, n_nodes, sizeof (struct cgraph_node *), node_cmp);