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