<div class="gmail_quote"><div>Hi Steve, Chandler, Hal,</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><div>That said, I don't love overloading excess-precision for this, even if fma is formally a special case of excess precision, mostly because excess precision has even more bizarre corner cases -- it leads to such monstrosities as cos(x) != cos(x).</div>
</div></blockquote><div> </div><div>Sounds like -fexcess-precision is too blunt of an instrument for this. Should setting -fexcess-precision=fast enable this optimization though?</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div style="word-wrap:break-word"><div class="im"><div><div><font face="arial, helvetica, sans-serif"></font></div><blockquote type="cite"><div>If we're not going to use excess-precision, I would suggest a name that is completely explicit; something along the lines of -fallow-fma-anywhere or -fallow-fma-across-expressions (those might be too wordy).</div>
</blockquote></div></div></div></blockquote><div>"-fallow-fma-anywhere" sounds fine to me if this flag is going to be targeted specifically at FMA formation. Does anybody have any objections to this?</div><div><br>
</div><div>Should this flag, whatever it's eventually called, have a "never-form" mode that over-rides FP_CONTRACT and prevents any FMA formation? That seems like it could be useful, if only for debugging. FP_CONTRACT doesn't guarantee any fusing, so a flag that disabled any fusing wouldn't violate FP_CONTRACT semantics, it would just provide a baseline with no fusing carried out. This is what I had in mind when I penned the comments that you referred to Hal.</div>
<div><br></div><div>In that case an alternative flag could be:</div><div><br></div><div>"-fform-fma={anywhere,standard,never}"</div><div><br></div><div>Cheers,</div><div>Lang.</div></div>