diff options
author | Jan Hubicka <jh@suse.cz> | 2013-08-08 16:15:15 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2013-08-08 14:15:15 +0000 |
commit | 71cafea943fbb7a69a92c80e6dfdb5de119bfb33 (patch) | |
tree | a15a1a431d19e3655466a7906f95ba58df17e24a /gcc/ipa-ref.c | |
parent | 27d2e61268434dc682b81227e93ae9022d4d290f (diff) | |
download | gcc-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.c | 18 |
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; +} |