<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=http://email.email.llvm.org/c/eJylVUtzozgQ_jX4oooLQ_zgwMGvVDGVTVKJk8nMhRKowUqExEjCXvbXbwtM4uwmcxlKxpJa6tf3dZMp1sbezDeWeeESB83zpmoEtYC7hBvCoOASGKGGFEoIdTSES4JCwbPcC1ZuzHx32d94_vDGnX50SwtV7VQSL1znghpD0kTWjU0saGqV9oI1Oe3vai_c9rfS62S1vrtLk5vr5GabPiUPySq5TnY_yCBZ39487LbPd_fp8mq3vU_Xz8-T-ekyKuomZwEFi49mSZoWXBvrzP9Pgu70gl2NKy45rqJTdPNVPyH4FHgaNXvhalCHy4kXbgYdKOjT9GZtUBOEvHiL5WG3SZ-295iiLRmCIKent086pU94sIeqUocupsE5ZwZ_y8FOuHqzA8LA1ypP069vS8aL9-sabKPlkJS3c_PNp9j37-97kCRXVc0FlyWhpNaq1LQijXHr3zBQIgOzpiSVYuDwaCQD7S5c3JbOCG7ZPWhwXKVEKstzoJkAUoNGbCoqc5RVNc0tYQ0Qq9x5tA8GnEgVH6x3SZ35497tC_Kd2_1nB3BG9tbWxu0GVzh-NTx_vchQ6X6Mkbod_O3Tv9LlownrcrUNsx96EWiznKRP9uXx3IRq7J9YaQ03QTZZl8nP13tzG-S_ipefVfTtlatzFHZ7TNJ5XhggCIxarqTLn5JA4G-Kxdrl5bhvCZ5r8YpyW0g2MDXknArROmRcIktaAYODA7dqkBCtYyJFPBAKQpmqrQPYWCoZ1Yxg19BUt4SKUmkMvELUJOvQRU6t-0rBJSo4cgaiHZMPPFKNYATZmiGEyhjukEZINWCDwYA-ySHJ0V3XtLC2JRXu9H-7F5pClCme7GseS9qoCvClrUtET1ykHSrRXBqee-EVudWYnRYdqah-_dQy9kwvCKg40tY5gNRHCgcEDlgMxxPqLkEV_6fDwBCQjrvMqR-xOGRRGNERbfCojg_cYmviSqNratRoEX-kRokam-zECiEOw98F1toL5BjZFTemAYOTaThbRKN9PIcoj2Z0dlnMIupPopwV_oQuApoxmheX2UjQDJtH7E0xVYGEI-lU4NybbkZ_7gGPAz_A4UdBMA0mi_F0Mfen02w2D-dRni_m3qUPFeVi7PSMlS5HOu5UYk8wKBTcWPMuxG8ILyVA5zB6aLkVED-ar-rcsfidCkQAZcYx5Kg0tgf87PXN57xmRl0Icef_v5WZRsg>53689</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            Use of `std::move` in libc++ leads to worsened debug performance 
        </td>
    </tr>

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

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

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

<pre>
    `std::accumulate` is defined as follows in `libc++`:

```
template <class _InputIterator, class _Tp>
_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
_Tp
accumulate(_InputIterator __first, _InputIterator __last, _Tp __init)
{
    for (; __first != __last; ++__first)
#if _LIBCPP_STD_VER > 17
        __init = _VSTD::move(__init) + *__first;
#else
        __init = __init + *__first;
#endif
    return __init;
}
```

When compiling a program using `std::accumulate` in debug mode, under `-Og`, there is a noticeable performance impact due to the presence of `std::move`.
- With `std::move`: https://quick-bench.com/q/h_M_AUs3pgBE3bYr82rsA1_VtjU
- Without `std::move`: https://quick-bench.com/q/ysis2b1CgIZkRsO2cqfjZm9Jkio

This performance degradation is one example of why many people (especially in the gamedev community) are not adopting standard library algorithms and modern C++ more widely. 

Would it be possible to replace `std::move` calls internal to `libc++` with a cast, or some sort of compiler intrinsic? Or maybe mark `std::move` as "always inline" even without optimizations enabled? 
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJylVctyozoQ_Rq8UcWFwcb2goVfqeJWJkklzmNmQwnUxkqExEjCHubrbwtM4txJZnMpgSW11K9zup0p1sRe5BvLvHCBg-Z5XdaCWsBdwg1hsOMSGKGG7JQQ6mgIlwSFgme5FyzdiHx32V97fv_FnW60Swtl5VQSL1zlghpD0kRWtU0saGqV9oIVOe1vKy_cdLfSq2S5ur1Nk-ur5HqTPib3yTK5SrbfSS9Z3VzfbzfPt3fp4nK7uUtXz8-j6ekyKmonZwEFs49mSZruuDbWmf9Dgu50gm2FKy45ruan6KbLbkLw2eFp1OyFy14dLkdeuO51oKBL05u1Xk0Q8t1bLPfbdfq4ucMUbUgfBDk9nX3SKn3Egx1UpTq0MfXOOTP4Lno74fLNDggDX6s8Tb--LRnfvV_XYGst-6S8nZuuP8W--z7tQZJclRUXXBaEkkqrQtOS1Mat_8JAiQzM6oKUioHDo5YMtLtwcVM4I7hl96DBcZUSqSzPgWYCSAUasSmpzFFWVjS3hNVArHLn0T4YcCK1-2C9TWrkDzu3L8gTt_vPDuCM7K2tjNsNLnH8rHn-epGh0v0QI3U7-O7Tb-niwYRVsdyE2Xc9C7RZjNJH-_JwbkLV9v9YaQw3QTZaFcmP1ztzE-Q_dy8_yvk_r1ydo7DdY5LO88IAQWDUciVd_pQEAr8oFmubl-O-IXiuwSvKbSHZwFSQcypE45BxiSxoCQwODtyyRkI0jokU8UAoCGWqsg5gY6lkVDOCXUNT3RAqCqUx8BJRk6xFFzm16ioFl6jgyBmIZkg-8EjVghFka4YQKmO4Qxoh1YANBgP6JIckR3dd08LallS40__tXmgKUaZ4sqt5LGmjSsCPti4RHXGRdqhEc2l47oWX5EZjdhp0pKT69VPL2DO9IKDiSBvnAFIfKRwQOGAxHE-ouwSV_HeLgSEgHXeZUz9gccjm4ZwOLLcC4gfzFVkdFO_xEAGUGRfmUWnkOPburoLOgR_UWsQfmVWgQ3V2IpUQh_7nAkv1BXJMzCU3pgaDk0kYzeaDfTyP8mwMEz-Yzkd5Nh3PojAKZ-NxmAUsjMbRQNAMe0_sTdCzQMKRtCpw7k3WAx4HfoDDnwfBJBjNhpPZ1J9MsmgaTud5Ppt6Yx9KysXQ-TFUuhjouHUJwzEoFNxY8y7EPxBeSIDWHOqnNaZYxwdusaVzpRFSNWgdiNsA_gX4Cy-l">