Cuando __builtin_memcpy se reemplaza con memcpy de libc

Hay una versión de C99 / posixmemcpy función en GCC:__builtin_memcpy.

Algunas veces puede ser reemplazado por GCC a la versión en línea de memcpy y en otros casos es reemplazado por una llamada a memcpy de libc. P.ej. se notóaquí:

Finalmente, en una nota del compilador, __builtin_memcpy puede volver a emitir una llamada a la función memcpy.

¿Cuál es la lógica en esta selección? ¿Es la misma lógica en otros compiladores compatibles con gcc, como clang / llvm, compilador intel c ++, PCC, suncc (oracle studio)?

¿Cuándo debería preferir usar __builtin_memcpy en lugar de memcpy?

Respuestas a la pregunta(1)

Su respuesta a la pregunta