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:
parent
54af3008b6
commit
7ee0681e05
@ -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);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user