Issue 139240
Summary [Clang] optimization: clang does not know memcpy returns its first arg
Labels clang
Assignees
Reporter rockeet
    ```c++
void foo(char* buf, const char* src, size_t n) {
    auto ptr = (char*)memcpy(buf, src, n);
    memcpy(ptr + n, &n, sizeof(n));
}
```
gcc generate code:
```masm
foo3(char*, char const*, unsigned long):
 push    rbx
        mov     rbx, rdx
        call    memcpy
        mov QWORD PTR [rax+rbx], rbx
        pop     rbx
        ret
```
gcc knows memcpy returns its first arg.

clang generate code:
```masm
        push r14
        push    rbx
        push    rax
        mov     rbx, rdx
 mov     r14, rdi
        call    memcpy@PLT
        mov     qword ptr [r14 + rbx], rbx
        add     rsp, 8
        pop     rbx
        pop r14
        ret
```
clang does not know memcpy returns its first arg
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to