https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54904
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Assignee|pinskia at gcc dot gnu.org |unassigned at gcc dot gnu.org Target| |x86_64-linux-gnu Status|ASSIGNED |NEW Keywords| |missed-optimization --- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> --- I think I accidently set this to assigned rather than just new. x86_64 produces now: movdqa .LC0(%rip), %xmm0 movabsq $1229782938247303441, %rax movups %xmm0, (%rdi) movq %rax, 15(%rdi) Which is slightly better. x86_64 with -mavx2 produces: movl $17, %eax vmovd %eax, %xmm0 movabsq $1229782938247303441, %rax vpbroadcastb %xmm0, %xmm0 vmovdqu %xmm0, (%rdi) movq %rax, 15(%rdi) which is only slightly better but we need to produce 0x1111111111111111 in rax, then why not use that for the broadcast ? aarch64 is reasonible though: movi v31.16b, 0x11 str q31, [x0] str d31, [x0, 15]