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

--- Comment #6 from Bernardo Sulzbach <bernardo at bernardosulzbach dot com> ---
(In reply to Bernardo Sulzbach from comment #5)
> (In reply to Andrew Pinski from comment #1)
> > -fno-trapping-math removes the zeroing of the top half of the registers.
> 
> I see. I tried passing that and got
> 
>     add(std::array<float, 2ul>, std::array<float, 2ul>):
>         movaps  xmm2, xmm1
>         movaps  xmm1, xmm0
>         addps   xmm1, xmm2
>         movdqa  xmm0, xmm1
>         ret
> 
> with -Os and
> 
>     add(std::array<float, 2ul>, std::array<float, 2ul>):
>         addps   xmm1, xmm0
>         movdqa  xmm0, xmm1
>         ret
> 
> with -O2/-O3. Is there a reason for `addps xmm1, xmm0` and moving instead of
> `addps xmm0, xmm1`?

Erratum: both are -O2/-O3, the first one from GCC 14.2 and the second one is
from "trunk" in Compiler Explorer.

Reply via email to