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

    <tr>
        <th>Summary</th>
        <td>
            [MemCpyOpt] Failed to eliminate `memcpy`
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            llvm:optimizations,
            missed-optimization
      </td>
    </tr>

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

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

<pre>
    I tried the following code:

```llvm
%0 = type { i8, [753 x i8] }

define void @src(ptr nocapture noundef %arg) local_unnamed_addr {
bb:
  %i = alloca %0, align 1
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(754) %i, ptr noundef nonnull align 1 dereferenceable(754) %arg, i64 754, i1 false)
 %i1 = getelementptr inbounds i8, ptr %i, i64 1
  store i8 1, ptr %arg, align 1
  %i2 = getelementptr inbounds i8, ptr %arg, i64 1
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(753) %i2, ptr noundef nonnull align 1 dereferenceable(753) %i1, i64 753, i1 false)
 ret void
}

define void @tgt(ptr nocapture noundef %arg) local_unnamed_addr {
bb:
  store i8 1, ptr %arg, align 1
  ret void
}

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #0

attributes #0 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
```

We can eliminate all `memcpy`.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0VVur4zYQ_jXyy3CCLMWOz4MfzkkIlFJKn_q4yNbEmVYXI8l7mv76IuVmlrJsly2YBMua-S4zzKgYaXKIPWvemRAHUu63n5kQrDlUaklnH_rrWTV4fel_ghQINaQzwskb4z_ITTB6jUy-MX5g_P7b8utjzGd7OxINByYPkC4zAtu9A3VM7IE177tGwl_5tTkA2x3WiTSeyCF89qSBbXkMIxPdnAI4P6o5LQHB-cVpPAETjQoTE69g_KjMp8U5ZVF_UlqHjHdNOAwPqpBDqHBSJsfkd545KUOTg_p-bVTGPChkRRuLdpwvm5nnh9rtg9SVivPOLcbc84DGgCcM6EZUg0Emul2zzUwzgQz4vcFF8B6o3UI53APVcFImIhOvN_oZoy4qJ0xo0KJLGY_ckBHjrQ756E4n53uoj8kHBOqgXl27AX9hVI4X3wy1Iv__Wi3vVovv8foRXT-tlv9udcBUyN86-KutnKb0I1v5P1TpqyyZfIfj4sZE3sFbSiEy-VYoGjOo8U9w_hTwSvWDnIYPMiZgWoIDi9aHCxOdCpNFmwMDKv0RKD1N0jgaFfAbi6wMqbhyqOTyzlyelfzySoa83yipSqXI2pulTEi-VqxSCjQsCWP5VNo3j6cfonk1z-4jcY39O8KoHKAhS04lzIMIWMuvfrCWbyrdS_0qX1WFfb2redvUrZDVudenTtfjMIiu4Y2WXd2KbtBKnbqdxO2IFfWCiy2X9Y43nAu5aVXHsRND12zlTsuWbTlaRWZTSuDDVFGMC_Zd07S8MmpAE2-LoYxx-ebnRJb-Vrk5Yl4TYs-EsBQj6pf1x9sKCX0OfBmWKeZKU0zxCZYombJ4fkG7ny-_zinP_6MikzeMX5myNqRagunPKc25L5k4MnGcKJ2XYTN6y8SxML3-vczB_4FjYuJYhEUmjkXbPwEAAP__tF8k1w">