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

Reply via email to