[LLVMdev] How to prevent insertion of memcpy()

Dmitry Vyukov dvyukov at google.com
Tue May 29 06:59:08 PDT 2012


Hi,

I have the following program:

// test.c
#include <stdlib.h>
struct foo_t {
  int x[1024];
};
__thread struct foo_t g_foo;
void bar(struct foo_t* foo) {
  g_foo = *foo;
}
int main() {
  struct foo_t* f = (struct foo_t*)malloc(sizeof(struct foo_t));
  bar(f);
  return 0;
}

When I compile it with clang I see that it inserts memcpy() in function
bar():

$ clang -v
clang version 3.2 (trunk 157390)
Target: x86_64-unknown-linux-gnu
Thread model: posix
$ clang test.c -g && objdump -dCS a.out

void bar(struct foo_t* foo) {
  4005b0:       55                      push   %rbp
  4005b1:       48 89 e5                mov    %rsp,%rbp
  4005b4:       48 83 ec 10             sub    $0x10,%rsp
  4005b8:       48 89 7d f8             mov    %rdi,-0x8(%rbp)
  g_foo = *foo;
  4005bc:       48 8b 7d f8             mov    -0x8(%rbp),%rdi
  4005c0:       64 48 8b 04 25 00 00    mov    %fs:0x0,%rax
  4005c7:       00 00
  4005c9:       48 8d 80 00 f0 ff ff    lea    -0x1000(%rax),%rax
  4005d0:       ba 00 10 00 00          mov    $0x1000,%edx
  4005d5:       48 89 7d f0             mov    %rdi,-0x10(%rbp)
  4005d9:       48 89 c7                mov    %rax,%rdi
  4005dc:       48 8b 75 f0             mov    -0x10(%rbp),%rsi
  4005e0:       e8 c3 fe ff ff          *callq  4004a8 <memcpy at plt>*
}
  4005e5:       48 83 c4 10             add    $0x10,%rsp
  4005e9:       5d                      pop    %rbp
  4005ea:       c3                      retq
  4005eb:       0f 1f 44 00 00          nopl   0x0(%rax,%rax,1)

How do I disable that feature? I've tried -fno-builtin and/or
-ffreestanding with no success.
TIA
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20120529/d4e4206f/attachment.html>


More information about the llvm-dev mailing list