From: Jan Hubicka Date: Mon, 2 Sep 2013 20:17:10 +0000 (+0200) Subject: ipa-split.c (execute_split_functions): Split externally visible functions called... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c91061e6b0e1a5ce9484decc9aa208ce00a9af57;p=gcc.git ipa-split.c (execute_split_functions): Split externally visible functions called once. * ipa-split.c (execute_split_functions): Split externally visible functions called once. * gcc.dg/tree-ssa/fnsplit-1.c: New testcase. From-SVN: r202185 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ab141db880f..359b9d844d9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2013-09-02 Jan Hubicka + + * ipa-split.c (execute_split_functions): Split externally visible + functions called once. + 2013-09-02 Martin Jambor PR ipa/58106 diff --git a/gcc/ipa-split.c b/gcc/ipa-split.c index faf7c8480c9..5c3ee4fa2ce 100644 --- a/gcc/ipa-split.c +++ b/gcc/ipa-split.c @@ -1537,7 +1537,9 @@ execute_split_functions (void) Note that we are not completely conservative about disqualifying functions called once. It is possible that the caller is called more then once and then inlining would still benefit. */ - if ((!node->callers || !node->callers->next_caller) + if ((!node->callers + /* Local functions called once will be completely inlined most of time. */ + || (!node->callers->next_caller && node->local.local)) && !node->symbol.address_taken && (!flag_lto || !node->symbol.externally_visible)) { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index dd53ef667e3..c01c48c2283 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2013-09-02 Jan Hubicka + + * gcc.dg/tree-ssa/fnsplit-1.c: New testcase. + 2013-09-02 Martin Jambor PR ipa/58106 diff --git a/gcc/testsuite/gcc.dg/tree-ssa/fnsplit-1.c b/gcc/testsuite/gcc.dg/tree-ssa/fnsplit-1.c new file mode 100644 index 00000000000..0c81d92bfa9 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/fnsplit-1.c @@ -0,0 +1,23 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-fnsplit" } */ +#include +int a[1000]; + +void +t(int a) +{ + if (a) + printf ("I Am Completely Operational,"), + printf ("And All My Circuits Are Functioning Perfectly\n"); +} +int +main(void) +{ + int i; + for (i = 0; i < 1000; i++) + t(a[i]); + return 0; +} +/* { dg-final { scan-tree-dump-times "Splitting function at:" 1 "fnsplit"} } */ + +/* { dg-final { cleanup-tree-dump "fnsplit" } } */