From: Martin Jambor Date: Wed, 5 May 2021 08:41:41 +0000 (+0200) Subject: ipa-sra: Do not bail out when callers cannot be cloned X-Git-Tag: basepoints/gcc-13~7735 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=r12-578-g717d278af93a4a;p=thirdparty%2Fgcc.git 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. --- diff --git a/gcc/ipa-sra.c b/gcc/ipa-sra.c index 7a89906cee63..3f90d4d81b68 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 df7e356daf35..4a22e3978f92 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;