combine.c (simplify_if_then_else): Don't convert a == b ? b ...
authorJakub Jelinek <jakub@redhat.com>
Mon, 11 Sep 2000 20:20:32 +0000 (22:20 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Mon, 11 Sep 2000 20:20:32 +0000 (22:20 +0200)
* combine.c (simplify_if_then_else): Don't convert a == b ? b : a
to a if the comparison is floating mode and not -ffast-math.
* simplify-rtx.c (simplify_ternary_operation): Likewise.

From-SVN: r36326

gcc/ChangeLog
gcc/combine.c
gcc/simplify-rtx.c

index 0aa4fd4..dd8593e 100644 (file)
@@ -1,3 +1,9 @@
+2000-09-11  Jakub Jelinek  <jakub@redhat.com>
+
+       * combine.c (simplify_if_then_else): Don't convert a == b ? b : a
+       to a if the comparison is floating mode and not -ffast-math.
+       * simplify-rtx.c (simplify_ternary_operation): Likewise.
+
 Mon Sep 11 20:07:48 2000  J"orn Rennecke <amylaar@redhat.co.uk>
 
        * sh.h (INITIALIZE_TRAMPOLINE): Remove stray call to
index 053b420..478aab2 100644 (file)
@@ -4703,10 +4703,12 @@ simplify_if_then_else (x)
 
   /* Convert a == b ? b : a to "a".  */
   if (true_code == EQ && ! side_effects_p (cond)
+      && (! FLOAT_MODE_P (mode) || flag_fast_math)
       && rtx_equal_p (XEXP (cond, 0), false)
       && rtx_equal_p (XEXP (cond, 1), true))
     return false;
   else if (true_code == NE && ! side_effects_p (cond)
+          && (! FLOAT_MODE_P (mode) || flag_fast_math)
           && rtx_equal_p (XEXP (cond, 0), true)
           && rtx_equal_p (XEXP (cond, 1), false))
     return true;
index 701b7ba..0091d72 100644 (file)
@@ -1976,10 +1976,12 @@ simplify_ternary_operation (code, mode, op0_mode, op0, op1, op2)
 
       /* Convert a == b ? b : a to "a".  */
       if (GET_CODE (op0) == NE && ! side_effects_p (op0)
+         && (! FLOAT_MODE_P (mode) || flag_fast_math)
          && rtx_equal_p (XEXP (op0, 0), op1)
          && rtx_equal_p (XEXP (op0, 1), op2))
        return op1;
       else if (GET_CODE (op0) == EQ && ! side_effects_p (op0)
+         && (! FLOAT_MODE_P (mode) || flag_fast_math)
          && rtx_equal_p (XEXP (op0, 1), op1)
          && rtx_equal_p (XEXP (op0, 0), op2))
        return op2;