<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">