https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104413

            Bug ID: 104413
           Summary: _mm_set1_epi8 isn't optimized for SSE2
           Product: gcc
           Version: 12.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: hjl.tools at gmail dot com
                CC: crazylht at gmail dot com
  Target Milestone: ---
            Target: x86-64

[hjl@gnu-tgl-3 tmp]$ cat foo.c
#include <x86intrin.h>

__m128i
foo (char c)
{
  return _mm_set1_epi8 (c);
}
[hjl@gnu-tgl-3 tmp]$ cat foo.s
        .file   "foo.c"
        .text
        .p2align 4
        .globl  foo
        .type   foo, @function
foo:
.LFB5670:
        .cfi_startproc
        movd    %edi, %xmm0
        punpcklbw       %xmm0, %xmm0
        punpcklwd       %xmm0, %xmm0
        pshufd  $0, %xmm0, %xmm0
        ret
        .cfi_endproc
.LFE5670:
        .size   foo, .-foo
        .ident  "GCC: (GNU) 11.2.1 20220127 (Red Hat 11.2.1-9)"
        .section        .note.GNU-stack,"",@progbits
[hjl@gnu-tgl-3 tmp]$ 

GCC should generate

        movd    %edi, %xmm0
        pxor %xmm1, %xmm1;
        pshufb %xmm1, %xmm0
        ret

Reply via email to