summaryrefslogtreecommitdiff
path: root/gcc/ipa-utils.c
diff options
context:
space:
mode:
authorsteven <steven@138bc75d-0d04-0410-961f-82ee72b054a4>2012-09-13 13:41:46 +0000
committersteven <steven@138bc75d-0d04-0410-961f-82ee72b054a4>2012-09-13 13:41:46 +0000
commit9631926aec638559834b9a7691094052f3f76cf0 (patch)
treeccf42e9cc160d21ec43421b4abfe25c8a1812cda /gcc/ipa-utils.c
parent024fee2c369096e6fe6cde620243df5843893004 (diff)
downloadgcc-9631926aec638559834b9a7691094052f3f76cf0.tar.gz
* ipa-pure-const.c (state_from_flags, local_pure_const): Use
current_function_name instead of lang_hooks.decl_printable_name. * function.h (fndecl_name): New prototype. * function.c (fndecl_name): New function. * vecir.h (cgraph_node_p): New standard IR VEC type. * trans-mem.c (cgraph_node_p): No need anymore to define it here. * ipa-utils.h (ipa_get_nodes_in_cycle): New prototype. * ipa-utils.c (ipa_get_nodes_in_cycle): New function. * ipa-reference.c: Don't include langhooks.h, and certainly not twice. Fix many formatting issues (long lines, short lines, spacing, etc.). (get_static_name): Use fndecl_name. (dump_static_vars_set_to_file): New function split out from propagate. (union_static_var_sets): New function, union two sets and collapse to all_module_statics as quickly as possible. (intersect_static_var_sets): New function, similar to above. (copy_static_var_set): Renamed from copy_global_bitmap and rewritten to allocate a copy on the same bitmap_obstack as the source set. (propagate_bits): Simplify, and clarify by using union_static_var_sets. (generate_summary): Remove bm_temp. Print UID of promotable globals. (read_write_all_from_decl): Use pass-by-reference, bless C++. (get_read_write_all_from_node): New function, split out from propagate. (propagate): Simplify and clarify with helper functions. Use ipa_get_nodes_in_cycle to walk all nodes in a reduced node. (ipa_reference_read_optimization_summary): Use fndecl_name instead of lang_hooks.decl_printable_name. * rtl.h (print_rtl_single_with_indent): New prototype. * print-rtl.c (print_rtl_single_with_indent): New function. * cfghooks.h (empty_block_p, split_block_before_cond_jump): New hooks. * cfghooks.c (empty_block_p, split_block_before_cond_jump): Implement. * cfgrtl.c (rtl_block_empty_p, rtl_split_block_before_cond_jump): Implement RTL specific hooks. (rtl_cfg_hooks, cfg_layout_rtl_cfg_hooks): Register the new hooks. * tree-cfg.c (gimple_empty_block_p, gimple_split_block_before_cond_jump): Implement GIMPLE specific hooks. (gimple_cfg_hooks): Register the new hooks. * tree-ssa-phiopt.c (empty_block_p): Remove in favor of new hook. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@191255 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ipa-utils.c')
-rw-r--r--gcc/ipa-utils.c24
1 files changed, 22 insertions, 2 deletions
diff --git a/gcc/ipa-utils.c b/gcc/ipa-utils.c
index bda19fe159e..91fc3806a2e 100644
--- a/gcc/ipa-utils.c
+++ b/gcc/ipa-utils.c
@@ -154,8 +154,11 @@ searchc (struct searchc_env* env, struct cgraph_node *v,
/* Topsort the call graph by caller relation. Put the result in ORDER.
- The REDUCE flag is true if you want the cycles reduced to single nodes. Set
- ALLOW_OVERWRITABLE if nodes with such availability should be included.
+ The REDUCE flag is true if you want the cycles reduced to single nodes.
+ You can use ipa_get_nodes_in_cycle to obtain a vector containing all real
+ call graph nodes in a reduced node.
+
+ Set ALLOW_OVERWRITABLE if nodes with such availability should be included.
IGNORE_EDGE, if non-NULL is a hook that may make some edges insignificant
for the topological sort. */
@@ -231,6 +234,23 @@ ipa_free_postorder_info (void)
}
}
+/* Get the set of nodes for the cycle in the reduced call graph starting
+ from NODE. */
+
+VEC (cgraph_node_p, heap) *
+ipa_get_nodes_in_cycle (struct cgraph_node *node)
+{
+ VEC (cgraph_node_p, heap) *v = NULL;
+ struct ipa_dfs_info *node_dfs_info;
+ while (node)
+ {
+ VEC_safe_push (cgraph_node_p, heap, v, node);
+ node_dfs_info = (struct ipa_dfs_info *) node->symbol.aux;
+ node = node_dfs_info->next_cycle;
+ }
+ return v;
+}
+
struct postorder_stack
{
struct cgraph_node *node;