ipa-sra: Do not bail out when callers cannot be cloned

IPA-SRA fails to produce (very simple) edge summaries when a caller
cannot be cloned or its signature cannot be changed which makes it
less powerful for no good reason.  This patch fixes that problem.

gcc/ChangeLog:

2021-04-12  Martin Jambor  <mjambor@suse.cz>

	* ipa-sra.c (ipa_sra_dump_all_summaries): Dump edge summaries even
	when there is no function summary.
	(ipa_sra_summarize_function): produce edge summaries even when
	bailing out early.

gcc/testsuite/ChangeLog:

2021-04-12  Martin Jambor  <mjambor@suse.cz>

	* gcc.dg/ipa/ipa-sra-1.c (main): Revert change done by
	05193687dd, make the argv again pointer to an array.
This commit is contained in:
Martin Jambor 2021-05-05 10:41:41 +02:00
parent 861c6411ea
commit 717d278af9
2 changed files with 25 additions and 22 deletions

View file

@ -2795,27 +2795,27 @@ ipa_sra_dump_all_summaries (FILE *f)
isra_func_summary *ifs = func_sums->get (node);
if (!ifs)
{
fprintf (f, " Function does not have any associated IPA-SRA "
"summary\n");
continue;
}
if (!ifs->m_candidate)
{
fprintf (f, " Not a candidate function\n");
continue;
}
if (ifs->m_returns_value)
fprintf (f, " Returns value\n");
if (vec_safe_is_empty (ifs->m_parameters))
fprintf (f, " No parameter information. \n");
fprintf (f, " Function does not have any associated IPA-SRA "
"summary\n");
else
for (unsigned i = 0; i < ifs->m_parameters->length (); ++i)
{
fprintf (f, " Descriptor for parameter %i:\n", i);
dump_isra_param_descriptor (f, &(*ifs->m_parameters)[i]);
}
fprintf (f, "\n");
{
if (!ifs->m_candidate)
{
fprintf (f, " Not a candidate function\n");
continue;
}
if (ifs->m_returns_value)
fprintf (f, " Returns value\n");
if (vec_safe_is_empty (ifs->m_parameters))
fprintf (f, " No parameter information. \n");
else
for (unsigned i = 0; i < ifs->m_parameters->length (); ++i)
{
fprintf (f, " Descriptor for parameter %i:\n", i);
dump_isra_param_descriptor (f, &(*ifs->m_parameters)[i]);
}
fprintf (f, "\n");
}
struct cgraph_edge *cs;
for (cs = node->callees; cs; cs = cs->next_callee)
@ -4063,7 +4063,10 @@ ipa_sra_summarize_function (cgraph_node *node)
fprintf (dump_file, "Creating summary for %s/%i:\n", node->name (),
node->order);
if (!ipa_sra_preliminary_function_checks (node))
return;
{
isra_analyze_all_outgoing_calls (node);
return;
}
gcc_obstack_init (&gensum_obstack);
isra_func_summary *ifs = func_sums->get_create (node);
ifs->m_candidate = true;

View file

@ -24,7 +24,7 @@ ox (struct bovid cow)
}
int
main (int argc, char **argv)
main (int argc, char *argv[])
{
struct bovid cow;