fixed -ffinite-math-only A-A missing optimisation
Co-Authored-By: Richard Guenther <rguenther@suse.de> From-SVN: r127705
This commit is contained in:
parent
fcdb5d68de
commit
81d2fb0294
5 changed files with 25 additions and 10 deletions
|
@ -1,3 +1,9 @@
|
|||
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>
|
||||
|
||||
PR rtl-optimization/32557
|
||||
|
|
|
@ -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
|
||||
is volatile. */
|
||||
|
||||
if ((! FLOAT_TYPE_P (type)
|
||||
|| (flag_unsafe_math_optimizations
|
||||
&& !HONOR_NANS (TYPE_MODE (type))
|
||||
&& !HONOR_INFINITIES (TYPE_MODE (type))))
|
||||
if ((!FLOAT_TYPE_P (type) || !HONOR_NANS (TYPE_MODE (type)))
|
||||
&& operand_equal_p (arg0, arg1, 0))
|
||||
return fold_convert (type, integer_zero_node);
|
||||
|
||||
|
|
|
@ -1769,14 +1769,10 @@ simplify_binary_operation_1 (enum rtx_code code, enum machine_mode mode,
|
|||
case MINUS:
|
||||
/* 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
|
||||
will treat it as zero with -funsafe-math-optimizations and
|
||||
-ffinite-math-only. */
|
||||
will treat it as zero with -ffinite-math-only. */
|
||||
if (rtx_equal_p (trueop0, trueop1)
|
||||
&& ! side_effects_p (op0)
|
||||
&& (! FLOAT_MODE_P (mode)
|
||||
|| (flag_unsafe_math_optimizations
|
||||
&& !HONOR_NANS (mode)
|
||||
&& !HONOR_INFINITIES (mode))))
|
||||
&& (!FLOAT_MODE_P (mode) || !HONOR_NANS (mode)))
|
||||
return CONST0_RTX (mode);
|
||||
|
||||
/* Change subtraction from zero into negation. (0 - x) is the
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2007-08-21 Christian Bruel <christian.bruel@st.com>
|
||||
|
||||
* gcc.dg/fold-sub.c: New test.
|
||||
|
||||
2007-08-22 Uros Bizjak <ubizjak@gmail.com>
|
||||
|
||||
* gcc.dg/20000724-1.c, gcc.dg/980312-1.c, gcc.dg/980313-1.c,
|
||||
|
|
12
gcc/testsuite/gcc.dg/fold-sub.c
Normal file
12
gcc/testsuite/gcc.dg/fold-sub.c
Normal file
|
@ -0,0 +1,12 @@
|
|||
/* { 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" } } */
|
Loading…
Add table
Reference in a new issue