aboutsummaryrefslogtreecommitdiff
path: root/gcc/ipa.c
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2010-10-27 00:42:53 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2010-10-26 22:42:53 +0000
commited62e0d9b7f91e65f9c7c3845d0d5c8dce600889 (patch)
tree720a1c9202abf0413ef0563ab046a20ae17bcc6a /gcc/ipa.c
parent8c3800373fa39db275e4bea68fa775a0defb3daf (diff)
downloadgcc-ed62e0d9b7f91e65f9c7c3845d0d5c8dce600889.zip
gcc-ed62e0d9b7f91e65f9c7c3845d0d5c8dce600889.tar.gz
gcc-ed62e0d9b7f91e65f9c7c3845d0d5c8dce600889.tar.bz2
ipa.c (process_references): Enqueue all referenced nodes; mark as reachable only non-external nodes.
* ipa.c (process_references): Enqueue all referenced nodes; mark as reachable only non-external nodes. (cgraph_remove_unreachable_nodes): All referenced nodes should be enqueued; remove bogues node->needed check. From-SVN: r165990
Diffstat (limited to 'gcc/ipa.c')
-rw-r--r--gcc/ipa.c25
1 files changed, 12 insertions, 13 deletions
diff --git a/gcc/ipa.c b/gcc/ipa.c
index c318b65..7c2c7f2 100644
--- a/gcc/ipa.c
+++ b/gcc/ipa.c
@@ -170,12 +170,11 @@ process_references (struct ipa_ref_list *list,
{
struct cgraph_node *node = ipa_ref_node (ref);
if (!node->reachable
+ && node->analyzed
&& (!DECL_EXTERNAL (node->decl)
|| before_inlining_p))
- {
- node->reachable = true;
- enqueue_cgraph_node (node, first);
- }
+ node->reachable = true;
+ enqueue_cgraph_node (node, first);
}
else
{
@@ -304,15 +303,15 @@ cgraph_remove_unreachable_nodes (bool before_inlining_p, FILE *file)
if (node->reachable)
{
for (e = node->callees; e; e = e->next_callee)
- if (!e->callee->reachable
- && node->analyzed
- && (!e->inline_failed || !e->callee->analyzed
- || (!DECL_EXTERNAL (e->callee->decl))
- || before_inlining_p))
- {
+ {
+ if (!e->callee->reachable
+ && node->analyzed
+ && (!e->inline_failed
+ || !DECL_EXTERNAL (e->callee->decl)
+ || before_inlining_p))
e->callee->reachable = true;
- enqueue_cgraph_node (e->callee, &first);
- }
+ enqueue_cgraph_node (e->callee, &first);
+ }
process_references (&node->ref_list, &first, &first_varpool, before_inlining_p);
}
@@ -416,7 +415,7 @@ cgraph_remove_unreachable_nodes (bool before_inlining_p, FILE *file)
found = true;
/* If so, we need to keep node in the callgraph. */
- if (found || node->needed)
+ if (found)
{
if (node->analyzed)
{