From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 7934) id 2AC54384DEEC; Sat, 16 Dec 2023 17:00:09 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 2AC54384DEEC DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1702746009; bh=vP/DWDCXlpOPIYZAplCDeZPbqDCgKjsbRuDIkNcVCvI=; h=From:To:Subject:Date:From; b=oBJXpQfXZ9JVWoaZ7RITYOLXjmTV1Z9ZdaH5ejnVer9+X9NwFkMWIxBwfYTFHeDYP fgkMOKve+Kpg5GrnSa93zCrW3jDbnfiKEAVVMqrJ9weKDSfwXFd4ys65NdAuxBmRCY shM7ScPYz8pxO/2iQjiOEfpjjhI3uxNWGfobtJHA= 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-6623] libstdc++: Optimize std::is_array compilation performance X-Act-Checkin: gcc X-Git-Author: Ken Matsui X-Git-Refname: refs/heads/master X-Git-Oldrev: 5f1bed2a7af828103ca23a3546466a23e8dd2f30 X-Git-Newrev: 7fd9c349e455345a8b94d8fcee1c92b5c92873a5 Message-Id: <20231216170009.2AC54384DEEC@sourceware.org> Date: Sat, 16 Dec 2023 17:00:09 +0000 (GMT) List-Id: https://gcc.gnu.org/g:7fd9c349e455345a8b94d8fcee1c92b5c92873a5 commit r14-6623-g7fd9c349e455345a8b94d8fcee1c92b5c92873a5 Author: Ken Matsui Date: Tue Mar 21 08:57:14 2023 -0700 libstdc++: Optimize std::is_array compilation performance This patch optimizes the compilation performance of std::is_array by dispatching to the new __is_array built-in trait. libstdc++-v3/ChangeLog: * include/std/type_traits (is_array): Use __is_array built-in trait. (is_array_v): Likewise. Signed-off-by: Ken Matsui Reviewed-by: Jonathan Wakely Diff: --- libstdc++-v3/include/std/type_traits | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/libstdc++-v3/include/std/type_traits b/libstdc++-v3/include/std/type_traits index 677cd934b94..64f9d67fe29 100644 --- a/libstdc++-v3/include/std/type_traits +++ b/libstdc++-v3/include/std/type_traits @@ -523,6 +523,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { }; /// is_array +#if _GLIBCXX_USE_BUILTIN_TRAIT(__is_array) + template + struct is_array + : public __bool_constant<__is_array(_Tp)> + { }; +#else template struct is_array : public false_type { }; @@ -534,6 +540,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template struct is_array<_Tp[]> : public true_type { }; +#endif template struct __is_pointer_helper @@ -3169,12 +3176,17 @@ template template inline constexpr bool is_floating_point_v = is_floating_point<_Tp>::value; +#if _GLIBCXX_USE_BUILTIN_TRAIT(__is_array) +template + inline constexpr bool is_array_v = __is_array(_Tp); +#else template inline constexpr bool is_array_v = false; template inline constexpr bool is_array_v<_Tp[]> = true; template inline constexpr bool is_array_v<_Tp[_Num]> = true; +#endif template inline constexpr bool is_pointer_v = is_pointer<_Tp>::value;