Commit 68e56cc4 by Jan Hubicka Committed by Jan Hubicka

cgraph.h (FOR_EACH_STATIC_VARIABLE, [...]): New macros.

	* cgraph.h (FOR_EACH_STATIC_VARIABLE, FOR_EACH_STATIC_INITIALIZER): New
	macros.
	(varpool_first_static_initializer, varpol_next_static_initializer): New
	inline functions.
	* ipa-reference.c (analyze_variable): Simplify.
	(static_execute): Use FOR_EACH_STATIC_INITIALIZER.
	* ipa-type-escape.c (type_escape_execute): Use FOR_EACH_STATIC_VARIABLE.

From-SVN: r120070
parent 7954dc21
2006-12-19 Jan Hubicka <jh@suse.cz>
* cgraph.h (FOR_EACH_STATIC_VARIABLE, FOR_EACH_STATIC_INITIALIZER): New
macros.
(varpool_first_static_initializer, varpol_next_static_initializer): New
inline functions.
* ipa-reference.c (analyze_variable): Simplify.
(static_execute): Use FOR_EACH_STATIC_INITIALIZER.
* ipa-type-escape.c (type_escape_execute): Use FOR_EACH_STATIC_VARIABLE.
2006-12-19 Andrew Pinski <pinskia@gmail.com> 2006-12-19 Andrew Pinski <pinskia@gmail.com>
PR tree-opt/30045 PR tree-opt/30045
......
...@@ -342,6 +342,42 @@ bool varpool_analyze_pending_decls (void); ...@@ -342,6 +342,42 @@ bool varpool_analyze_pending_decls (void);
void varpool_output_debug_info (void); void varpool_output_debug_info (void);
void varpool_remove_unreferenced_decls (void); void varpool_remove_unreferenced_decls (void);
/* Walk all reachable static variables. */
#define FOR_EACH_STATIC_VARIABLE(node) \
for ((node) = varpool_nodes_queue; (node); (node) = (node)->next_needed)
/* Return first reachable static variable with initializer. */
static inline struct varpool_node *
varpool_first_static_initializer (void)
{
struct varpool_node *node;
for (node = varpool_nodes_queue; node; node = node->next_needed)
{
gcc_assert (TREE_CODE (node->decl) == VAR_DECL);
if (DECL_INITIAL (node->decl))
return node;
}
return NULL;
}
/* Return next reachable static variable with initializer after NODE. */
static inline struct varpool_node *
varpool_next_static_initializer (struct varpool_node *node)
{
for (node = node->next_needed; node; node = node->next_needed)
{
gcc_assert (TREE_CODE (node->decl) == VAR_DECL);
if (DECL_INITIAL (node->decl))
return node;
}
return NULL;
}
/* Walk all static variables with initializer set. */
#define FOR_EACH_STATIC_INITIALIZER(node) \
for ((node) = varpool_first_static_initializer (); (node); \
(node) = varpool_next_static_initializer (node))
/* In ipa-inline.c */ /* In ipa-inline.c */
bool cgraph_decide_inlining_incrementally (struct cgraph_node *, bool); bool cgraph_decide_inlining_incrementally (struct cgraph_node *, bool);
void cgraph_clone_inlined_nodes (struct cgraph_edge *, bool, bool); void cgraph_clone_inlined_nodes (struct cgraph_edge *, bool, bool);
......
...@@ -774,13 +774,8 @@ static void ...@@ -774,13 +774,8 @@ static void
analyze_variable (struct varpool_node *vnode) analyze_variable (struct varpool_node *vnode)
{ {
tree global = vnode->decl; tree global = vnode->decl;
if (TREE_CODE (global) == VAR_DECL) walk_tree (&DECL_INITIAL (global), scan_for_static_refs,
{ NULL, visited_nodes);
if (DECL_INITIAL (global))
walk_tree (&DECL_INITIAL (global), scan_for_static_refs,
NULL, visited_nodes);
}
else gcc_unreachable ();
} }
/* This is the main routine for finding the reference patterns for /* This is the main routine for finding the reference patterns for
...@@ -903,7 +898,7 @@ static_execute (void) ...@@ -903,7 +898,7 @@ static_execute (void)
ipa_init (); ipa_init ();
/* Process all of the variables first. */ /* Process all of the variables first. */
for (vnode = varpool_nodes_queue; vnode; vnode = vnode->next_needed) FOR_EACH_STATIC_INITIALIZER (vnode)
analyze_variable (vnode); analyze_variable (vnode);
/* Process all of the functions next. /* Process all of the functions next.
......
...@@ -1682,7 +1682,7 @@ type_escape_execute (void) ...@@ -1682,7 +1682,7 @@ type_escape_execute (void)
ipa_init (); ipa_init ();
/* Process all of the variables first. */ /* Process all of the variables first. */
for (vnode = varpool_nodes_queue; vnode; vnode = vnode->next_needed) FOR_EACH_STATIC_VARIABLE (vnode)
analyze_variable (vnode); analyze_variable (vnode);
/* Process all of the functions. next /* Process all of the functions. next
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment