<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=http://email.email.llvm.org/c/eJy9VE1z2yAQ_TXSZaceGWTZOujg2ElP_QE9eRCsZFIEKiA7zq_vIsf5OvTSaTzYZhd474ndp9apSxOPCJ0zxp217aGbrIzaWdABrIswejeiNxfwKF1v9TMqEAEEDDjI8QLtBaQRts_YgzGnIePbrNhnxe23Kq5DjuM1c3JaQUCvhSGsg8GMbUJU6RzftpdI8RYOB48hei0jqBAztgPpbIjwunHSNnJ2iJ82By8zVr9Qr--uE6BP5zwQEZ0CDRnfQ5Hxu3m6A87SPGN3NHTiuk7fYyWID3hzgm1ncWnzjBmiiFoepKAs3318KH5P9PPYEjCkmN8DyWA1AVVQPHVdouP_gWTzBSTL6gtIWPk3kmy9v1V-_6n7riE-iWGkhnttUb47xjiGlGAPNHqnWmfiwvnUzs_0_f5j8_g7hJ8qKXjX1-ejNgjJOT1a9CLOrgg4tOQUco5EH4W2FCQPJb-oE9o4eTeFFJ6PdOSEHnopQaHUCgNEl9ymJompC3Vqd20MdEKb2-LViieU0Xmyz6zAOKECaQ2Uw5Crhqua1yIXUzw6T_YW8lcoWT5503x6Xh2PU7uQbri59_r3jZgeiYNCHcKECX1VFpzlx0auFKuwxgI7UeG6RN6uqlqoki15uZTr3IgWTWiyFRWaWTzDDEHzbLXP_12BbljB0uBsWVbLeiGx65akolKbomyXPCsLHOjKFgknlTL3zQzZTn2gRaNDDG-LVDXdW8RZMCmMOhqcD7xd_OurD4RVdOdUQzdGPaTMy2twFDGit5DPcptZ6x8tn5oU>54032</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            llvm fails to recognize and thus optimize memcpy pattern 
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

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

<pre>
    the following function is not properly recognized as a memcpy by clang/llvm:

```cpp
void serialize_le(std::byte* __restrict dst, const std::uint32_t* __restrict src)
{
    for (int i = 0; i < 32; ++i, ++src)
    {
        *dst++ = static_cast<std::byte>((*src >>  0) & 0xff);
        *dst++ = static_cast<std::byte>((*src >>  8) & 0xff);
        *dst++ = static_cast<std::byte>((*src >> 16) & 0xff);
        *dst++ = static_cast<std::byte>((*src >> 24) & 0xff);
    }
}
```
example:
<https://godbolt.org/z/GM8jqssYd>

while the generated assembly is certainly not as adventurous as whatever gcc decides to produce, it still fails to properly vectorize the loads/stores
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy9VMt24jAM_Zpko1NOsEMgiywotLOaD5gVxw8luOPEGduB0q8fOZS-FrObcgSRZEv3GutGOn1p4hGhdda6sxk6aKdBReMGMAEGF2H0bkRvL-BRuW4wL6hBBBDQY6_GC8gLKCuGLmOP1p76jG-zYp8Vt9-quJoax2vm5IyGgN4IS70OFjO2CVGnOr6Vl0jxFg4HjyF6oyLoEDO2A-WGEOFt42SGyNkhftkcvMpY_Qq9vr86QJ_WeSAgqgIDGd9DkfH72d0BZ8nP2D2ZSVhX92Ov1OJTvznBtjO5tHnuGaKIRh2UoCzffT4UfyD42bbUGFLMH4BosJoaVVA8t22C4_8BZPMNIMvqG0BY-S-QbL2_3fz-y_RdQ3wW_UgD9zaifHeMcQwpwR7JOqels3HhfBrnF_r--Ll5-hPCL50YfJjr89FYhKScDgf0Is6qCNhLUgopR6GPwgwUJA0lvegTDnHybgopPB-p5IQeOqVAozIaA0SX1KYnhWkKTRp3Yy20wtjb4lWKJ1TReZLPzMA6oQNxDZTDkOuG65rXIo8mWmySKN9bvIkYxKCpmti4MZo-ZV4FPYoY0Q-QT942X_4fQxVyoVx_U_v1cUfMnogThSaECRObVVlwlh-bNVayqFuGNdelrGqtldzIjarYqlzJdZlbIdGGJlvRYLABzzC3ID9b7XPTsIIl42xZVst6obBtl8hlpTdFKZc8Kwvs6XSLxCNdXO7nI9_JqQu0aE2I4X2R7sh0A-IMR_3FFI_O0ytQqN-hZPmM3czc_wIHt4S2">