From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jan Hubicka To: Toon Moene Cc: Joern Rennecke , Jan Hubicka , gcc@gcc.gnu.org Subject: What is acceptable for -ffast-math? (Was: associative law in combine) Date: Wed, 18 Jul 2001 01:47:00 -0000 Message-id: <20010718104420.E29584@atrey.karlin.mff.cuni.cz> References: <200107172259.f6HMxYU31134@phal.cambridge.redhat.com> <3B55427F.4790646A@moene.indiv.nluug.nl> X-SW-Source: 2001-07/msg01251.html > Joern Rennecke wrote: > > > > > Jan Hubicka wrote: > > > > OK, so to speak loud - where is the proper place to convert > > > a/b/c to a/(b*c) at tree level. fold-const or some other? > > > > Only if b and c are constants, the operations are floating point, and > > b can be multiplied with c without loss of precision or overflow. > > Or if b and/or c is a power of two, and b can be multiplied with c without > > overflow. > > Joern is right, Jan. One can argue about the loss of precision (under > unsafe math optimisations), but not the overflow. I overlooked that > issue in my reply to you. Because overflow can only be determined at > compile time with constants, this conversion cannot be right for > variables. OK, I believe, that our concept of unsafe_math_optimizations allows such transformation, but I see, that the line between acceptable unsafe_math_optimization and unacceptable one is pretty fragine. In case -ffast-math is not enought to ask for such transformation, we probably should invent switch for that. This change (plus the other changes to avoid divisions) seems to play important role on optimizing some FP software (due to extreme cost of fp division). Honza