https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92611
Bug ID: 92611
Summary: auto vectorization failed for type promotation
Product: gcc
Version: 10.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: crazylht at gmail dot com
Target Milestone: ---
Target: i386, x86-64
Cat test.c
void foo(int *__restrict dst, char *__restrict src)
{
for(int x = 0; x < 4; x++ )
dst[x] = src[x];
}
Clang generate
---------------
vpmovsxbd (%rsi), %xmm0
vmovdqu %xmm0, (%rdi)
retq
---------------
while GCC generate
----------------
movsbl (%rsi), %eax
movl %eax, (%rdi)
movsbl 1(%rsi), %eax
movl %eax, 4(%rdi)
movsbl 2(%rsi), %eax
movl %eax, 8(%rdi)
movsbl 3(%rsi), %eax
movl %eax, 12(%rdi)
ret
---------------
Refer to https://godbolt.org/z/ckmXm_