]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
tree-tailcall.c (pass_tail_recursion): Use gate_tail_calls too.
authorEric Botcazou <ebotcazou@adacore.com>
Sun, 23 Apr 2006 18:17:25 +0000 (18:17 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Sun, 23 Apr 2006 18:17:25 +0000 (18:17 +0000)
* tree-tailcall.c (pass_tail_recursion): Use gate_tail_calls too.

From-SVN: r113203

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/sibcall-7.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-1.c
gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-2.c
gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-3.c
gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-4.c
gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-5.c
gcc/tree-tailcall.c

index 5e47265ac29551581e461314443eceb613cd40aa..2df8000c5ac3ee2f6f2f58e1ad0ce2737e39d34e 100644 (file)
@@ -1,3 +1,7 @@
+2006-04-23  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * tree-tailcall.c (pass_tail_recursion): Use gate_tail_calls too.
+
 2006-04-14  Alexey Starovoytov  <alexey.starovoytov@sun.com>
             Eric Botcazou  <ebotcazou@libertysurf.fr>
 
index c5ff475ffb5d09f351de6e35e879ebdac8df9af0..683b73c05466abff808f0b02c6af6a6b6963fd6b 100644 (file)
@@ -1,3 +1,12 @@
+2006-04-23  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * gcc.dg/sibcall-7.c: New test.
+       * gcc.dg/tree-ssa/tailrecursion-1.c: Pass -foptimize-sibling-calls.
+       * gcc.dg/tree-ssa/tailrecursion-2.c: Likewise.
+       * gcc.dg/tree-ssa/tailrecursion-3.c: Likewise.
+       * gcc.dg/tree-ssa/tailrecursion-4.c: Likewise.
+       * gcc.dg/tree-ssa/tailrecursion-5.c: Likewise.
+
 2006-04-19  Volker Reichelt  <reichelt@igpm.rwth-aachen.de>
 
        PR c++/26558
diff --git a/gcc/testsuite/gcc.dg/sibcall-7.c b/gcc/testsuite/gcc.dg/sibcall-7.c
new file mode 100644 (file)
index 0000000..273c2c3
--- /dev/null
@@ -0,0 +1,43 @@
+/* Simple check that tail recursive call optimization is also
+   controlled by -foptimize-sibling-calls.
+
+   Copyright (C) 2006 Free Software Foundation Inc.
+   Original test by Hans-Peter Nilsson  <hp@bitrange.com>  */
+
+/* { dg-do run } */
+/* { dg-options "-O2 -fno-optimize-sibling-calls" } */
+
+
+extern void abort (void);
+
+extern void recurser_void (int);
+extern void track (int);
+
+int main (void)
+{
+  recurser_void (0);
+  return 0;
+}
+
+void recurser_void (int n)
+{
+  if (n == 0 || n == 7)
+    track (n);
+
+  if (n == 10)
+    return;
+
+  recurser_void (n + 1);
+}
+
+void *trackpoint;
+
+void track (int n)
+{
+  char stackpos[1];
+
+  if (n == 0)
+    trackpoint = stackpos;
+  else if (n != 7 || trackpoint == stackpos)
+    abort ();
+}
index af65736661fbfd50ea97f0c99ff584f441263303..8802bc8bc69fa5f9d1b1f8758be41d6f612b32cf 100644 (file)
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O1 -fdump-tree-tailr-details" } */
+/* { dg-options "-O1 -foptimize-sibling-calls -fdump-tree-tailr-details" } */
 int
 t(int a)
 {
index d0bc8b9c23083d9c25ba8fbe1b4fd1130642f2b3..9fe3af9855ad202d8a60cbd6170aee194ebfc321 100644 (file)
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O1 -fdump-tree-tailr-details" } */
+/* { dg-options "-O1 -foptimize-sibling-calls -fdump-tree-tailr-details" } */
 int
 t(char *a)
 {
index 4e0ca133e5db8cff7c974774cb21f3f541e6df10..ca727df391d45f4541928bb5b4f8d51de1d3c932 100644 (file)
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O1 -fdump-tree-tailr-details" } */
+/* { dg-options "-O1 -foptimize-sibling-calls -fdump-tree-tailr-details" } */
 int
 t(int a)
 {
index edab9833f0ffcb97f7160229ccbed32d1b45f677..bb43d76aca9035d1be00a72b4ac10395db2a21a8 100644 (file)
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O1 -fdump-tree-tailr-details" } */
+/* { dg-options "-O1 -foptimize-sibling-calls -fdump-tree-tailr-details" } */
 int
 t(int a)
 {
index 2a0af0a714bd2a8da32c06c49a0647d0e7babd01..53a2cdb15e3647b604178731c489749bd5f0882f 100644 (file)
@@ -1,5 +1,5 @@
 /* { dg-do run } */
-/* { dg-options "-O1 -fdump-tree-optimized" } */
+/* { dg-options "-O1 -foptimize-sibling-calls -fdump-tree-optimized" } */
 
 extern void abort (void);
 extern void exit (int);
index cca99a487f21a294a940a16b2a1c2eb3f1bb7f43..b6cf003b4d24f16a9d0796ed63f4ce4e54c08f0a 100644 (file)
@@ -980,7 +980,7 @@ execute_tail_calls (void)
 struct tree_opt_pass pass_tail_recursion = 
 {
   "tailr",                             /* name */
-  NULL,                                        /* gate */
+  gate_tail_calls,                     /* gate */
   execute_tail_recursion,              /* execute */
   NULL,                                        /* sub */
   NULL,                                        /* next */