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.