re PR rtl-optimization/64287 (Disable -fuse-caller-save when -pg is active)
authorRadovan Obradovic <radovan.obradovic@imgtec.com>
Mon, 5 Jan 2015 23:42:27 +0000 (23:42 +0000)
committerCatherine Moore <clm@gcc.gnu.org>
Mon, 5 Jan 2015 23:42:27 +0000 (18:42 -0500)
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

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/aru-2.c [new file with mode: 0644]
gcc/toplev.c

index 24bcddf3d705bdd7c142f261fcf244a3b2dd2844..a50e56a089a5e24c95022eec945541e953a10bdd 100644 (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.
index 8633d7e7699e0b6a3a5177d7ed29edc066fc056a..cac2f79d40aa08aff6f06a9899be2de0bfab23f7 100644 (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
diff --git a/gcc/testsuite/gcc.dg/aru-2.c b/gcc/testsuite/gcc.dg/aru-2.c
new file mode 100644 (file)
index 0000000..efd1f01
--- /dev/null
@@ -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);
+}
index 08050e7dd2682d3d2d376e1de470cbccb1eafe3f..1ad76f2e590bf444108f0cacf676954c8e56c72d 100644 (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