re PR rtl-optimization/64287 (Disable -fuse-caller-save when -pg is active)

2015-01-05  Radovan Obradovic  <radovan.obradovic@imgtec.com>

	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.

From-SVN: r219208
This commit is contained in:
Radovan Obradovic 2015-01-05 23:42:27 +00:00 committed by Catherine Moore
parent dd1ca4c209
commit b176bb73b4
4 changed files with 49 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2015-01-05 Radovan Obradovic <radovan.obradovic@imgtec.com>
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 <ebotcazou@adacore.com>
* config/nds32/nds32-peephole2.md: Do not mention define_peephole.

View File

@ -1,3 +1,8 @@
2015-01-05 Radovan Obradovic <radovan.obradovic@imgtec.com>
PR rtl-optimization/64287
* gcc.dg/aru-2.c: New test.
2015-01-05 Jakub Jelinek <jakub@redhat.com>
PR sanitizer/64344

View File

@ -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);
}

View File

@ -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 <new>
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