On Thu, 20 Aug 2015, Richard Biener wrote:

On Thu, Aug 20, 2015 at 7:38 AM, Marc Glisse <marc.gli...@inria.fr> wrote:
On Thu, 20 Aug 2015, Hurugalawadi, Naveen wrote:

The following testcase does not generate "x" as needed.
====================
double t (double x)
{
x = sqrt (x) * sqrt (x);
return x;
}
====================


With -fno-math-errno, we CSE the calls to sqrt, so I would expect this to
match:

  (mult (SQRT@1 @0) @1)

Without the flag, I expect that one will apply

 (simplify
  (mult (SQRT:s @0) (SQRT:s @1))
  (SQRT (mult @0 @1)))

and then maybe we have something converting sqrt(x*x) to abs(x) or maybe
not.

ICK. I'd rather have CSE still CSE the two calls by adding some tricks regarding to errno ...

I wonder if all the unsafe math optimizations are really ok without
-fno-math-errno...

Well, on GIMPLE they will preserve the original calls because of their side-effects setting errno... on GENERIC probably not.

But we are also introducing new math calls, and I am afraid those might set errno at an unexpected place in the code...

I don't know if anyone interested in errno would ever use -funsafe-math-optimizations though.

--
Marc Glisse

Reply via email to