* Cgraph alias reorg 12/14 (ipa.c update)
@ 2011-06-10 18:39 Jan Hubicka
0 siblings, 0 replies; only message in thread
From: Jan Hubicka @ 2011-06-10 18:39 UTC (permalink / raw)
To: gcc-patches
Hi,
the usual update to walk alias nodes, this time for cgraph_local_node_p and
logic deicing whether address is taken.
Bootstrapped/regtested x86_64-linux, comitted.
Honza
* ipa.c (cgraph_non_local_node_p_1): Break out from ...
(cgraph_local_node_p): ... here.
(has_addr_references_p): Break out from ...
(cgraph_remove_unreachable_nodes): ... here;
Index: ipa.c
===================================================================
--- ipa.c (revision 174913)
+++ ipa.c (working copy)
@@ -113,17 +113,48 @@ process_references (struct ipa_ref_list
}
}
+
+/* Return true when NODE can not be local. Worker for cgraph_local_node_p. */
+
+static bool
+cgraph_non_local_node_p_1 (struct cgraph_node *node, void *data ATTRIBUTE_UNUSED)
+{
+ return !(cgraph_only_called_directly_or_aliased_p (node)
+ && node->analyzed
+ && !DECL_EXTERNAL (node->decl)
+ && !node->local.externally_visible
+ && !node->reachable_from_other_partition
+ && !node->in_other_partition);
+}
+
/* Return true when function can be marked local. */
static bool
cgraph_local_node_p (struct cgraph_node *node)
{
- return (cgraph_only_called_directly_p (node)
- && node->analyzed
- && !DECL_EXTERNAL (node->decl)
- && !node->local.externally_visible
- && !node->reachable_from_other_partition
- && !node->in_other_partition);
+ return !cgraph_for_node_and_aliases (cgraph_function_or_thunk_node (node, NULL),
+ cgraph_non_local_node_p_1, NULL, true);
+
+}
+
+/* Return true when NODE has ADDR reference. */
+
+static bool
+has_addr_references_p (struct cgraph_node *node,
+ void *data ATTRIBUTE_UNUSED)
+{
+ int i;
+ struct ipa_ref *ref;
+
+ for (i = 0; ipa_ref_list_refering_iterate (&node->ref_list, i, ref); i++)
+ {
+ /* FIXME: handle aliases correctly. */
+ gcc_assert (ref->use == IPA_REF_ADDR
+ || ref->use == IPA_REF_ALIAS);
+ if (ref->use == IPA_REF_ADDR)
+ return true;
+ }
+ return false;
}
/* Perform reachability analysis and reclaim all unreachable nodes.
@@ -417,16 +448,7 @@ cgraph_remove_unreachable_nodes (bool be
if (node->address_taken
&& !node->reachable_from_other_partition)
{
- int i;
- struct ipa_ref *ref;
- bool found = false;
- for (i = 0; ipa_ref_list_refering_iterate (&node->ref_list, i, ref)
- && !found; i++)
- {
- gcc_assert (ref->use == IPA_REF_ADDR);
- found = true;
- }
- if (!found)
+ if (!cgraph_for_node_and_aliases (node, has_addr_references_p, NULL, true))
{
if (file)
fprintf (file, " %s", cgraph_node_name (node));
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2011-06-10 18:32 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-06-10 18:39 Cgraph alias reorg 12/14 (ipa.c update) Jan Hubicka
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).