Patch gcc-4.0 should not apply mathematical associative rules for addition or multiplication

Gabriel Dos Reis gdr@cs.tamu.edu
Tue Oct 5 21:05:00 GMT 2004


Geoff Keating <geoffk@geoffk.org> writes:

| On 05/10/2004, at 1:04 PM, Fariborz Jahanian wrote:
| 
| >>> +            && (code == MULT_EXPR || code == PLUS_EXPR)
| >>> +            && FLOAT_TYPE_P (TREE_TYPE (exp)));
| >>
| >> This function appears to disallow folding
| >>
| >> (x * 2.0) * 2.0
| >>
| >> into
| >>
| >> x * 4.0
| >>
| >> which seems to me to be valid.
| >
| > Wording of ANSIC disallows such foldings even if it is safe sometimes.
| 
| Could you explain why you think the standard says this?  The quote you
| gave said "In the following fragment, rearrangements suggested by
| mathematical rules for real numbers are often not valid" but it did
| not say that they were *always* not valid.

But it does not say they are always valid either.

I'm having real trouble following your logic.

We apply transformations under the name of optimizations only when we
know that they are always valid under the usual conditions.  Here,
the reassociation is a general unsafe transformation for floating
point data type.

-- Gaby



More information about the Gcc-patches mailing list