aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2013-08-28 08:51:27 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2013-08-28 06:51:27 +0000
commit6a49f3c94c266accd6561cc9784cfeaa086fde11 (patch)
tree4157980b4173ae382b3d91dff57bab88de4a53d9 /gcc
parent8dce4dbc068ec1c2fa9ff64f0570e5c1079407a7 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/lto/lto-partition.c32
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);