<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<div>
<div></div>
<div><font style="color:#333333"><i>Sent from my Verizon Wireless 4G LTE DROID</i></font></div>
<div><font style="color:#333333"><i>On Nov 17, 2016 5:53 PM, Mehdi Amini <</i></font><a href="mailto:mehdi.amini@apple.com"><font style="color:#333333"><i>mehdi.amini@apple.com</i></font></a><font style="color:#333333"><i>> wrote:</i></font></div>
<div><font style="color:#333333"><i>></i></font></div>
<div><font style="color:#333333"><i>></i></font></div>
<div><font style="color:#333333"><i>>> On Nov 17, 2016, at 4:33 PM, Hal Finkel <</i></font><a href="mailto:hfinkel@anl.gov"><font style="color:#333333"><i>hfinkel@anl.gov</i></font></a><font style="color:#333333"><i>> wrote:</i></font></div>
<div><font style="color:#333333"><i>>></i></font></div>
<div><font style="color:#333333"><i>>></i></font></div>
<div><font style="color:#333333"><i>>> ________________________________</i></font></div>
<div><font style="color:#333333"><i>>>></i></font></div>
<div><font style="color:#333333"><i>>>> From: "Warren Ristow" <</i></font><a href="mailto:warren.ristow@sony.com"><font style="color:#333333"><i>warren.ristow@sony.com</i></font></a><font style="color:#333333"><i>></i></font></div>
<div><font style="color:#333333"><i>>>> To: "Sanjay Patel" <</i></font><a href="mailto:spatel@rotateright.com"><font style="color:#333333"><i>spatel@rotateright.com</i></font></a><font style="color:#333333"><i>>, "cfe-dev" <</i></font><a href="mailto:cfe-dev@lists.llvm.org"><font style="color:#333333"><i>cfe-dev@lists.llvm.org</i></font></a><font style="color:#333333"><i>>,
 "llvm-dev" <</i></font><a href="mailto:llvm-dev@lists.llvm.org"><font style="color:#333333"><i>llvm-dev@lists.llvm.org</i></font></a><font style="color:#333333"><i>></i></font></div>
<div><font style="color:#333333"><i>>>> Cc: "Nicolai Hähnle" <</i></font><a href="mailto:nhaehnle@gmail.com"><font style="color:#333333"><i>nhaehnle@gmail.com</i></font></a><font style="color:#333333"><i>>, "Hal Finkel" <</i></font><a href="mailto:hfinkel@anl.gov"><font style="color:#333333"><i>hfinkel@anl.gov</i></font></a><font style="color:#333333"><i>>,
 "Mehdi Amini" <</i></font><a href="mailto:mehdi.amini@apple.com"><font style="color:#333333"><i>mehdi.amini@apple.com</i></font></a><font style="color:#333333"><i>>, "andrew kaylor" <</i></font><a href="mailto:andrew.kaylor@intel.com"><font style="color:#333333"><i>andrew.kaylor@intel.com</i></font></a><font style="color:#333333"><i>></i></font></div>
