Commit 2bc2379b by Jan Hubicka Committed by Jan Hubicka

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
parent 0ec77a6c
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> 2019-11-04 Tamar Christina <tamar.christina@arm.com>
* tree-vect-slp.c (vectorize_slp_instance_root_stmt): Initialize rstmt. * tree-vect-slp.c (vectorize_slp_instance_root_stmt): Initialize rstmt.
...@@ -172,6 +172,11 @@ struct default_hash_traits <type_pair> ...@@ -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 *, static bool odr_types_equivalent_p (tree, tree, bool, bool *,
hash_set<type_pair> *, hash_set<type_pair> *,
location_t, location_t); location_t, location_t);
...@@ -2747,6 +2752,7 @@ static void ...@@ -2747,6 +2752,7 @@ static void
devirt_node_removal_hook (struct cgraph_node *n, void *d ATTRIBUTE_UNUSED) devirt_node_removal_hook (struct cgraph_node *n, void *d ATTRIBUTE_UNUSED)
{ {
if (cached_polymorphic_call_targets if (cached_polymorphic_call_targets
&& !thunk_expansion
&& cached_polymorphic_call_targets->contains (n)) && cached_polymorphic_call_targets->contains (n))
free_polymorphic_call_targets_hash (); free_polymorphic_call_targets_hash ();
} }
......
...@@ -47,6 +47,7 @@ along with GCC; see the file COPYING3. If not see ...@@ -47,6 +47,7 @@ along with GCC; see the file COPYING3. If not see
#include "function.h" #include "function.h"
#include "cfg.h" #include "cfg.h"
#include "basic-block.h" #include "basic-block.h"
#include "ipa-utils.h"
int ncalls_inlined; int ncalls_inlined;
int nfunctions_inlined; int nfunctions_inlined;
...@@ -352,6 +353,7 @@ inline_call (struct cgraph_edge *e, bool update_original, ...@@ -352,6 +353,7 @@ inline_call (struct cgraph_edge *e, bool update_original,
if (to->thunk.thunk_p) if (to->thunk.thunk_p)
{ {
struct cgraph_node *target = to->callees->callee; struct cgraph_node *target = to->callees->callee;
thunk_expansion = true;
symtab->call_cgraph_removal_hooks (to); symtab->call_cgraph_removal_hooks (to);
if (in_lto_p) if (in_lto_p)
to->get_untransformed_body (); to->get_untransformed_body ();
...@@ -360,6 +362,7 @@ inline_call (struct cgraph_edge *e, bool update_original, ...@@ -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) for (e = to->callees; e && e->callee != target; e = e->next_callee)
; ;
symtab->call_cgraph_insertion_hooks (to); symtab->call_cgraph_insertion_hooks (to);
thunk_expansion = false;
gcc_assert (e); gcc_assert (e);
} }
......
...@@ -47,6 +47,9 @@ void ipa_merge_profiles (struct cgraph_node *dst, ...@@ -47,6 +47,9 @@ void ipa_merge_profiles (struct cgraph_node *dst,
struct cgraph_node *src, bool preserve_body = false); struct cgraph_node *src, bool preserve_body = false);
bool recursive_call_p (tree, tree); bool recursive_call_p (tree, tree);
/* In ipa-prop.c */
void ipa_remove_useless_jump_functions ();
/* In ipa-profile.c */ /* In ipa-profile.c */
bool ipa_propagate_frequency (struct cgraph_node *node); bool ipa_propagate_frequency (struct cgraph_node *node);
...@@ -54,6 +57,7 @@ bool ipa_propagate_frequency (struct cgraph_node *node); ...@@ -54,6 +57,7 @@ bool ipa_propagate_frequency (struct cgraph_node *node);
struct odr_type_d; struct odr_type_d;
typedef odr_type_d *odr_type; typedef odr_type_d *odr_type;
extern bool thunk_expansion;
void build_type_inheritance_graph (void); void build_type_inheritance_graph (void);
void rebuild_type_inheritance_graph (void); void rebuild_type_inheritance_graph (void);
void update_type_inheritance_graph (void); void update_type_inheritance_graph (void);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment