From: clm Date: Mon, 5 Jan 2015 23:42:27 +0000 (+0000) Subject: 2015-01-05 Radovan Obradovic X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=def3bf8c16bab6d5d3e3aa32c63ca025e59af3af;p=thirdparty%2Fgcc.git 2015-01-05 Radovan Obradovic PR rtl-optimization/64287 gcc/ * toplev.c (HAVE_epilogue, HAVE_prologue): Provide default. (process_options): Disable flag_ipa_ra if profiling. gcc/testsuite/ * gcc.dg/aru-2.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@219208 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 24bcddf3d705..a50e56a089a5 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2015-01-05 Radovan Obradovic + + PR rtl-optimization/64287 + * toplev.c (HAVE_epilogue, HAVE_prologue): Provide default. + (process_options): Disable flag_ipa_ra if profiling. + 2015-01-05 Eric Botcazou * config/nds32/nds32-peephole2.md: Do not mention define_peephole. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8633d7e7699e..cac2f79d40aa 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-01-05 Radovan Obradovic + + PR rtl-optimization/64287 + * gcc.dg/aru-2.c: New test. + 2015-01-05 Jakub Jelinek PR sanitizer/64344 diff --git a/gcc/testsuite/gcc.dg/aru-2.c b/gcc/testsuite/gcc.dg/aru-2.c new file mode 100644 index 000000000000..efd1f0189b72 --- /dev/null +++ b/gcc/testsuite/gcc.dg/aru-2.c @@ -0,0 +1,26 @@ +/* { dg-do run } */ +/* { dg-options "-O2 -pg" } */ + +static int __attribute__((noinline)) +bar (int x) +{ + return x + 3; +} + +int __attribute__((noinline)) +foo (int y0, int y1, int y2, int y3, int y4) { + int r = 0; + r += bar (r + y4); + r += bar (r + y3); + r += bar (r + y2); + r += bar (r + y1); + r += bar (r + y0); + return r; +} + +int +main (void) +{ + int z = foo (0, 1, 2, 3, 4); + return !(z == 191); +} diff --git a/gcc/toplev.c b/gcc/toplev.c index 08050e7dd268..1ad76f2e590b 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -113,6 +113,13 @@ along with GCC; see the file COPYING3. If not see declarations for e.g. AIX 4.x. */ #endif +#ifndef HAVE_epilogue +#define HAVE_epilogue 0 +#endif +#ifndef HAVE_prologue +#define HAVE_prologue 0 +#endif + #include static void general_init (const char *); @@ -1634,6 +1641,11 @@ process_options (void) /* Save the current optimization options. */ optimization_default_node = build_optimization_node (&global_options); optimization_current_node = optimization_default_node; + + /* Disable use caller save optimization if profiler is active or port + does not emit prologue and epilogue as RTL. */ + if (profile_flag || !HAVE_prologue || !HAVE_epilogue) + flag_ipa_ra = 0; } /* This function can be called multiple times to reinitialize the compiler