<div><font style="color:#333333"><i>>>> Sent: Thursday, November 17, 2016 5:58:58 PM</i></font></div>
<div><font style="color:#333333"><i>>>> Subject: RE: what does -ffp-contract=fast allow?</i></font></div>
<div><font style="color:#333333"><i>>>></i></font></div>
<div><font style="color:#333333"><i>>>> > Is this a bug? We transformed the original expression into:</i></font></div>
<div><font style="color:#333333"><i>>>> > x * y + x</i></font></div>
<div><font style="color:#333333"><i>>>></i></font></div>
<div><font style="color:#333333"><i>>>> I’d say yes, it’s a bug.</i></font></div>
<div><font style="color:#333333"><i>>>></i></font></div>
<div><font style="color:#333333"><i>>>>  </i></font></div>
<div><font style="color:#333333"><i>>>></i></font></div>
<div><font style="color:#333333"><i>>>> Unless ‑ffast‑math is used (or some appropriate subset that gives us leeway, like ‑fno‑honor‑infinities or ‑fno‑honor‑nans, or somesuch), the re-association isn’t allowed, and that blocks the madd contraction.</i></font></div>
<div><font style="color:#333333"><i>>></i></font></div>
<div><font style="color:#333333"><i>>> I agree. FP contraction alone only allows us to do x*y+z -> fma(x,y,z).</i></font></div>
<div><font style="color:#333333"><i>></i></font></div>
<div><font style="color:#333333"><i>></i></font></div>
<div><font style="color:#333333"><i>> I agree too, but the more difficult question is "which flags are needed here?”</i></font></div>
<div><font style="color:#333333"><i>> Would FPContract + no-inf be enough? If not why and how to document it?</i></font></div>
<div><font style="color:#333333"><i><br>
</i></font></div>
<div><font style="color:#333333"><i>I think that the relevant question is: Is the contracted form more precise for all inputs (or the same precision as the original)? If so, then this should be allowed with just fp-contract+no-inf. Otherwise, more is required.</i></font></div>
<div><font style="color:#333333"><i><br>
</i></font></div>
<div><font style="color:#333333"><i>-Hal</i></font></div>
<div><font style="color:#333333"><i><br>
</i></font></div>
<div><font style="color:#333333"><i>></i></font></div>
<div><font style="color:#333333"><i>></i></font></div>
<div><font style="color:#333333"><i>> — </i></font></div>
<div><font style="color:#333333"><i>> Mehdi</i></font></div>
<div><font style="color:#333333"><i>></i></font></div>
<div><font style="color:#333333"><i>></i></font></div>
<div><font style="color:#333333"><i>></i></font></div>
<div><font style="color:#333333"><i>>>>  </i></font></div>
<div><font style="color:#333333"><i>>>></i></font></div>
<div><font style="color:#333333"><i>>>> From: Sanjay Patel [mailto:</i></font><a href="mailto:spatel@rotateright.com"><font style="color:#333333"><i>spatel@rotateright.com</i></font></a><font style="color:#333333"><i>] </i></font></div>
<div><font style="color:#333333"><i>>>> Sent: Thursday, November 17, 2016 3:22 PM</i></font></div>
<div><font style="color:#333333"><i>>>> To: cfe-dev <</i></font><a href="mailto:cfe-dev@lists.llvm.org"><font style="color:#333333"><i>cfe-dev@lists.llvm.org</i></font></a><font style="color:#333333"><i>>; llvm-dev <</i></font><a href="mailto:llvm-dev@lists.llvm.org"><font style="color:#333333"><i>llvm-dev@lists.llvm.org</i></font></a><font style="color:#333333"><i>></i></font></div>
<div><font style="color:#333333"><i>>>> Cc: Nicolai Hähnle <</i></font><a href="mailto:nhaehnle@gmail.com"><font style="color:#333333"><i>nhaehnle@gmail.com</i></font></a><font style="color:#333333"><i>>; Hal Finkel <</i></font><a href="mailto:hfinkel@anl.gov"><font style="color:#333333"><i>hfinkel@anl.gov</i></font></a><font style="color:#333333"><i>>;
 Mehdi Amini <</i></font><a href="mailto:mehdi.amini@apple.com"><font style="color:#333333"><i>mehdi.amini@apple.com</i></font></a><font style="color:#333333"><i>>; Ristow, Warren <</i></font><a href="mailto:warren.ristow@sony.com"><font style="color:#333333"><i>warren.ristow@sony.com</i></font></a><font style="color:#333333"><i>>;
