mirror of git://gcc.gnu.org/git/gcc.git
ipa-fnsummary.c (analyze_function_body): Do not loeak conds and size_time_table.
* ipa-fnsummary.c (analyze_function_body): Do not loeak conds and size_time_table. (ipa_fn_summary_generate): Add prevails parameter; do not allocate data when symbol is not prevailing. (inline_read_section): Likewise. From-SVN: r267185
This commit is contained in:
parent
19adb97a31
commit
ddfb13175f
|
|
@ -1,3 +1,11 @@
|
||||||
|
2018-12-15 Jan Hubicka <hubicka@ucw.cz>
|
||||||
|
|
||||||
|
* ipa-fnsummary.c (analyze_function_body): Do not loeak conds and
|
||||||
|
size_time_table.
|
||||||
|
(ipa_fn_summary_generate): Add prevails parameter; do not allocate
|
||||||
|
data when symbol is not prevailing.
|
||||||
|
(inline_read_section): Likewise.
|
||||||
|
|
||||||
2018-12-15 Jan Hubicka <hubicka@ucw.cz>
|
2018-12-15 Jan Hubicka <hubicka@ucw.cz>
|
||||||
|
|
||||||
* cgraph.h (cgraph_node): Add predicate prevailing_p.
|
* cgraph.h (cgraph_node): Add predicate prevailing_p.
|
||||||
|
|
|
||||||
|
|
@ -1990,7 +1990,9 @@ analyze_function_body (struct cgraph_node *node, bool early)
|
||||||
gcc_assert (cfun == my_function);
|
gcc_assert (cfun == my_function);
|
||||||
|
|
||||||
memset(&fbi, 0, sizeof(fbi));
|
memset(&fbi, 0, sizeof(fbi));
|
||||||
|
vec_free (info->conds);
|
||||||
info->conds = NULL;
|
info->conds = NULL;
|
||||||
|
vec_free (info->size_time_table);
|
||||||
info->size_time_table = NULL;
|
info->size_time_table = NULL;
|
||||||
|
|
||||||
/* When optimizing and analyzing for IPA inliner, initialize loop optimizer
|
/* When optimizing and analyzing for IPA inliner, initialize loop optimizer
|
||||||
|
|
@ -3193,28 +3195,46 @@ ipa_fn_summary_generate (void)
|
||||||
/* Write inline summary for edge E to OB. */
|
/* Write inline summary for edge E to OB. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
read_ipa_call_summary (struct lto_input_block *ib, struct cgraph_edge *e)
|
read_ipa_call_summary (struct lto_input_block *ib, struct cgraph_edge *e,
|
||||||
|
bool prevails)
|
||||||
{
|
{
|
||||||
struct ipa_call_summary *es = ipa_call_summaries->get_create (e);
|
struct ipa_call_summary *es = prevails
|
||||||
|
? ipa_call_summaries->get_create (e) : NULL;
|
||||||
predicate p;
|
predicate p;
|
||||||
int length, i;
|
int length, i;
|
||||||
|
|
||||||
es->call_stmt_size = streamer_read_uhwi (ib);
|
int size = streamer_read_uhwi (ib);
|
||||||
es->call_stmt_time = streamer_read_uhwi (ib);
|
int time = streamer_read_uhwi (ib);
|
||||||
es->loop_depth = streamer_read_uhwi (ib);
|
int depth = streamer_read_uhwi (ib);
|
||||||
|
|
||||||
|
if (es)
|
||||||
|
{
|
||||||
|
es->call_stmt_size = size;
|
||||||
|
es->call_stmt_time = time;
|
||||||
|
es->loop_depth = depth;
|
||||||
|
}
|
||||||
|
|
||||||
bitpack_d bp = streamer_read_bitpack (ib);
|
bitpack_d bp = streamer_read_bitpack (ib);
|
||||||
es->is_return_callee_uncaptured = bp_unpack_value (&bp, 1);
|
if (es)
|
||||||
|
es->is_return_callee_uncaptured = bp_unpack_value (&bp, 1);
|
||||||
|
else
|
||||||
|
bp_unpack_value (&bp, 1);
|
||||||
|
|
||||||
p.stream_in (ib);
|
p.stream_in (ib);
|
||||||
edge_set_predicate (e, &p);
|
if (es)
|
||||||
|
edge_set_predicate (e, &p);
|
||||||
length = streamer_read_uhwi (ib);
|
length = streamer_read_uhwi (ib);
|
||||||
if (length)
|
if (length && es && e->possibly_call_in_translation_unit_p ())
|
||||||
{
|
{
|
||||||
es->param.safe_grow_cleared (length);
|
es->param.safe_grow_cleared (length);
|
||||||
for (i = 0; i < length; i++)
|
for (i = 0; i < length; i++)
|
||||||
es->param[i].change_prob = streamer_read_uhwi (ib);
|
es->param[i].change_prob = streamer_read_uhwi (ib);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (i = 0; i < length; i++)
|
||||||
|
streamer_read_uhwi (ib);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -3254,19 +3274,34 @@ inline_read_section (struct lto_file_decl_data *file_data, const char *data,
|
||||||
encoder = file_data->symtab_node_encoder;
|
encoder = file_data->symtab_node_encoder;
|
||||||
node = dyn_cast<cgraph_node *> (lto_symtab_encoder_deref (encoder,
|
node = dyn_cast<cgraph_node *> (lto_symtab_encoder_deref (encoder,
|
||||||
index));
|
index));
|
||||||
info = ipa_fn_summaries->get_create (node);
|
info = node->prevailing_p () ? ipa_fn_summaries->get_create (node) : NULL;
|
||||||
|
|
||||||
info->estimated_stack_size
|
int stack_size = streamer_read_uhwi (&ib);
|
||||||
= info->estimated_self_stack_size = streamer_read_uhwi (&ib);
|
int size = streamer_read_uhwi (&ib);
|
||||||
info->size = info->self_size = streamer_read_uhwi (&ib);
|
sreal time = sreal::stream_in (&ib);
|
||||||
info->time = sreal::stream_in (&ib);
|
|
||||||
|
if (info)
|
||||||
|
{
|
||||||
|
info->estimated_stack_size
|
||||||
|
= info->estimated_self_stack_size = stack_size;
|
||||||
|
info->size = info->self_size = size;
|
||||||
|
info->time = time;
|
||||||
|
}
|
||||||
|
|
||||||
bp = streamer_read_bitpack (&ib);
|
bp = streamer_read_bitpack (&ib);
|
||||||
info->inlinable = bp_unpack_value (&bp, 1);
|
if (info)
|
||||||
info->fp_expressions = bp_unpack_value (&bp, 1);
|
{
|
||||||
|
info->inlinable = bp_unpack_value (&bp, 1);
|
||||||
|
info->fp_expressions = bp_unpack_value (&bp, 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bp_unpack_value (&bp, 1);
|
||||||
|
bp_unpack_value (&bp, 1);
|
||||||
|
}
|
||||||
|
|
||||||
count2 = streamer_read_uhwi (&ib);
|
count2 = streamer_read_uhwi (&ib);
|
||||||
gcc_assert (!info->conds);
|
gcc_assert (!info || !info->conds);
|
||||||
for (j = 0; j < count2; j++)
|
for (j = 0; j < count2; j++)
|
||||||
{
|
{
|
||||||
struct condition c;
|
struct condition c;
|
||||||
|
|
@ -3279,10 +3314,11 @@ inline_read_section (struct lto_file_decl_data *file_data, const char *data,
|
||||||
c.by_ref = bp_unpack_value (&bp, 1);
|
c.by_ref = bp_unpack_value (&bp, 1);
|
||||||
if (c.agg_contents)
|
if (c.agg_contents)
|
||||||
c.offset = streamer_read_uhwi (&ib);
|
c.offset = streamer_read_uhwi (&ib);
|
||||||
vec_safe_push (info->conds, c);
|
if (info)
|
||||||
|
vec_safe_push (info->conds, c);
|
||||||
}
|
}
|
||||||
count2 = streamer_read_uhwi (&ib);
|
count2 = streamer_read_uhwi (&ib);
|
||||||
gcc_assert (!info->size_time_table);
|
gcc_assert (!info || !info->size_time_table);
|
||||||
for (j = 0; j < count2; j++)
|
for (j = 0; j < count2; j++)
|
||||||
{
|
{
|
||||||
struct size_time_entry e;
|
struct size_time_entry e;
|
||||||
|
|
@ -3292,19 +3328,23 @@ inline_read_section (struct lto_file_decl_data *file_data, const char *data,
|
||||||
e.exec_predicate.stream_in (&ib);
|
e.exec_predicate.stream_in (&ib);
|
||||||
e.nonconst_predicate.stream_in (&ib);
|
e.nonconst_predicate.stream_in (&ib);
|
||||||
|
|
||||||
vec_safe_push (info->size_time_table, e);
|
if (info)
|
||||||
|
vec_safe_push (info->size_time_table, e);
|
||||||
}
|
}
|
||||||
|
|
||||||
p.stream_in (&ib);
|
p.stream_in (&ib);
|
||||||
set_hint_predicate (&info->loop_iterations, p);
|
if (info)
|
||||||
|
set_hint_predicate (&info->loop_iterations, p);
|
||||||
p.stream_in (&ib);
|
p.stream_in (&ib);
|
||||||
set_hint_predicate (&info->loop_stride, p);
|
if (info)
|
||||||
|
set_hint_predicate (&info->loop_stride, p);
|
||||||
p.stream_in (&ib);
|
p.stream_in (&ib);
|
||||||
set_hint_predicate (&info->array_index, p);
|
if (info)
|
||||||
|
set_hint_predicate (&info->array_index, p);
|
||||||
for (e = node->callees; e; e = e->next_callee)
|
for (e = node->callees; e; e = e->next_callee)
|
||||||
read_ipa_call_summary (&ib, e);
|
read_ipa_call_summary (&ib, e, info != NULL);
|
||||||
for (e = node->indirect_calls; e; e = e->next_callee)
|
for (e = node->indirect_calls; e; e = e->next_callee)
|
||||||
read_ipa_call_summary (&ib, e);
|
read_ipa_call_summary (&ib, e, info != NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
lto_free_section_data (file_data, LTO_section_ipa_fn_summary, NULL, data,
|
lto_free_section_data (file_data, LTO_section_ipa_fn_summary, NULL, data,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue