2008-02-20 Richard Guenther <rguenther@suse.de>
* fold-const.c (split_tree): Associate floatig-point expressions
if flag_associative_math is set.
* gcc.dg/fold-reassoc-1.c: New testcase.
* gcc.dg/tree-ssa/recip-3.c: Adjust to not compute d/d.
From-SVN: r132481
+2008-02-20 Richard Guenther <rguenther@suse.de>
+
+ * fold-const.c (split_tree): Associate floatig-point expressions
+ if flag_associative_math is set.
+
2008-02-20 Richard Guenther <rguenther@suse.de>
* tree.h (fold_real_zero_addition_p): Declare.
|| TREE_CODE (in) == FIXED_CST)
*litp = in;
else if (TREE_CODE (in) == code
- || (! FLOAT_TYPE_P (TREE_TYPE (in))
+ || ((! FLOAT_TYPE_P (TREE_TYPE (in)) || flag_associative_math)
&& ! SAT_FIXED_POINT_TYPE_P (TREE_TYPE (in))
/* We can associate addition and subtraction together (even
though the C standard doesn't say so) for integers because
+2008-02-20 Richard Guenther <rguenther@suse.de>
+
+ * gcc.dg/fold-reassoc-1.c: New testcase.
+ * gcc.dg/tree-ssa/recip-3.c: Adjust to not compute d/d.
+
2008-02-20 Richard Guenther <rguenther@suse.de>
* gcc.dg/tree-ssa/reassoc-13.c: New testcase.
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-O -ffast-math -fdump-tree-original" } */
+
+double foo (double x)
+{
+ return (x + 0.5 - x - 0.5);
+}
+
+/* { dg-final { scan-tree-dump "return 0.0;" "original" } } */
+/* { dg-final { cleanup-tree-dump "original" } } */
int i;
double E, W, P, d;
- W = 1.;
+ W = 1.1;
d = 2.*e;
E = 1. - d;