]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
libstdc++: Use memset to optimize std::bitset::set() [PR113807]
authorJonathan Wakely <jwakely@redhat.com>
Thu, 8 Feb 2024 15:46:08 +0000 (15:46 +0000)
committerJonathan Wakely <jwakely@redhat.com>
Thu, 15 Feb 2024 11:43:21 +0000 (11:43 +0000)
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.

libstdc++-v3/include/std/bitset

index 3243c6497314fd4f7e4b1c7909cb9e82df4a70dc..16c4040f532f7e774f36a897d45b9f0273dedc76 100644 (file)
@@ -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