2
0
mirror of git://gcc.gnu.org/git/gcc.git synced 2025-04-24 17:41:42 +08:00

Release ipa-prop's agg.items and make alocation more careful

This saves about 316MB WPAing Firefox

	* ipa-prop.c (build_agg_jump_func_from_list,
	ipa_read_jump_function): Reserve agg.items precisely.
	* ipa-prop.h (ipa_node_params::~ipa_node_params): Release descriptors
	(ipa_edge_args::~ipa_edge_args): Release agg.items.
This commit is contained in:
Jan Hubicka 2020-11-23 16:58:23 +01:00
parent 54af3008b6
commit 7ee0681e05
2 changed files with 10 additions and 2 deletions

@ -1682,7 +1682,7 @@ build_agg_jump_func_from_list (struct ipa_known_agg_contents_list *list,
int value_count, HOST_WIDE_INT arg_offset,
struct ipa_jump_func *jfunc)
{
vec_alloc (jfunc->agg.items, value_count);
vec_safe_reserve (jfunc->agg.items, value_count, true);
for (; list; list = list->next)
{
struct ipa_agg_jf_item item;
@ -4745,7 +4745,10 @@ ipa_read_jump_function (class lto_input_block *ib,
count = streamer_read_uhwi (ib);
if (prevails)
vec_alloc (jump_func->agg.items, count);
{
jump_func->agg.items = NULL;
vec_safe_reserve (jump_func->agg.items, count, true);
}
if (count)
{
struct bitpack_d bp = streamer_read_bitpack (ib);

@ -620,6 +620,7 @@ inline
ipa_node_params::~ipa_node_params ()
{
free (lattices);
vec_free (descriptors);
known_csts.release ();
known_contexts.release ();
}
@ -895,6 +896,10 @@ class GTY((for_user)) ipa_edge_args
/* Destructor. */
~ipa_edge_args ()
{
unsigned int i;
ipa_jump_func *jf;
FOR_EACH_VEC_SAFE_ELT (jump_functions, i, jf)
vec_free (jf->agg.items);
vec_free (jump_functions);
vec_free (polymorphic_call_contexts);
}