From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 7934) id D91BE384770D; Sat, 16 Dec 2023 17:00:34 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D91BE384770D DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1702746034; bh=2w/SllG67ljOdsdjxG+LeGXpFmbGhWIxltiMOUjieTw=; h=From:To:Subject:Date:From; b=gWD0qetc767BFONfwWzlrZDmlqbls+RtZ9sAqNM2k2weAYKdrH0PaNxoUV3Soe/j1 Q8YUEcxOi2qIDVXM64BZgNTXxMIts/0WKSLVY6gG7u35R/tNfoVfctgJKNksV1XhfQ R7oEa6Ksi55dMYF9nD8DQXwmoxmAaebgG322Q3QU= MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Ken Matsui To: gcc-cvs@gcc.gnu.org, libstdc++-cvs@gcc.gnu.org Subject: [gcc r14-6628] libstdc++: Optimize std::is_member_object_pointer compilation performance X-Act-Checkin: gcc X-Git-Author: Ken Matsui X-Git-Refname: refs/heads/master X-Git-Oldrev: 53f9d0cc07a0c85bf53541f79cc19730abcd17b9 X-Git-Newrev: fa454b8dd0346a1821338e2cfcf27c9cff0f1b5c Message-Id: <20231216170034.D91BE384770D@sourceware.org> Date: Sat, 16 Dec 2023 17:00:34 +0000 (GMT) List-Id: https://gcc.gnu.org/g:fa454b8dd0346a1821338e2cfcf27c9cff0f1b5c commit r14-6628-gfa454b8dd0346a1821338e2cfcf27c9cff0f1b5c Author: Ken Matsui Date: Tue Sep 12 00:14:06 2023 -0700 libstdc++: Optimize std::is_member_object_pointer compilation performance This patch optimizes the compilation performance of std::is_member_object_pointer by dispatching to the new __is_member_object_pointer built-in trait. libstdc++-v3/ChangeLog: * include/std/type_traits (is_member_object_pointer): Use __is_member_object_pointer built-in trait. (is_member_object_pointer_v): Likewise. Signed-off-by: Ken Matsui Reviewed-by: Jonathan Wakely Diff: --- libstdc++-v3/include/std/type_traits | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/libstdc++-v3/include/std/type_traits b/libstdc++-v3/include/std/type_traits index 99ae825301c..1edd05acb4c 100644 --- a/libstdc++-v3/include/std/type_traits +++ b/libstdc++-v3/include/std/type_traits @@ -574,6 +574,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION struct is_rvalue_reference<_Tp&&> : public true_type { }; + /// is_member_object_pointer +#if _GLIBCXX_USE_BUILTIN_TRAIT(__is_member_object_pointer) + template + struct is_member_object_pointer + : public __bool_constant<__is_member_object_pointer(_Tp)> + { }; +#else template struct __is_member_object_pointer_helper : public false_type { }; @@ -582,11 +589,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION struct __is_member_object_pointer_helper<_Tp _Cp::*> : public __not_>::type { }; - /// is_member_object_pointer + template struct is_member_object_pointer : public __is_member_object_pointer_helper<__remove_cv_t<_Tp>>::type { }; +#endif #if _GLIBCXX_USE_BUILTIN_TRAIT(__is_member_function_pointer) /// is_member_function_pointer @@ -3213,9 +3221,16 @@ template inline constexpr bool is_rvalue_reference_v = false; template inline constexpr bool is_rvalue_reference_v<_Tp&&> = true; + +#if _GLIBCXX_USE_BUILTIN_TRAIT(__is_member_object_pointer) +template + inline constexpr bool is_member_object_pointer_v = + __is_member_object_pointer(_Tp); +#else template inline constexpr bool is_member_object_pointer_v = is_member_object_pointer<_Tp>::value; +#endif #if _GLIBCXX_USE_BUILTIN_TRAIT(__is_member_function_pointer) template