Commit bf898b30 by Martin Liska Committed by Martin Liska

cgraph.c (cgraph_node::release_body): New argument keep_arguments introduced.

	* cgraph.c (cgraph_node::release_body): New argument keep_arguments
	introduced.
	* cgraph.h: Likewise.
	* cgraphunit.c (cgraph_node::create_wrapper): Usage of new argument introduced.
	* ipa-utils.h (polymorphic_type_binfo_p): Safe check for binfos created by Java.
	* tree-ssa-alias.c (ao_ref_base_alias_set): Static function transformed to global.
	* tree-ssa-alias.h: Likewise.

From-SVN: r215640
parent 5535b7d6
2014-09-26 Martin Liska <mliska@suse.cz>
* cgraph.c (cgraph_node::release_body): New argument keep_arguments
introduced.
* cgraph.h: Likewise.
* cgraphunit.c (cgraph_node::create_wrapper): Usage of new argument introduced.
* ipa-utils.h (polymorphic_type_binfo_p): Safe check for binfos created by Java.
* tree-ssa-alias.c (ao_ref_base_alias_set): Static function transformed to global.
* tree-ssa-alias.h: Likewise.
2014-09-26 Jakub Jelinek <jakub@redhat.com>
Max Ostapenko <m.ostapenko@partner.samsung.com>
......@@ -1625,16 +1625,19 @@ release_function_body (tree decl)
/* Release memory used to represent body of function.
Use this only for functions that are released before being translated to
target code (i.e. RTL). Functions that are compiled to RTL and beyond
are free'd in final.c via free_after_compilation(). */
are free'd in final.c via free_after_compilation().
KEEP_ARGUMENTS are useful only if you want to rebuild body as thunk. */
void
cgraph_node::release_body (void)
cgraph_node::release_body (bool keep_arguments)
{
ipa_transforms_to_apply.release ();
if (!used_as_abstract_origin && symtab->state != PARSING)
{
DECL_RESULT (decl) = NULL;
DECL_ARGUMENTS (decl) = NULL;
if (!keep_arguments)
DECL_ARGUMENTS (decl) = NULL;
}
/* If the node is abstract and needed, then do not clear DECL_INITIAL
of its associated function function declaration because it's
......
......@@ -917,7 +917,7 @@ public:
Use this only for functions that are released before being translated to
target code (i.e. RTL). Functions that are compiled to RTL and beyond
are free'd in final.c via free_after_compilation(). */
void release_body (void);
void release_body (bool keep_arguments = false);
/* cgraph_node is no longer nested function; update cgraph accordingly. */
void unnest (void);
......
......@@ -2294,8 +2294,9 @@ cgraph_node::create_wrapper (cgraph_node *target)
/* Preserve DECL_RESULT so we get right by reference flag. */
tree decl_result = DECL_RESULT (decl);
/* Remove the function's body. */
release_body ();
/* Remove the function's body but keep arguments to be reused
for thunk. */
release_body (true);
reset ();
DECL_RESULT (decl) = decl_result;
......
......@@ -179,8 +179,10 @@ odr_type_p (const_tree t)
inline bool
polymorphic_type_binfo_p (const_tree binfo)
{
/* See if BINFO's type has an virtual table associtated with it. */
return BINFO_VTABLE (TYPE_BINFO (BINFO_TYPE (binfo)));
/* See if BINFO's type has an virtual table associtated with it.
Check is defensive because of Java FE produces BINFOs
without BINFO_TYPE set. */
return BINFO_TYPE (binfo) && BINFO_VTABLE (TYPE_BINFO (BINFO_TYPE (binfo)));
}
#endif /* GCC_IPA_UTILS_H */
......
......@@ -559,7 +559,7 @@ ao_ref_base (ao_ref *ref)
/* Returns the base object alias set of the memory reference *REF. */
static alias_set_type
alias_set_type
ao_ref_base_alias_set (ao_ref *ref)
{
tree base_ref;
......
......@@ -98,6 +98,7 @@ extern void ao_ref_init (ao_ref *, tree);
extern void ao_ref_init_from_ptr_and_size (ao_ref *, tree, tree);
extern tree ao_ref_base (ao_ref *);
extern alias_set_type ao_ref_alias_set (ao_ref *);
extern alias_set_type ao_ref_base_alias_set (ao_ref *);
extern bool ptr_deref_may_alias_global_p (tree);
extern bool ptr_derefs_may_alias_p (tree, tree);
extern bool ref_may_alias_global_p (tree);
......
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