https://gcc.gnu.org/bugzilla/show_bug.cgi?id=124659
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |RESOLVED
Resolution|--- |INVALID
--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
typedef long long __m128i __attribute__ ((__vector_size__ (16),
__may_alias__));
so you are violating strict aliasing rules with -O2.
I assume the result is counter-intuitive at -O0 because little-endian?
_mm_set_epi32 (0, 1, 2, 3) gives you
(gdb) p $xmm0.v4_int32
$7 = {3, 2, 1, 0}
extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__,
__artificial__))
_mm_set_epi32 (int __q3, int __q2, int __q1, int __q0)
{
return __extension__ (__m128i)(__v4si){ __q0, __q1, __q2, __q3 };
}