</i></font><a href="mailto:andrew.kaylor@intel.com"><font style="color:#333333"><i>andrew.kaylor@intel.com</i></font></a></div>
<div><font style="color:#333333"><i>>>> Subject: what does -ffp-contract=fast allow?</i></font></div>
<div><font style="color:#333333"><i>>>></i></font></div>
<div><font style="color:#333333"><i>>>>  </i></font></div>
<div><font style="color:#333333"><i>>>></i></font></div>
<div><font style="color:#333333"><i>>>> This is just paraphrasing from D26602, so credit to Nicolai for first raising the issue there.</i></font></div>
<div><font style="color:#333333"><i>>>></i></font></div>
<div><font style="color:#333333"><i>>>> float foo(float x, float y) {</i></font></div>
<div><font style="color:#333333"><i>>>>   return x * (y + 1);</i></font></div>
<div><font style="color:#333333"><i>>>> }</i></font></div>
<div><font style="color:#333333"><i>>>></i></font></div>
<div><font style="color:#333333"><i>>>> $ ./clang -O2 xy1.c -S -o - -target aarch64  -ffp-contract=fast | grep fm</i></font></div>
<div><font style="color:#333333"><i>>>>     fmadd    s0, s1, s0, s0</i></font></div>
<div><font style="color:#333333"><i>>>></i></font></div>
<div><font style="color:#333333"><i>>>> Is this a bug? We transformed the original expression into:</i></font></div>
<div><font style="color:#333333"><i>>>> x * y + x</i></font></div>
<div><font style="color:#333333"><i>>>></i></font></div>
<div><font style="color:#333333"><i>>>> When x=INF and y=0, the code returns INF if we don't reassociate. With reassociation to FMA, it returns NAN because 0 * INF = NAN.</i></font></div>
<div><font style="color:#333333"><i>>>></i></font></div>
<div><font style="color:#333333"><i>>>> 1. I used aarch64 as the example target, but this is not target-dependent (as long as the target has FMA).</i></font></div>
<div><font style="color:#333333"><i>>>></i></font></div>
<div><font style="color:#333333"><i>>>> 2. This is *not* -ffast-math...or is it? The C standard only shows on/off settings for the associated FP_CONTRACT pragma.</i></font></div>
<div><font style="color:#333333"><i>>>></i></font></div>
<div><font style="color:#333333"><i>>>> 3. AFAIK, clang has no documentation for -ffp-contract:</i></font></div>
<div><font style="color:#333333"><i>>>> </i></font><a href="http://clang.llvm.org/docs/UsersManual.html"><font style="color:#333333"><i>http://clang.llvm.org/docs/UsersManual.html</i></font></a></div>
<div><font style="color:#333333"><i>>>></i></font></div>
<div><font style="color:#333333"><i>>>> 4. GCC says:</i></font></div>
<div><font style="color:#333333"><i>>>> </i></font><a href="https://gcc.gnu.org/onlinedocs/gcc-6.2.0/gcc/Optimize-Options.html#Optimize-Options"><font style="color:#333333"><i>https://gcc.gnu.org/onlinedocs/gcc-6.2.0/gcc/Optimize-Options.html#Optimize-Options</i></font></a></div>
<div><font style="color:#333333"><i>>>> "-ffp-contract=fast enables floating-point expression contraction such as forming of fused multiply-add operations if the target has native support for them."</i></font></div>
<div><font style="color:#333333"><i>>>></i></font></div>
<div><font style="color:#333333"><i>>>> 5. The LLVM backend (where this reassociation currently happens) shows:</i></font></div>
<div><font style="color:#333333"><i>>>> FPOpFusion::Fast - Enable fusion of FP ops wherever it's profitable.</i></font></div>
<div><font style="color:#333333"><i>>></i></font></div>
<div><font style="color:#333333"><i>>></i></font></div>
<div><font style="color:#333333"><i>>></i></font></div>
<div><font style="color:#333333"><i>>></i></font></div>
<div><font style="color:#333333"><i>>> -- </i></font></div>
<div><font style="color:#333333"><i>>> Hal Finkel</i></font></div>
<div><font style="color:#333333"><i>>> Lead, Compiler Technology and Programming Languages</i></font></div>
<div><font style="color:#333333"><i>>> Leadership Computing Facility</i></font></div>
<div><font style="color:#333333"><i>>> Argonne National Laboratory</i></font></div>
<div><font style="color:#333333"><i>></i></font></div>
<div><font style="color:#333333"><i>></i></font></div>
<div><font style="color:#333333"><i><br>
</i></font></div>
</div>
</body>
</html>