https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104412
Bug ID: 104412 Summary: [Aarch64] Failure to optimize vector initialization from int64s Product: gcc Version: 12.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: gabravier at gmail dot com Target Milestone: --- #include <stdint.h> typedef int64_t v2i64 __attribute__((vector_size(16))); v2i64 _mm_set_epi64x(int64_t i1, int64_t i2) { union { int64_t data[2]; v2i64 v; } d = {.data = {i2, i1}}; return d.v; } With -O3, AArch64 GCC outputs this: _mm_set_epi64x(long, long): sub sp, sp, #16 stp x1, x0, [sp] ldr q0, [sp] add sp, sp, 16 ret LLVM instead outputs this: _mm_set_epi64x(long, long): fmov d0, x1 mov v0.d[1], x0 ret