Я тестирую Clang и компилирую простой C-файл, включая struct asigning. Когда я вижу код LLVM, появляется llvm.memcpy.p0i8.p0i8.i64, откуда? Я не вижу определения, только вижу его как функцию.
Это встроенная функция LLVM.Согласно справочному языку:
LLVM предоставляет встроенные функции для нескольких важных стандартных функций библиотеки C.Эти встроенные функции позволяют интерфейсам исходного языка передавать информацию о выравнивании аргументов указателя генератору кода, предоставляя возможность для более эффективной генерации кода.
В частности, llvm.memcpy присваивает:
llvm.memcpy
Встроенные функции 'llvm.memcpy. *' Копируют блок памяти из исходного местоположения в местоположение назначения. Обратите внимание, что, в отличие от стандартной функции libc, llvm.memcpy.* intrinsics не возвращает значение, принимает дополнительные изменчивые аргументы, а указатели могут быть в указанных адресных пространствах.
Встроенные функции 'llvm.memcpy. *' Копируют блок памяти из исходного местоположения в местоположение назначения.
Обратите внимание, что, в отличие от стандартной функции libc, llvm.memcpy.* intrinsics не возвращает значение, принимает дополнительные изменчивые аргументы, а указатели могут быть в указанных адресных пространствах.