From 7144270e2de7ba4954729c75ca389ed3081134ee Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Fri, 6 Nov 2020 13:30:39 +0100 Subject: Move ipa-refs from ggc to heap. gcc/ChangeLog: * ipa-ref.h (enum ipa_ref_use): Remove GTY marker. (struct ipa_ref): Remove GTY marker; reorder for better packing. (struct ipa_ref_list): Remove GTY marker; turn references nad referring to va_heap, vl_ptr vectors; update accesors. * cgraph.h (symtab_node::iterate_reference): Update. * ipa-ref.c (ipa_ref::remove_reference): Update. * symtab.c (symtab_node::create_reference): Update. (symtab_node::remove_all_references): Update. (symtab_node::resolve_alias): Update. gcc/cp/ChangeLog: * tree.c (cp_fix_function_decl_p): Do not access ipa_ref_list dirrectly. --- gcc/ipa-ref.h | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) (limited to 'gcc/ipa-ref.h') diff --git a/gcc/ipa-ref.h b/gcc/ipa-ref.h index 1de5bd3..3ea3f66 100644 --- a/gcc/ipa-ref.h +++ b/gcc/ipa-ref.h @@ -27,7 +27,7 @@ struct symtab_node; /* How the reference is done. */ -enum GTY(()) ipa_ref_use +enum ipa_ref_use { IPA_REF_LOAD, IPA_REF_STORE, @@ -36,7 +36,7 @@ enum GTY(()) ipa_ref_use }; /* Record of reference in callgraph or varpool. */ -struct GTY(()) ipa_ref +struct ipa_ref { public: /* Remove reference. */ @@ -59,28 +59,27 @@ public: symtab_node *referred; gimple *stmt; unsigned int lto_stmt_uid; + unsigned int referred_index; /* speculative id is used to link direct calls with their corresponding IPA_REF_ADDR references when representing speculative calls. */ unsigned int speculative_id : 16; - unsigned int referred_index; ENUM_BITFIELD (ipa_ref_use) use:3; unsigned int speculative:1; }; typedef struct ipa_ref ipa_ref_t; -typedef struct ipa_ref *ipa_ref_ptr; /* List of references. This is stored in both callgraph and varpool nodes. */ -struct GTY(()) ipa_ref_list +struct ipa_ref_list { public: /* Return first reference in list or NULL if empty. */ struct ipa_ref *first_reference (void) { - if (!vec_safe_length (references)) + if (!references.length ()) return NULL; - return &(*references)[0]; + return &references[0]; } /* Return first referring ref in list or NULL if empty. */ @@ -121,20 +120,20 @@ public: void clear (void) { referring.create (0); - references = NULL; + references.create (0); } /* Return number of references. */ unsigned int nreferences (void) { - return vec_safe_length (references); + return references.length (); } /* Store actual references in references vector. */ - vec *references; + vec references; /* Referring is vector of pointers to references. It must not live in GGC space or GGC will try to mark middle of references vectors. */ - vec GTY((skip)) referring; + vec referring; }; #endif /* GCC_IPA_REF_H */ -- cgit v1.1