[llvm-dev] How to remove memcpy

Mehdi Amini via llvm-dev llvm-dev at lists.llvm.org
Sat Oct 15 16:16:25 PDT 2016


> On Oct 15, 2016, at 4:07 PM, Joerg Sonnenberger via llvm-dev <llvm-dev at lists.llvm.org> wrote:
> 
> On Sat, Oct 15, 2016 at 04:01:36PM -0700, Mehdi Amini via llvm-dev wrote:
>> 
>>> On Oct 15, 2016, at 3:56 PM, Wolfgang McSneed via llvm-dev <llvm-dev at lists.llvm.org> wrote:
>>> 
>>> Hi,
>>> 
>>> I am hoping that someone can help me figure out how to prevent the insertion of "memcpy" from the assembly source. 
>>> 
>>> My target is an instruction set simulator that doesn't support this.
>>> 
>>> Thank you for your valuable time.
>>> 
>>> Wolf
>>> 
>>> Here are my compile commands:
>>> $ clang -emit-llvm -fno-builtin -o3 --target=mips -S matrix_float.c -o vl_matrix_float.ll
>> 
>> Technically  -fno-bultin prevents the compiler from understand the
>> memset in the original code. The right option to prevent the compiler
>> from insert libc calls “out-of-the-blue” is -ffreestanding.
> 
> Huh? The -fno-builtin is not the problem.

I’m not sure what you mean by “it is not the problem” or how it relate to what I wrote.

Many people use -fno-builtin thinking it’ll prevent the compiler from calling memset. I’m pointing this isn’t true (the command line he posted includes -fno-builtin).


> The compiler is *expected* to
> call certain functions even for -ffreestanding. memcpy and memset are
> two of those. It is certainly perfectly valid target lowering for
> llvm.memcpy to be turned back into a libcall.

Source?
AFAICT this is GCC behavior, but not the standard: https://gcc.gnu.org/onlinedocs/gcc/Standards.html#Standards <https://gcc.gnu.org/onlinedocs/gcc/Standards.html#Standards>


— 
Mehdi



-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20161015/4ed5f2ee/attachment.html>


More information about the llvm-dev mailing list