From e8c3ff9712f6a722fb4db2220bfe86f7c5cbdde9 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Sun, 23 Apr 2006 18:14:13 +0000 Subject: [PATCH] tree-tailcall.c (pass_tail_recursion): Use gate_tail_calls too. * tree-tailcall.c (pass_tail_recursion): Use gate_tail_calls too. testsuite/ * 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. From-SVN: r113200 --- gcc/ChangeLog | 4 ++ gcc/testsuite/ChangeLog | 9 ++++ gcc/testsuite/gcc.dg/sibcall-7.c | 43 +++++++++++++++++++ .../gcc.dg/tree-ssa/tailrecursion-1.c | 2 +- .../gcc.dg/tree-ssa/tailrecursion-2.c | 2 +- .../gcc.dg/tree-ssa/tailrecursion-3.c | 2 +- .../gcc.dg/tree-ssa/tailrecursion-4.c | 2 +- .../gcc.dg/tree-ssa/tailrecursion-5.c | 2 +- gcc/tree-tailcall.c | 2 +- 9 files changed, 62 insertions(+), 6 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/sibcall-7.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 08fc7c0197e..52485b6a601 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2006-04-23 Eric Botcazou + + * tree-tailcall.c (pass_tail_recursion): Use gate_tail_calls too. + 2006-04-23 Mark Mitchell PR c++/26534 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f0c3a5d5e0a..7714bc2ee78 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,12 @@ +2006-04-23 Eric Botcazou + + * 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-23 Mark Mitchell PR c++/26534 diff --git a/gcc/testsuite/gcc.dg/sibcall-7.c b/gcc/testsuite/gcc.dg/sibcall-7.c new file mode 100644 index 00000000000..273c2c36d21 --- /dev/null +++ b/gcc/testsuite/gcc.dg/sibcall-7.c @@ -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 */ + +/* { 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 (); +} diff --git a/gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-1.c b/gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-1.c index af65736661f..8802bc8bc69 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-1.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-1.c @@ -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) { diff --git a/gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-2.c b/gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-2.c index d0bc8b9c230..9fe3af9855a 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-2.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-2.c @@ -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) { diff --git a/gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-3.c b/gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-3.c index 4e0ca133e5d..ca727df391d 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-3.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-3.c @@ -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) { diff --git a/gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-4.c b/gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-4.c index edab9833f0f..bb43d76aca9 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-4.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-4.c @@ -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) { diff --git a/gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-5.c b/gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-5.c index 2a0af0a714b..53a2cdb15e3 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-5.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-5.c @@ -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); diff --git a/gcc/tree-tailcall.c b/gcc/tree-tailcall.c index bdc5c95de88..fb9948e672d 100644 --- a/gcc/tree-tailcall.c +++ b/gcc/tree-tailcall.c @@ -1017,7 +1017,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 */ -- 2.30.2