From: Jonathan Wakely Date: Thu, 8 Feb 2024 15:46:08 +0000 (+0000) Subject: libstdc++: Use memset to optimize std::bitset::set() [PR113807] X-Git-Tag: basepoints/gcc-15~1137 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e7ae13a858f36031b8fd3aa07362752ff2b19b2e;p=thirdparty%2Fgcc.git libstdc++: Use memset to optimize std::bitset::set() [PR113807] As pointed out in the PR we already do this for reset(). libstdc++-v3/ChangeLog: PR libstdc++/113807 * include/std/bitset (bitset::set()): Use memset instead of a loop over the individual words. --- diff --git a/libstdc++-v3/include/std/bitset b/libstdc++-v3/include/std/bitset index 3243c6497314..16c4040f532f 100644 --- a/libstdc++-v3/include/std/bitset +++ b/libstdc++-v3/include/std/bitset @@ -177,8 +177,15 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER _GLIBCXX14_CONSTEXPR void _M_do_set() _GLIBCXX_NOEXCEPT { - for (size_t __i = 0; __i < _Nw; __i++) - _M_w[__i] = ~static_cast<_WordT>(0); +#if __cplusplus >= 201402L + if (__builtin_is_constant_evaluated()) + { + for (_WordT& __w : _M_w) + __w = ~static_cast<_WordT>(0);; + return; + } +#endif + __builtin_memset(_M_w, 0xFF, _Nw * sizeof(_WordT)); } _GLIBCXX14_CONSTEXPR void