diff options
author | Jan Hubicka <jh@suse.cz> | 2013-08-28 08:51:27 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2013-08-28 06:51:27 +0000 |
commit | 6a49f3c94c266accd6561cc9784cfeaa086fde11 (patch) | |
tree | 4157980b4173ae382b3d91dff57bab88de4a53d9 /gcc | |
parent | 8dce4dbc068ec1c2fa9ff64f0570e5c1079407a7 (diff) | |
download | gcc-6a49f3c94c266accd6561cc9784cfeaa086fde11.zip gcc-6a49f3c94c266accd6561cc9784cfeaa086fde11.tar.gz gcc-6a49f3c94c266accd6561cc9784cfeaa086fde11.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/lto/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/lto/lto-partition.c | 32 |
2 files changed, 19 insertions, 19 deletions
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 <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. 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); |