https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93721
Dávid Bolvanský <david.bolvansky at gmail dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |david.bolvansky at gmail dot
com
--- Comment #6 from Dávid Bolvanský <david.bolvansky at gmail dot com> ---
void swap (std::pair<int, int> &x)
{
int y[2], t;
static_assert (sizeof x == sizeof y);
__builtin_memcpy (y, &x, sizeof x);
t = y[0]; y[0] = y[1]; y[1] = t;
__builtin_memcpy (&x, y, sizeof x);
}
-O3 x86-64 codegen is regressed in trunk, -O2/-Os is okay
_Z4swapRSt4pairIiiE:
movq (%rdi), %rax
movd (%rdi), %xmm1
sarq $32, %rax
movq %rax, %xmm0
punpckldq %xmm1, %xmm0
movq %xmm0, (%rdi)
ret