https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104610
--- Comment #2 from Hongtao.liu <crazylht at gmail dot com> ---
in Gimple, there're
_1 = __builtin_memcmp_eq (a_5(D), &t[0], 32);
_2 = _1 == 0;
_6 = (int) _2;
So it's related to codegen optimization with vectorized codes for
__builtin_memcmp_eq, guess we can start with size multiple of 16 bytes?
also i saw when size is 9, llvm generates
f(char*): # @f(char*)
movabs rcx, 3979270244072042800
xor rcx, qword ptr [rdi]
movzx edx, byte ptr [rdi + 8]
xor eax, eax
or rdx, rcx
setne al
ret
while gcc
f(char*):
movabsq $3979270244072042800, %rax
cmpq %rax, (%rdi)
je .L5
.L2:
movl $1, %eax
ret
.L5:
cmpb $0, 8(%rdi)
jne .L2
xorl %eax, %eax
ret