aboutsummaryrefslogtreecommitdiff
path: root/gcc/ipa-ref.c
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2013-08-08 16:15:15 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2013-08-08 14:15:15 +0000
commit71cafea943fbb7a69a92c80e6dfdb5de119bfb33 (patch)
treea15a1a431d19e3655466a7906f95ba58df17e24a /gcc/ipa-ref.c
parent27d2e61268434dc682b81227e93ae9022d4d290f (diff)
downloadgcc-71cafea943fbb7a69a92c80e6dfdb5de119bfb33.zip
gcc-71cafea943fbb7a69a92c80e6dfdb5de119bfb33.tar.gz
gcc-71cafea943fbb7a69a92c80e6dfdb5de119bfb33.tar.bz2
cgraphbuild.c (build_cgraph_edges): Do not walk into debugs.
* cgraphbuild.c (build_cgraph_edges): Do not walk into debugs. (make_pass_rebuild_cgraph_edges): Also clear references. * cgraph.c (verify_cgraph_node): Add basic ipa-ref verifier. * ipa-inline-transform.c (inline_transform): Remove all references after inlining. * cgraphunit.c (expand_function): Remove all references after expansion. * ipa-ref.c (ipa_ref_has_aliases_p): Fix formatting. (ipa_find_reference): Rewrite to iterator. (remove_stmt_references): Likewise. (ipa_clear_stmts_in_references): New function. * ipa-ref.h (ipa_clear_stmts_in_references): Declare. * cgraphclones.c (cgraph_materialize_all_clones): Remove or clear references. * ipa-split.c (split_function): Remove references in split function. From-SVN: r201601
Diffstat (limited to 'gcc/ipa-ref.c')
-rw-r--r--gcc/ipa-ref.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/gcc/ipa-ref.c b/gcc/ipa-ref.c
index a6ffdf3..d2c6002 100644
--- a/gcc/ipa-ref.c
+++ b/gcc/ipa-ref.c
@@ -218,6 +218,7 @@ ipa_ref_has_aliases_p (struct ipa_ref_list *ref_list)
{
struct ipa_ref *ref;
int i;
+
for (i = 0; ipa_ref_list_referring_iterate (ref_list, i, ref); i++)
if (ref->use == IPA_REF_ALIAS)
return true;
@@ -234,7 +235,7 @@ ipa_find_reference (symtab_node referring_node, symtab_node referred_node,
struct ipa_ref *r = NULL;
int i;
- FOR_EACH_VEC_SAFE_ELT (referring_node->symbol.ref_list.references, i, r)
+ for (i = 0; ipa_ref_list_reference_iterate (&referring_node->symbol.ref_list, i, r); i++)
if (r->referred == referred_node
&& (in_lto_p || r->stmt == stmt))
return r;
@@ -250,7 +251,20 @@ ipa_remove_stmt_references (symtab_node referring_node, gimple stmt)
struct ipa_ref *r = NULL;
int i;
- FOR_EACH_VEC_SAFE_ELT (referring_node->symbol.ref_list.references, i, r)
+ for (i = 0; ipa_ref_list_reference_iterate (&referring_node->symbol.ref_list, i, r); i++)
if (r->stmt == stmt)
ipa_remove_reference (r);
}
+
+/* Remove all stmt references in non-speculative references.
+ Those are not maintained during inlining & clonning. */
+
+void
+ipa_clear_stmts_in_references (symtab_node referring_node)
+{
+ struct ipa_ref *r = NULL;
+ int i;
+
+ for (i = 0; ipa_ref_list_reference_iterate (&referring_node->symbol.ref_list, i, r); i++)
+ r->stmt = NULL;
+}