combine.c (combine_simplify_rtx): DIV can be treated associatively for floats if...
authorToon Moene <toon@moene.indiv.nluug.nl>
Wed, 18 Jul 2001 05:26:38 +0000 (07:26 +0200)
committerToon Moene <toon@gcc.gnu.org>
Wed, 18 Jul 2001 05:26:38 +0000 (05:26 +0000)
2001-07-18  Toon Moene  <toon@moene.indiv.nluug.nl>

* combine.c (combine_simplify_rtx): DIV can be treated
associatively for floats if unsafe math optimisations are enabled.

From-SVN: r44097

gcc/ChangeLog
gcc/combine.c

index 19e715e0583c2576da4c24685c04bf3d079473b4..8beb99b68e3c3e98542c15a74ac1788571719f5e 100644 (file)
@@ -1,3 +1,8 @@
+2001-07-18  Toon Moene  <toon@moene.indiv.nluug.nl>
+
+       * combine.c (combine_simplify_rtx): DIV can be treated
+       associatively for floats if unsafe math optimisations are enabled.
+
 2001-07-17  Richard Henderson  <rth@redhat.com>
 
        * reload.c (push_secondary_reload): Accept empty-string for ALL_REGS.
index f8394e6c573b80cdf708da0ac6fdf434de337915..b22dd9bb41b26c7c3026d2c7032719f8c6024d39 100644 (file)
@@ -3722,10 +3722,10 @@ combine_simplify_rtx (x, op0_mode, last, in_dest)
   /* If CODE is an associative operation not otherwise handled, see if we
      can associate some operands.  This can win if they are constants or
      if they are logically related (i.e. (a & b) & a).  */
-  if ((code == PLUS || code == MINUS
-       || code == MULT || code == AND || code == IOR || code == XOR
+  if ((code == PLUS || code == MINUS || code == MULT || code == DIV
+       || code == AND || code == IOR || code == XOR
        || code == SMAX || code == SMIN || code == UMAX || code == UMIN)
-      && (INTEGRAL_MODE_P (mode)
+      && ((INTEGRAL_MODE_P (mode) && code != DIV)
          || (flag_unsafe_math_optimizations && FLOAT_MODE_P (mode))))
     {
       if (GET_CODE (XEXP (x, 0)) == code)
@@ -3745,7 +3745,6 @@ combine_simplify_rtx (x, op0_mode, last, in_dest)
            }
          inner = simplify_binary_operation (code == MINUS ? PLUS
                                             : code == DIV ? MULT
-                                            : code == UDIV ? MULT
                                             : code,
                                             mode, inner_op0, inner_op1);