tree-tailcall.c (tree_optimize_tail_calls_1): Use fold_convert, reverting my 2004...
authorNathan Sidwell <nathan@gcc.gnu.org>
Fri, 8 Oct 2004 15:09:16 +0000 (15:09 +0000)
committerNathan Sidwell <nathan@gcc.gnu.org>
Fri, 8 Oct 2004 15:09:16 +0000 (15:09 +0000)
.: * tree-tailcall.c (tree_optimize_tail_calls_1): Use fold_convert,
reverting my 2004-09-07 patch to use build_int_cst.
testsuite:
* gcc.c-torture/compile/acc1.c: New.

From-SVN: r88759

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/compile/acc1.c [new file with mode: 0644]
gcc/tree-tailcall.c

index 161ead26267c7b7fc7837529fc09d0e5e958c0f1..1da3715b99e7d5519de9266ff31fc539b4f96334 100644 (file)
@@ -1,3 +1,8 @@
+2004-10-08  Nathan Sidwell  <nathan@codesourcery.com>
+
+       * tree-tailcall.c (tree_optimize_tail_calls_1): Use fold_convert,
+       reverting my 2004-09-07 patch to use build_int_cst.
+
 2004-10-08  Eric Botcazou  <ebotcazou@libertysurf.fr>
 
        PR target/17245
index e83378b7e89ece137b436e5fa430a02c65984071..d16487d2e0da1f5276b267ca87d5ea879896f3bd 100644 (file)
@@ -1,3 +1,7 @@
+2004-10-08  Nathan Sidwell  <nathan@codesourcery.com>
+
+       * gcc.c-torture/compile/acc1.c: New.
+
 2004-10-08  Andrew Pinski  <pinskia@physics.uc.edu>
 
        * gcc.dg/darwin-longdouble.c: Include stdlib.h and string.h.
@@ -22329,7 +22333,7 @@ Thu Apr 27 15:58:18 MET DST 2000  Jan Hubicka  <jh@suse.cz>
 
        * gcc.c-torture/compile/labels-2.c: New test.
 
-1999-12-27  Martin von Löwis  <loewis@informatik.hu-berlin.de>
+1999-12-27  Martin von Löwis  <loewis@informatik.hu-berlin.de>
 
        * gcc.c-torture/execute/991227-1.c: New test.
 
@@ -22337,7 +22341,7 @@ Thu Apr 27 15:58:18 MET DST 2000  Jan Hubicka  <jh@suse.cz>
 
        * g++.old-deja/g++.pt/instantiate6.C: Remove excess errors XFAIL.
 
-1999-12-21  Martin von Löwis  <loewis@informatik.hu-berlin.de>
+1999-12-21  Martin von Löwis  <loewis@informatik.hu-berlin.de>
 
        * gcc.c-torture/execute/991221-1.c: New test.
 
diff --git a/gcc/testsuite/gcc.c-torture/compile/acc1.c b/gcc/testsuite/gcc.c-torture/compile/acc1.c
new file mode 100644 (file)
index 0000000..206d16b
--- /dev/null
@@ -0,0 +1,21 @@
+/* { dg-options "-O2 -ffast-math" } */
+
+/* Fast maths allows tail recursion to be turned into iteration.  */
+
+double
+foo (int n, double f)
+{
+  if (n == 0)
+    return f;
+  else
+    return f + foo (n - 1, f);
+}
+
+double
+bar (int n, double f)
+{
+  if (n == 0)
+    return f;
+  else
+    return f * bar (n - 1, f);
+}
index 158a2d1d6fb2f2e71086020f344c4b24a9755316..34ac8ee583484f3b94f195d05edeb5d2640e90ef 100644 (file)
@@ -896,7 +896,11 @@ tree_optimize_tail_calls_1 (bool opt_tailcalls)
          add_referenced_tmp_var (tmp);
 
          phi = create_phi_node (tmp, first);
-         add_phi_arg (&phi, build_int_cst (ret_type, 0), EDGE_PRED (first, 0));
+         add_phi_arg (&phi,
+                      /* RET_TYPE can be a float when -ffast-maths is
+                         enabled.  */
+                      fold_convert (ret_type, integer_zero_node),
+                      EDGE_PRED (first, 0));
          a_acc = PHI_RESULT (phi);
        }
 
@@ -908,7 +912,11 @@ tree_optimize_tail_calls_1 (bool opt_tailcalls)
          add_referenced_tmp_var (tmp);
 
          phi = create_phi_node (tmp, first);
-         add_phi_arg (&phi, build_int_cst (ret_type, 1), EDGE_PRED (first, 0));
+         add_phi_arg (&phi,
+                      /* RET_TYPE can be a float when -ffast-maths is
+                         enabled.  */
+                      fold_convert (ret_type, integer_one_node),
+                      EDGE_PRED (first, 0));
          m_acc = PHI_RESULT (phi);
        }
     }