diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2006-04-23 18:14:13 +0000 |
---|---|---|
committer | Eric Botcazou <ebotcazou@gcc.gnu.org> | 2006-04-23 18:14:13 +0000 |
commit | e8c3ff9712f6a722fb4db2220bfe86f7c5cbdde9 (patch) | |
tree | d1a7e6e80a5fc148f5dff78d1c5b732f515bb61a | |
parent | 38a4afeecdf392267ff73a27a69f458b5d8b424c (diff) | |
download | gcc-e8c3ff9712f6a722fb4db2220bfe86f7c5cbdde9.zip gcc-e8c3ff9712f6a722fb4db2220bfe86f7c5cbdde9.tar.gz gcc-e8c3ff9712f6a722fb4db2220bfe86f7c5cbdde9.tar.bz2 |
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
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/sibcall-7.c | 43 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-1.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-2.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-3.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-4.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-5.c | 2 | ||||
-rw-r--r-- | gcc/tree-tailcall.c | 2 |
9 files changed, 62 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 08fc7c0..52485b6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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-23 Mark Mitchell <mark@codesourcery.com> PR c++/26534 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f0c3a5d..7714bc2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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-23 Mark Mitchell <mark@codesourcery.com> 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 0000000..273c2c3 --- /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 <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 (); +} diff --git a/gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-1.c b/gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-1.c index af65736..8802bc8 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 d0bc8b9..9fe3af9 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 4e0ca13..ca727df 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 edab983..bb43d76 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 2a0af0a..53a2cdb 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 bdc5c95..fb9948e 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 */ |