https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120209

--- Comment #2 from Paul Cercueil <paul at crapouillou dot net> ---
> The test case is somewhat bogus.  Changing the "-1.0f" to "1.0f" will
> generate the "fldi1" instruction for the comparison as well.

Yes, I got confused while writing the bug report. The problem is loading the
-1.0f constant.

> Based on our previous discussion, I guess you'd expect this case to generate
> the sequence "fldi1; fneg" to load the constant -1.0, which would be better
> in this case.
> 
> 
> > The compiler also does not seem to understand that fr1 contains -1.0f which
> > it can add to fr0 directly, and instead it will load 1.0f with fldi1 this
> > time and substract it to fr0.
> 
> That's because there are two constants in your case "-1" and "1".
> 
> If the test case is changed to 
> 
>     if (x < -2.0f)
>         x2 *= -2.0f;
> 
> ... then we will see that constants are shared in registers.

Well, but I'm doing

    if (x < -1.0f)
        x2 += -1.0f;

So that's only one constant, -1.0.

Reply via email to