This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH, Fix PR 31098] a*C == b*C is not foldded to a == b with --fast-math/floating point



2007-10-07 Pranav Bhandarkar <pranav.bhandarkar@celunite.com>

   * fold-const.c (fold_comparison): fold (a OP c) CMP (b OP c) -> a
   CMP b, iff c is not zero
   * testsuite/pr31098.c: New

+      /* (a OP c) CMP (b OP c) -> a CMP b, iff c is not zero */
+      if (fast_math_flags_set_p () && (TREE_CODE (arg0) == TREE_CODE (arg1))

Do we really need all "fast math" flags set to enable this opt? E.g. surely we don't care about !flag_signed_zeros since you disable the code when "c" is zero. Perhaps other sub-bits of "fast math" can also be ignored for this purpose.

flag_unsafe_math_optimizations == 0 should disable the optimization, since ((float)11184813.0 * 3) == ((float)11184814.0 * 3), and ((float)16777215.0 + 2) == ((float)16777214.0 + 2). Same for HONOR_INFINITIES, and for flag_trapping_math == 1.


It is not necessary to check HONOR_NANS and HONOR_SNANS, since neither is set for flag_trapping_math == 0.

Paolo


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]