diff options
author | Jan Hubicka <jh@suse.cz> | 2020-11-06 13:30:39 +0100 |
---|---|---|
committer | Jan Hubicka <jh@suse.cz> | 2020-11-06 13:30:39 +0100 |
commit | 7144270e2de7ba4954729c75ca389ed3081134ee (patch) | |
tree | 307a579391e35ce50e8199e2d3504aefdd5caf33 /gcc/ipa-ref.h | |
parent | 8a2fd716c9e9ccde7fb98c7128d2e907ece809e9 (diff) | |
download | gcc-7144270e2de7ba4954729c75ca389ed3081134ee.zip gcc-7144270e2de7ba4954729c75ca389ed3081134ee.tar.gz gcc-7144270e2de7ba4954729c75ca389ed3081134ee.tar.bz2 |
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.
Diffstat (limited to 'gcc/ipa-ref.h')
-rw-r--r-- | gcc/ipa-ref.h | 21 |
1 files changed, 10 insertions, 11 deletions
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<ipa_ref_t, va_gc> *references; + vec<ipa_ref_t, va_heap, vl_ptr> 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<ipa_ref_ptr> GTY((skip)) referring; + vec<ipa_ref_t *, va_heap, vl_ptr> referring; }; #endif /* GCC_IPA_REF_H */ |