From 717d278af93a4ab04ff30267888fc14fe0221799 Mon Sep 17 00:00:00 2001 From: Martin Jambor Date: Wed, 5 May 2021 10:41:41 +0200 Subject: [PATCH] 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 * 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 * gcc.dg/ipa/ipa-sra-1.c (main): Revert change done by 05193687dde, make the argv again pointer to an array. --- gcc/ipa-sra.c | 45 +++++++++++++++------------- gcc/testsuite/gcc.dg/ipa/ipa-sra-1.c | 2 +- 2 files changed, 25 insertions(+), 22 deletions(-) diff --git a/gcc/ipa-sra.c b/gcc/ipa-sra.c index 7a89906cee6..3f90d4d81b6 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"); - 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; diff --git a/gcc/testsuite/gcc.dg/ipa/ipa-sra-1.c b/gcc/testsuite/gcc.dg/ipa/ipa-sra-1.c index df7e356daf3..4a22e3978f9 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;