diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 2869df4370be13ec0d34e9c4704c9b4cbd452d4c..ef86e1338bfb2712e6c1b5485fa9783aa3e924f8 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2004-12-26  Richard Henderson  <rth@redhat.com>
+
+	* simplify-rtx.c (simplify_relational_operation_1): Don't simplify
+	plus/minus across EQ for floating-point.
+	
 2004-12-26  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
 
 	PR target/17643
diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c
index 8d7cb3ff247e7a106fa5e26f91d8a804a4398616..34b0ab8fe2000ca9dc3ce60b0de8aacbfd53aae0 100644
--- a/gcc/simplify-rtx.c
+++ b/gcc/simplify-rtx.c
@@ -2807,7 +2807,8 @@ simplify_relational_operation_1 (enum rtx_code code, enum machine_mode mode,
   if ((code == EQ || code == NE)
       && (op0code == PLUS || op0code == MINUS)
       && CONSTANT_P (op1)
-      && CONSTANT_P (XEXP (op0, 1)))
+      && CONSTANT_P (XEXP (op0, 1))
+      && (INTEGRAL_MODE_P (cmp_mode) || flag_unsafe_math_optimizations))
     {
       rtx x = XEXP (op0, 0);
       rtx c = XEXP (op0, 1);