diff options
author | Martin Jambor <mjambor@suse.cz> | 2011-04-30 01:42:15 +0200 |
---|---|---|
committer | Martin Jambor <jamborm@gcc.gnu.org> | 2011-04-30 01:42:15 +0200 |
commit | af8bca3c6405b6f83ee6a1bc06a0b0e003390821 (patch) | |
tree | 223bf74a250abe0577f81e8a0db2cdb8f7243fd6 /gcc/ipa.c | |
parent | 48e5d11979af0dd03c54623faffddc5f0c3c1741 (diff) | |
download | gcc-af8bca3c6405b6f83ee6a1bc06a0b0e003390821.tar.gz |
cgraph.h (cgraph_postorder): Remove declaration.
2011-04-29 Martin Jambor <mjambor@suse.cz>
* cgraph.h (cgraph_postorder): Remove declaration.
* ipa-utils.h (ipa_free_postorder_info): Declare.
(ipa_reverse_postorder): Likewise.
* cgraphunit.c: Include ipa-utils.h.
(cgraph_expand_all_functions): Update call to ipa_reverse_postorder.
* ipa-inline.c: Include ipa-utils.h.
(ipa_inline): Update call to ipa_reverse_postorder.
* ipa-pure-const.c (propagate_pure_const): Update call to
ipa_reduced_postorder and ipa_print_order. Call
ipa_free_postorder_info to clean up.
(propagate_nothrow): Likewise.
* ipa-reference.c (propagate): Removed a useless call to
ipa_utils_reduced_inorder, updated a call to ipa_reduced_postorder
and ipa_print_order. Call ipa_free_postorder_info to clean up.
* ipa.c: Include ipa-utils.h.
(ipa_profile): Update call to ipa_reverse_postorder.
(cgraph_postorder): Moved to...
* ipa-utils.c (ipa_reverse_postorder): ...here and renamed.
(ipa_utils_print_order): Renamed to ipa_print_order.
(ipa_utils_reduced_inorder): Renamed to ipa_reduced_postorder. Updated
comments.
(ipa_free_postorder_info): New function.
* passes.c: Include ipa-utils.h.
(do_per_function_toporder): Update call to ipa_reverse_postorder.
(ipa_write_summaries): Likewise.
* Makefile.in (passes.o): Add IPA_UTILS_H to dependencies.
(cgraphunit.o): Likewise.
(ipa.o): Likewise.
(ipa-inline.o): Likewise.
lto/
* lto.c: Include ipa-utils.h.
(lto_balanced_map): Update call to ipa_reverse_postorder.
* Make-lang.in (lto/lto.o): Add IPA_UTILS_H to dependencies.
From-SVN: r173197
Diffstat (limited to 'gcc/ipa.c')
-rw-r--r-- | gcc/ipa.c | 79 |
1 files changed, 2 insertions, 77 deletions
diff --git a/gcc/ipa.c b/gcc/ipa.c index e58fb23b256..606a9f374d1 100644 --- a/gcc/ipa.c +++ b/gcc/ipa.c @@ -31,82 +31,7 @@ along with GCC; see the file COPYING3. If not see #include "pointer-set.h" #include "target.h" #include "tree-iterator.h" - -/* Fill array order with all nodes with output flag set in the reverse - topological order. */ - -int -cgraph_postorder (struct cgraph_node **order) -{ - struct cgraph_node *node, *node2; - int stack_size = 0; - int order_pos = 0; - struct cgraph_edge *edge, last; - int pass; - - struct cgraph_node **stack = - XCNEWVEC (struct cgraph_node *, cgraph_n_nodes); - - /* We have to deal with cycles nicely, so use a depth first traversal - output algorithm. Ignore the fact that some functions won't need - to be output and put them into order as well, so we get dependencies - right through inline functions. */ - for (node = cgraph_nodes; node; node = node->next) - node->aux = NULL; - for (pass = 0; pass < 2; pass++) - for (node = cgraph_nodes; node; node = node->next) - if (!node->aux - && (pass - || (!node->address_taken - && !node->global.inlined_to - && !cgraph_only_called_directly_p (node)))) - { - node2 = node; - if (!node->callers) - node->aux = &last; - else - node->aux = node->callers; - while (node2) - { - while (node2->aux != &last) - { - edge = (struct cgraph_edge *) node2->aux; - if (edge->next_caller) - node2->aux = edge->next_caller; - else - node2->aux = &last; - /* Break possible cycles involving always-inline - functions by ignoring edges from always-inline - functions to non-always-inline functions. */ - if (DECL_DISREGARD_INLINE_LIMITS (edge->caller->decl) - && !DECL_DISREGARD_INLINE_LIMITS (edge->callee->decl)) - continue; - if (!edge->caller->aux) - { - if (!edge->caller->callers) - edge->caller->aux = &last; - else - edge->caller->aux = edge->caller->callers; - stack[stack_size++] = node2; - node2 = edge->caller; - break; - } - } - if (node2->aux == &last) - { - order[order_pos++] = node2; - if (stack_size) - node2 = stack[--stack_size]; - else - node2 = NULL; - } - } - } - free (stack); - for (node = cgraph_nodes; node; node = node->next) - node->aux = NULL; - return order_pos; -} +#include "ipa-utils.h" /* Look for all functions inlined to NODE and update their inlined_to pointers to INLINED_TO. */ @@ -1448,7 +1373,7 @@ ipa_profile (void) bool something_changed = false; int i; - order_pos = cgraph_postorder (order); + order_pos = ipa_reverse_postorder (order); for (i = order_pos - 1; i >= 0; i--) { if (order[i]->local.local && cgraph_propagate_frequency (order[i])) |