diff options
author | Zdenek Dvorak <rakdver@atrey.karlin.mff.cuni.cz> | 2004-03-03 04:23:40 +0000 |
---|---|---|
committer | Jeff Law <law@redhat.com> | 2004-03-03 04:23:40 +0000 |
commit | 757618d5d27208d04750e436f342f0fa89faa3e6 (patch) | |
tree | a87a2083862586eac25239ce3932e8fe398a4179 /gcc/testsuite | |
parent | 4542a0477b5aa525960a9f1da0c03ca80dfc275c (diff) |
* testsuite/gcc.dg/tree-ssa/tailrecursion-5.c: New test.
git-svn-id: https://gcc.gnu.org/svn/gcc/branches/tree-ssa-20020619-branch@78816 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/testsuite')
-rw-r--r-- | gcc/testsuite/ChangeLog.tree-ssa | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-5.c | 72 |
2 files changed, 76 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog.tree-ssa b/gcc/testsuite/ChangeLog.tree-ssa index 666ae8adc48..1cee86a6941 100644 --- a/gcc/testsuite/ChangeLog.tree-ssa +++ b/gcc/testsuite/ChangeLog.tree-ssa @@ -1,3 +1,7 @@ +2004-03-02 Zdenek Dvorak <rakdver@atrey.karlin.mff.cuni.cz> + + * gcc.dg/tree-ssa/tailrecursion-5.c: New test. + 2004-03-02 Diego Novillo <dnovillo@redhat.com> * testsuite/gcc.dg/tree-ssa/20030815-1.c: Expect 1 type cast. diff --git a/gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-5.c b/gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-5.c new file mode 100644 index 00000000000..2940a5019bd --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-5.c @@ -0,0 +1,72 @@ +/* { dg-do run } */ +/* { dg-options "-O1 -fdump-tree-optimized" } */ + +int sum (int n) +{ + if (n == 0) + return 0; + + return n + sum (n - 1); +} + +int fac (int n) +{ + if (n == 0) + return 1; + + return n * fac (n - 1); +} + +int sq_sum (int n) +{ + if (n == 0) + return 0; + + return n * n + sq_sum (n - 1); +} + +int pow2m1 (int n) +{ + if (n == 0) + return 0; + + return 2 * pow2m1 (n - 1) + 1; +} + +int fib (int n) +{ + if (n <= 1) + return 1; + + return fib (n - 2) + fib (n - 1); +} + +int main(void) +{ + if (sum (5) != 15) + abort (); + + if (fac (5) != 120) + abort (); + + if (sq_sum (5) != 55) + abort (); + + if (pow2m1 (5) != 31) + abort (); + + if (fib (5) != 8) + abort (); + + exit (0); +} + +/* There is one call of sum in main and then 2 instances of the word in + ;; Function sum (sum) and one in the function header. */ +/* { dg-final { scan-tree-dump-times "\\msum\\M" 4 "optimized"} } */ +/* { dg-final { scan-tree-dump-times "\\mfac\\M" 4 "optimized"} } */ +/* { dg-final { scan-tree-dump-times "\\msq_sum\\M" 4 "optimized"} } */ +/* { dg-final { scan-tree-dump-times "\\mpow2m1\\M" 4 "optimized"} } */ + +/* There is one recursive call to fib. */ +/* { dg-final { scan-tree-dump-times "\\mfib\\M" 5 "optimized"} } */ |