<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/139240>139240</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [Clang] optimization: clang does not know memcpy returns its first arg
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          rockeet
      </td>
    </tr>
</table>

<pre>
    ```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
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyUVF1vozoU_DWHl6NG5gAJPPCQD-XpSre3qnQfV8YY4i1g1jbpx69f2SFpum23uxICaeyZMzNY5taqdpCyhGwD2S7ikztoUxotHqR0UaXr5xKW7PQIoI1_2PqoVY2N1kC5OHADtMZqaoC2KPRgHZ5Ba4QHrXqR3xwOQAXCygsgIvLJaRydQUh2-KoEVPSyF-MzUD6LzjKeD8mZftkUJGjjl7cItBzOI3UDlAfSmQernX-fAwFbt0JgKwdpuJModC0hWV9v6bntga0brZNri9sQ8ZR2BqYhVFljp4c2TPRCOE724O2a6mk2HszrI55R2qKprxcF77qrhG9Z__3_790Ob-_vELKN4U9AGy-S7YLOmyGjHvH9aCPdBx08DPrRzhP9lskMFpWz2ChjHXLTLjyLrUXHh_ZPKru48AWYOP0VemfsgvKvm7qgcXpC1ef9pez2n_sPFH88alOfDmC2MXEaDtFnXfK6Pg20o1_Mv6zZo29Tvy_-1GWtpcVBu_APfvsLorpM6iIpeCTLeJUuV_kyYVl0KKuUNTWllYxXPF_GPOPLVcy5yIjEMpV5pEpilLGMFXH4LvKiyRMpeCzigsU8hpTJnqtu0XXHfqFNGylrJ1nGSUEpizpeyc6GW4Io2AYif2GY0hNuqqm1kLJOWWdfJZxyXbhatoGR7VCPTvXqhTulB0jW-NcNTKYrD86N1h862gPtW-UOU7UQugfa-9Hz52Y0-rsUDmgfolig_ZzmWNLPAAAA__-K_m8z">