summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorghazi <ghazi@138bc75d-0d04-0410-961f-82ee72b054a4>2007-06-12 16:28:01 +0000
committerghazi <ghazi@138bc75d-0d04-0410-961f-82ee72b054a4>2007-06-12 16:28:01 +0000
commit8375344417d39f567bf83e2c1b3a5d941bc1c111 (patch)
treeb55b0e708825d64adcda26d97ed19745dc046ede /gcc
parentf7074c966846b112edb6054d5f68540667dd9d3a (diff)
downloadgcc-8375344417d39f567bf83e2c1b3a5d941bc1c111.tar.gz
* fold-const.c (fold_binary): Guard (X-X) -> 0 transformation
with !HONOR_NANS and !HONOR_INFINITIES. * simplify-rtx.c (simplify_binary_operation_1): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@125652 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/fold-const.c5
-rw-r--r--gcc/simplify-rtx.c8
3 files changed, 16 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f95014c3d69..616bc5097e9 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2007-06-12 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * fold-const.c (fold_binary): Guard (X-X) -> 0 transformation
+ with !HONOR_NANS and !HONOR_INFINITIES.
+ * simplify-rtx.c (simplify_binary_operation_1): Likewise.
+
2007-06-12 Tristan Gingold <gingold@adacore.com>
* gcov.c: Comments updated.
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index 06b7c74a2b5..814d033ffc4 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -9585,7 +9585,10 @@ 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)
+ if ((! FLOAT_TYPE_P (type)
+ || (flag_unsafe_math_optimizations
+ && !HONOR_NANS (TYPE_MODE (type))
+ && !HONOR_INFINITIES (TYPE_MODE (type))))
&& operand_equal_p (arg0, arg1, 0))
return fold_convert (type, integer_zero_node);
diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c
index cb79aa93d70..ade3968d0e6 100644
--- a/gcc/simplify-rtx.c
+++ b/gcc/simplify-rtx.c
@@ -1772,10 +1772,14 @@ 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. */
+ will treat it as zero with -funsafe-math-optimizations and
+ -ffinite-math-only. */
if (rtx_equal_p (trueop0, trueop1)
&& ! side_effects_p (op0)
- && (! FLOAT_MODE_P (mode) || flag_unsafe_math_optimizations))
+ && (! FLOAT_MODE_P (mode)
+ || (flag_unsafe_math_optimizations
+ && !HONOR_NANS (mode)
+ && !HONOR_INFINITIES (mode))))
return CONST0_RTX (mode);
/* Change subtraction from zero into negation. (0 - x) is the