<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/56467>56467</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
hand written memcpy replaced with builtin memcpy
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
nickitat
</td>
</tr>
</table>
<pre>
we have code like this:
``` cpp
void __attribute__((noinline, no_builtin("memcpy"))) my_memcpy(char * __restrict dst, const char * __restrict src, ssize_t n)
{
while (n > 0)
{
_mm_storeu_si128(reinterpret_cast<__m128i *>(dst),
_mm_loadu_si128(reinterpret_cast<const __m128i *>(src)));
dst += 16;
src += 16;
n -= 16;
}
}
int main()
{
char src[1024] = "wefjwoefjowfopwfokwpeofkpowf";
char dst[sizeof(src) + 15]; // we always have 15 bytes padding in dst to be able to use memcpy without branches
my_memcpy(dst, src, 1024);
return 0;
}
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJx9U9uSoyAQ_Rp96ZqUl2iSBx-Syc5vWICdyATBAhwr-_XbYJzZudRYxADdHk73OXDT3ZsZoWdvCMJ0CEreEHwvXVIek-ycZMekzpYBYhyXrTcjO2hb5r2VfPLYtkmxp6GN1EpqTIpn0Kblk1Re6hgrBhzEeKdJUhyWAcO9XXf3omcWkuJIsBYd4QoPnfMBSRjtPPyU4KwICc7Jv9h60AF34bw7LROgZ-6lQgj0ICn_QPaeFYKfMsPTDkPrvLE4tU7msSyLUnu0o0XfCkakyue2HSgmAyHCpJzIlap6_oy2IirDul8BlyK_wcYKH_1Kyi9U6UzKPCXlGfL6W5Q-_SWq4emHSLI7rw1cJ_FNdGFgDyl_6nFUJ5CtTnlWbJPqDAGe5J7x8jobepn5Ykb63eYRzeU20jq4ofyKEjpZnYKk5vLegVAJ5BXh0ge0eKEBZFymZnZ3i3_zCvjdo4ORdZ3UV5A6tsgb4JTJyQQ0nRzC4jqYpe_N5IFbpkWP7oPI_858uPDhtVjdFy1IxslqMta6-dG99e6kXVN2h_LAUi-9wqZnuoPZSu9Rr3QsjooJ7CIveFyeRzCdrGp678d4L2P5V8qa-EaYgRZKva1_T6M1ryiI9It0bqKyipeq3ta7tG86fiiwLMq96BivOArGOpFvtwXDOttVRaoYR-UaEoC00ThDhAg6VedUNkVWFNmOepBvs6reXHYHke9L5CUvszrPkm2GZBO1CTw2xl5T20RKfLo6CirpvPsIMrq4V40YjyN8NpEettFS3KRnPo1nN5H7P-PkXtM">