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

    <tr>
        <th>Summary</th>
        <td>
            Missed optimization: malloc + memcpy + free => realloc
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            missed-optimization
      </td>
    </tr>

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

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

<pre>
    https://godbolt.org/z/YWxW7h8sP

```c++
#include <cstdlib>
#include <cstring>
#include <memory>

extern "C" {
auto src1(void* p1, size_t old_len, size_t new_len) -> void* {
    void* p2 = malloc(new_len);
    memcpy(p2, p1, old_len);
    free(p1);
    return p2;
}

auto tgt1(void* p1, size_t old_len, size_t new_len) -> void* {
 return realloc(p1, new_len);
}

}
```

alive proof: https://alive2.llvm.org/ce/z/RwPKVk
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJysU0lv4zwM_TX0RUggU16Ugw_u4kvxAcV3mGJOhRfG0VS2DElOm_z6gZekTdHjAAQskHx8euZT6Zxqe6IM4juIH4Jy9Adjs6eOyjfVB5VpTtnB-8GByAELwKI1TWW03xrbAhZnwOL3y8dLepDuGXg-RcKXqAHvpuA5oFB9rceGGIj72vlGqwrE408lq_r2p1JHnbGntcJz-vBkewaI94DIIJ14ytEb5mwdAsqjUQ1gzoYQ8J45daZXz4xuXjX1XzI9vS-ZHduAeGQX2DKQMXbNDMhAPLCu1NrUgPITCeLS21FXDydAOeDEsXBfSb807i3R1BbeZC350fZswCUF6cMidtblW__vdK1Mli5qlnHfNV1vsB4uq12vpdWR2GCN2YPI2a1P5iJutT52q1dqWg3z__vz06-3oMlEsxO7MqAsTCMeiTgVPDhkaZxQKuPdXohI7GPJZVLKMA7rKpUcwyRQGXKMOWKEiBjybYJxzBOJZSiINw1BxKkrlb6yB8q5kbIQZSzTQJcVaTdbHrFTzlGzMYNXnTqXXpkeEKe3YLMJvqnG1kHEtXLefQ70ymvK_pvB7AYs8tUjDPBudcR8nHY-WWhax_rjg9Hq7-9L-cNYbWvTARYT3frZDNb8odoDFrMYB1iseo4Z_g0AAP__9KIgUQ">