aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Jambor <mjambor@suse.cz>2021-05-05 10:41:41 +0200
committerMartin Jambor <mjambor@suse.cz>2021-05-06 16:53:58 +0200
commit717d278af93a4ab04ff30267888fc14fe0221799 (patch)
tree1d2601279fe43004293dd3ad06779e9ab2a3a6c9
parent861c6411ea70f18bf04c0b276a03af04636b9b3a (diff)
downloadgcc-717d278af93a4ab04ff30267888fc14fe0221799.zip
gcc-717d278af93a4ab04ff30267888fc14fe0221799.tar.gz
gcc-717d278af93a4ab04ff30267888fc14fe0221799.tar.bz2
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 05193687dde, make the argv again pointer to an array.
-rw-r--r--gcc/ipa-sra.c43
-rw-r--r--gcc/testsuite/gcc.dg/ipa/ipa-sra-1.c2
2 files changed, 24 insertions, 21 deletions
diff --git a/gcc/ipa-sra.c b/gcc/ipa-sra.c
index 7a89906..3f90d4d 100644
--- a/gcc/ipa-sra.c
+++ b/gcc/ipa-sra.c
@@ -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");
+ else
{
- 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_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");
}
- 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;
diff --git a/gcc/testsuite/gcc.dg/ipa/ipa-sra-1.c b/gcc/testsuite/gcc.dg/ipa/ipa-sra-1.c
index df7e356..4a22e39 100644
--- a/gcc/testsuite/gcc.dg/ipa/ipa-sra-1.c
+++ b/gcc/testsuite/gcc.dg/ipa/ipa-sra-1.c
@@ -24,7 +24,7 @@ ox (struct bovid cow)
}
int
-main (int argc, char **argv)
+main (int argc, char *argv[])
{
struct bovid cow;