diff options
author | hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-08-28 06:51:27 +0000 |
---|---|---|
committer | hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-08-28 06:51:27 +0000 |
commit | 66d78392a31682ca12ed5d4e474caf097347b33c (patch) | |
tree | 4157980b4173ae382b3d91dff57bab88de4a53d9 | |
parent | b86afe726b76c3cda1a968be389217d36cbc88ae (diff) | |
download | gcc-66d78392a31682ca12ed5d4e474caf097347b33c.tar.gz |
* lto-partition.c (lto_balanced_map): Always base order on
source file order.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@202041 138bc75d-0d04-0410-961f-82ee72b054a4
-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 cb10a4bf8c8..3ffc5f660af 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 879218ce2fa..e05f805fea4 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); |