diff options
author | Martin Jambor <mjambor@suse.cz> | 2021-05-05 10:41:41 +0200 |
---|---|---|
committer | Martin Jambor <mjambor@suse.cz> | 2021-05-06 16:53:58 +0200 |
commit | 717d278af93a4ab04ff30267888fc14fe0221799 (patch) | |
tree | 1d2601279fe43004293dd3ad06779e9ab2a3a6c9 | |
parent | 861c6411ea70f18bf04c0b276a03af04636b9b3a (diff) | |
download | gcc-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.c | 43 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/ipa/ipa-sra-1.c | 2 |
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; |