https://gcc.gnu.org/g:e717c322c6ee21bd5d9cf9373dcd9b4e8ba3312f

commit r15-5216-ge717c322c6ee21bd5d9cf9373dcd9b4e8ba3312f
Author: Jonathan Wakely <jwak...@redhat.com>
Date:   Fri Nov 1 21:52:37 2024 +0000

    libstdc++: Replace _Hashtable::__fwd_value_for with cast
    
    We can just use a cast to the appropriate type instead of calling a
    function to do it. This gives the compiler less work to compile and
    optimize, and at -O0 avoids a function call per element.
    
    libstdc++-v3/ChangeLog:
    
            * include/bits/hashtable.h (_Hashtable::__fwd_value_for):
            Remove.
            (_Hashtable::_M_assign): Use static_cast instead of
            __fwd_value_for.
    
    Reviewed-by: François Dumont <fdum...@gcc.gnu.org>

Diff:
---
 libstdc++-v3/include/bits/hashtable.h | 14 +++++---------
 1 file changed, 5 insertions(+), 9 deletions(-)

diff --git a/libstdc++-v3/include/bits/hashtable.h 
b/libstdc++-v3/include/bits/hashtable.h
index bf6eed7c1c69..f1c30896bcb0 100644
--- a/libstdc++-v3/include/bits/hashtable.h
+++ b/libstdc++-v3/include/bits/hashtable.h
@@ -325,13 +325,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
        __node_ptr _M_node;
       };
 
-      template<typename _Ht>
-       static constexpr
-       __conditional_t<std::is_lvalue_reference<_Ht>::value,
-                       const value_type&, value_type&&>
-       __fwd_value_for(value_type& __val) noexcept
-       { return std::move(__val); }
-
       // Compile-time diagnostics.
 
       // _Hash_code_base has everything protected, so use this derived type to
@@ -1406,11 +1399,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
            if (!__ht._M_before_begin._M_nxt)
              return;
 
+           using _FromVal = __conditional_t<is_lvalue_reference<_Ht>::value,
+                                            const value_type&, value_type&&>;
+
            // First deal with the special first node pointed to by
            // _M_before_begin.
            __node_ptr __ht_n = __ht._M_begin();
            __node_ptr __this_n
-             = __node_gen(__fwd_value_for<_Ht>(__ht_n->_M_v()));
+             = __node_gen(static_cast<_FromVal>(__ht_n->_M_v()));
            this->_M_copy_code(*__this_n, *__ht_n);
            _M_update_bbegin(__this_n);
 
@@ -1418,7 +1414,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
            __node_ptr __prev_n = __this_n;
            for (__ht_n = __ht_n->_M_next(); __ht_n; __ht_n = __ht_n->_M_next())
              {
-               __this_n = __node_gen(__fwd_value_for<_Ht>(__ht_n->_M_v()));
+               __this_n = __node_gen(static_cast<_FromVal>(__ht_n->_M_v()));
                __prev_n->_M_nxt = __this_n;
                this->_M_copy_code(*__this_n, *__ht_n);
                size_type __bkt = _M_bucket_index(*__this_n);

Reply via email to