diff options
author | Jan Hubicka <jh@suse.cz> | 2019-11-04 20:39:52 +0100 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2019-11-04 19:39:52 +0000 |
commit | 2bc2379be5c98d34ecbb347b2abf059aa6d94499 (patch) | |
tree | c77dfa441b49c1963d53760f79ab87018bafc88a | |
parent | 0ec77a6c25cbe321d9712e41a3aa04dff97eaaa6 (diff) | |
download | gcc-2bc2379be5c98d34ecbb347b2abf059aa6d94499.zip gcc-2bc2379be5c98d34ecbb347b2abf059aa6d94499.tar.gz gcc-2bc2379be5c98d34ecbb347b2abf059aa6d94499.tar.bz2 |
ipa-inline-transform.c: Include ipa-utils.h
* ipa-inline-transform.c: Include ipa-utils.h
(inline_call): Set thunk_expansion flag.
* ipa-utils.h (thunk_expansion): Declare.
* ipa-devirt.c (thunk_expansion): New global var.
(devirt_node_removal_hook): Do not invalidate cache while
doing thunk expansion.
From-SVN: r277789
-rw-r--r-- | gcc/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/ipa-devirt.c | 6 | ||||
-rw-r--r-- | gcc/ipa-inline-transform.c | 3 | ||||
-rw-r--r-- | gcc/ipa-utils.h | 4 |
4 files changed, 22 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f29939a..6d90105 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2019-11-04 Jan Hubicka <jh@suse.cz> + + * ipa-inline-transform.c: Include ipa-utils.h + (inline_call): Set thunk_expansion flag. + * ipa-utils.h (thunk_expansion): Declare. + * ipa-devirt.c (thunk_expansion): New global var. + (devirt_node_removal_hook): Do not invalidate cache while + doing thunk expansion. + 2019-11-04 Tamar Christina <tamar.christina@arm.com> * tree-vect-slp.c (vectorize_slp_instance_root_stmt): Initialize rstmt. diff --git a/gcc/ipa-devirt.c b/gcc/ipa-devirt.c index a14e795..4a73ba1 100644 --- a/gcc/ipa-devirt.c +++ b/gcc/ipa-devirt.c @@ -172,6 +172,11 @@ struct default_hash_traits <type_pair> } }; +/* HACK alert: this is used to communicate with ipa-inline-transform that + thunk is being expanded and there is no need to clear the polymorphic + call target cache. */ +bool thunk_expansion; + static bool odr_types_equivalent_p (tree, tree, bool, bool *, hash_set<type_pair> *, location_t, location_t); @@ -2747,6 +2752,7 @@ static void devirt_node_removal_hook (struct cgraph_node *n, void *d ATTRIBUTE_UNUSED) { if (cached_polymorphic_call_targets + && !thunk_expansion && cached_polymorphic_call_targets->contains (n)) free_polymorphic_call_targets_hash (); } diff --git a/gcc/ipa-inline-transform.c b/gcc/ipa-inline-transform.c index 1cc7803..8b95889 100644 --- a/gcc/ipa-inline-transform.c +++ b/gcc/ipa-inline-transform.c @@ -47,6 +47,7 @@ along with GCC; see the file COPYING3. If not see #include "function.h" #include "cfg.h" #include "basic-block.h" +#include "ipa-utils.h" int ncalls_inlined; int nfunctions_inlined; @@ -352,6 +353,7 @@ inline_call (struct cgraph_edge *e, bool update_original, if (to->thunk.thunk_p) { struct cgraph_node *target = to->callees->callee; + thunk_expansion = true; symtab->call_cgraph_removal_hooks (to); if (in_lto_p) to->get_untransformed_body (); @@ -360,6 +362,7 @@ inline_call (struct cgraph_edge *e, bool update_original, for (e = to->callees; e && e->callee != target; e = e->next_callee) ; symtab->call_cgraph_insertion_hooks (to); + thunk_expansion = false; gcc_assert (e); } diff --git a/gcc/ipa-utils.h b/gcc/ipa-utils.h index 22e6970..947307a 100644 --- a/gcc/ipa-utils.h +++ b/gcc/ipa-utils.h @@ -47,6 +47,9 @@ void ipa_merge_profiles (struct cgraph_node *dst, struct cgraph_node *src, bool preserve_body = false); bool recursive_call_p (tree, tree); +/* In ipa-prop.c */ +void ipa_remove_useless_jump_functions (); + /* In ipa-profile.c */ bool ipa_propagate_frequency (struct cgraph_node *node); @@ -54,6 +57,7 @@ bool ipa_propagate_frequency (struct cgraph_node *node); struct odr_type_d; typedef odr_type_d *odr_type; +extern bool thunk_expansion; void build_type_inheritance_graph (void); void rebuild_type_inheritance_graph (void); void update_type_inheritance_graph (void); |