Commit 81d2fb02 by Christian Bruel Committed by Christian Bruel

fixed -ffinite-math-only A-A missing optimisation


Co-Authored-By: Richard Guenther <rguenther@suse.de>

From-SVN: r127705
parent fcdb5d68
2007-02-16 Christian Bruel <christian.bruel@st.com>
Richard Guenther <rguenther@suse.de>
* fold-const.c (fold_binary): Optimize A-A if -ffinite-math-only.
* simplify_rtx (simplify_binary_operation_1): Likewise.
2007-08-22 Rask Ingemann Lambertsen <rask@sygehus.dk> 2007-08-22 Rask Ingemann Lambertsen <rask@sygehus.dk>
PR rtl-optimization/32557 PR rtl-optimization/32557
......
...@@ -10149,10 +10149,7 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1) ...@@ -10149,10 +10149,7 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1)
Also note that operand_equal_p is always false if an operand Also note that operand_equal_p is always false if an operand
is volatile. */ is volatile. */
if ((! FLOAT_TYPE_P (type) if ((!FLOAT_TYPE_P (type) || !HONOR_NANS (TYPE_MODE (type)))
|| (flag_unsafe_math_optimizations
&& !HONOR_NANS (TYPE_MODE (type))
&& !HONOR_INFINITIES (TYPE_MODE (type))))
&& operand_equal_p (arg0, arg1, 0)) && operand_equal_p (arg0, arg1, 0))
return fold_convert (type, integer_zero_node); return fold_convert (type, integer_zero_node);
......
...@@ -1769,14 +1769,10 @@ simplify_binary_operation_1 (enum rtx_code code, enum machine_mode mode, ...@@ -1769,14 +1769,10 @@ simplify_binary_operation_1 (enum rtx_code code, enum machine_mode mode,
case MINUS: case MINUS:
/* We can't assume x-x is 0 even with non-IEEE floating point, /* We can't assume x-x is 0 even with non-IEEE floating point,
but since it is zero except in very strange circumstances, we but since it is zero except in very strange circumstances, we
will treat it as zero with -funsafe-math-optimizations and will treat it as zero with -ffinite-math-only. */
-ffinite-math-only. */
if (rtx_equal_p (trueop0, trueop1) if (rtx_equal_p (trueop0, trueop1)
&& ! side_effects_p (op0) && ! side_effects_p (op0)
&& (! FLOAT_MODE_P (mode) && (!FLOAT_MODE_P (mode) || !HONOR_NANS (mode)))
|| (flag_unsafe_math_optimizations
&& !HONOR_NANS (mode)
&& !HONOR_INFINITIES (mode))))
return CONST0_RTX (mode); return CONST0_RTX (mode);
/* Change subtraction from zero into negation. (0 - x) is the /* Change subtraction from zero into negation. (0 - x) is the
......
2007-08-21 Christian Bruel <christian.bruel@st.com>
* gcc.dg/fold-sub.c: New test.
2007-08-22 Uros Bizjak <ubizjak@gmail.com> 2007-08-22 Uros Bizjak <ubizjak@gmail.com>
* gcc.dg/20000724-1.c, gcc.dg/980312-1.c, gcc.dg/980313-1.c, * gcc.dg/20000724-1.c, gcc.dg/980312-1.c, gcc.dg/980313-1.c,
/* { dg-do compile } */
/* { dg-options "-ffinite-math-only -fdump-tree-gimple" } */
float f(float x)
{
return x - x;
}
/* Substraction should be turned into 0. */
/* { dg-final { scan-tree-dump-not " - " "gimple" } } */
/* { dg-final { cleanup-tree-dump "gimple" } } */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment