On 25 October 2011 16:45, Joseph S. Myers <jos...@codesourcery.com> wrote: > On Tue, 25 Oct 2011, Frederic Riss wrote: > Contracting (which is independent from excess precision) is controlled by > -ffp-contract. This can operate at the very latest at the GIMPLE level > (it needs to know about original expression boundaries to operate > correctly); by the time you get to RTL the relevant information is long > gone and you can't transform between the two patterns you give. > -ffp-contract=on is actually an alias for -ffp-contract=off because of > lack of expression boundary information.
When I read the paragraph on expression contraction, it seems that a lot of liberty is left to the implementation wrt the kind of contraction it does. The footnotes even talk about different accuracy, loss of predictability and fast machine specific instructions. I don't see what would prevent a conformant compiler to 'contract' the discussed patterns into a widenning float multiply, without taking care of initial operator's boundaries. Note that I'm not pleading for any change, I'm just trying to understand where my reading of the standard is wrong and/or what motivates the corresponding implementation decisions in GCC. Many thanks, Fred