From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0b-00641c01.pphosted.com (mx0b-00641c01.pphosted.com [205.220.177.146]) by sourceware.org (Postfix) with ESMTPS id 74694384AB64; Thu, 2 May 2024 16:16:38 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 74694384AB64 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=gcc.gnu.org Authentication-Results: sourceware.org; spf=fail smtp.mailfrom=gcc.gnu.org ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 74694384AB64 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=205.220.177.146 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1714666605; cv=none; b=iPWAp2hDfY6DZ68QzWMyC/lUsFecPhECikfF3cqS+LlA6gT5c7bw2cucC9tJdwwshiN4BFhSa0IAi8OxLC5jlhfMQfz6IiF70XR8cagsY//Rdpf4aTpJ+7ouzBdOWtsITzO/6ebV7TR0xi3XucoLzpjMUgw6gJ3Ztp58TBmxlRc= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1714666605; c=relaxed/simple; bh=TgR/ime1jOALEt4mzADNKfGc/evGPKuQb7rNFhXRyGw=; h=From:To:Subject:Date:Message-ID:MIME-Version; b=nVIoOntdJcggo+5HLoOl+HZpxMKb02766kutm6tqumoE+HQhGGzKNgYdgWl4ShCA+IPZK0bQsxUVgNEzkB/iVZM2vHU12MTs0USReBOeu2rARXDYi0gY51G9KdlR141+A0IUxPiNeWlFItkJNjGvmqc82cKbVA/rA+mOfaArfsw= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from pps.filterd (m0247476.ppops.net [127.0.0.1]) by mx0a-00641c01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 442G5mlX021932; Thu, 2 May 2024 16:16:38 GMT Received: from mxout25.s.uw.edu (mxout25.s.uw.edu [140.142.234.175]) by mx0a-00641c01.pphosted.com (PPS) with ESMTPS id 3xv4e4kd99-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 02 May 2024 16:16:37 +0000 (GMT) Received: from smtp.washington.edu (smtp.washington.edu [128.208.60.54]) by mxout25.s.uw.edu (8.14.4+UW20.07/8.14.4+UW24.02) with ESMTP id 442GGFMS024912 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 2 May 2024 09:16:16 -0700 X-Auth-Received: from ken-20xw00qgus.dhcp4.washington.edu ([10.154.75.239]) (authenticated authid=kmatsui) by smtp.washington.edu (8.16.1+UW21.10/8.14.4+UW24.02) with ESMTPSA id 442GGFod023119 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 2 May 2024 09:16:15 -0700 X-UW-Orig-Sender: kmatsui@smtp.washington.edu From: Ken Matsui To: gcc-patches@gcc.gnu.org Cc: libstdc++@gcc.gnu.org, jason@redhat.com, Ken Matsui Subject: [PATCH v16 00/26] Optimize more type traits Date: Thu, 2 May 2024 09:13:26 -0700 Message-ID: <20240502161614.3705912-1-kmatsui@gcc.gnu.org> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240228192843.188979-1-kmatsui@gcc.gnu.org> References: <20240228192843.188979-1-kmatsui@gcc.gnu.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Proofpoint-ORIG-GUID: GFopZ3g0KHkCmfqSLONbdrPJfUG5B9cK X-Proofpoint-GUID: GFopZ3g0KHkCmfqSLONbdrPJfUG5B9cK X-outbound-smtp: 1 x-header: uw-relay-non-domains X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1011,Hydra:6.0.650,FMLib:17.11.176.26 definitions=2024-05-02_05,2024-05-02_03,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 spamscore=0 lowpriorityscore=0 suspectscore=0 bulkscore=0 phishscore=0 mlxscore=0 priorityscore=1501 clxscore=1034 impostorscore=0 mlxlogscore=973 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2404010003 definitions=main-2405020106 X-Spam-Status: No, score=-7.2 required=5.0 tests=BAYES_00,JMQ_SPF_NEUTRAL,KAM_DMARC_STATUS,RCVD_IN_DNSWL_LOW,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_NEUTRAL,TXREP autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: Changes from v15: * Rebased on top of trunk * Fixed build_invoke * Implemented object_type_p & referenceable_type_p * Prefixed all built-in traits with __builtin instead of __ -- This patch series implements __is_const, __is_volatile, __is_pointer, and __is_unbounded_array built-in traits, which were isolated from my previous patch series "Optimize type traits compilation performance" because they contained performance regression. I confirmed that this patch series does not cause any performance regression. The main reason of the performance regression were the exhaustiveness of the benchmarks and the instability of the benchmark results. Also, this patch series includes built-ins for add_pointer, remove_extent, remove_all_extents, add_lvalue_reference, add_rvalue_reference, decay, rank, is_invocable, and is_nothrow_invocable. Here are the benchmark results: is_const: https://github.com/ken-matsui/gcc-bench/blob/main/is_const.md#sat-dec-23-090605-am-pst-2023 time: -4.36603%, peak memory: -0.300891%, total memory: -0.247934% is_const_v: https://github.com/ken-matsui/gcc-bench/blob/main/is_const_v.md#sat-jun-24-044815-am-pdt-2023 time: -2.86467%, peak memory: -1.0654%, total memory: -1.62369% is_volatile: https://github.com/ken-matsui/gcc-bench/blob/main/is_volatile.md#sun-oct-22-091644-pm-pdt-2023 time: -5.25164%, peak memory: -0.337971%, total memory: -0.247934% is_volatile_v: https://github.com/ken-matsui/gcc-bench/blob/main/is_volatile_v.md#sat-dec-23-091518-am-pst-2023 time: -4.06816%, peak memory: -0.609298%, total memory: -0.659134% is_pointer: https://github.com/ken-matsui/gcc-bench/blob/main/is_pointer.md#sat-dec-23-124903-pm-pst-2023 time: -2.47124%, peak memory: -2.98207%, total memory: -4.0811% is_pointer_v: https://github.com/ken-matsui/gcc-bench/blob/main/is_pointer_v.md#sun-oct-22-122257-am-pdt-2023 time: -4.71336%, peak memory: -2.25026%, total memory: -3.125% is_unbounded_array: https://github.com/ken-matsui/gcc-bench/blob/main/is_unbounded_array.md#sun-oct-22-091644-pm-pdt-2023 time: -6.33287%, peak memory: -0.602494%, total memory: -1.56035% is_unbounded_array_v: https://github.com/ken-matsui/gcc-bench/blob/main/is_unbounded_array_v.md#sat-dec-23-010046-pm-pst-2023 time: -1.50025%, peak memory: -1.07386%, total memory: -2.32394% add_pointer_t: https://github.com/ken-matsui/gcc-bench/blob/main/add_pointer_t.md#wed-feb-28-060044-am-pst-2024 time: -21.6673%, peak memory: -14.6666%, total memory: -17.4716% remove_extent_t: https://github.com/ken-matsui/gcc-bench/blob/main/remove_extent_t.md#wed-feb-28-063021-am-pst-2024 time: -14.4089%, peak memory: -2.71836%, total memory: -9.87013% remove_all_extents_t: https://github.com/ken-matsui/gcc-bench/blob/main/remove_all_extents_t.md#wed-feb-28-064716-am-pst-2024 time: -28.8941%, peak memory: -16.6981%, total memory: -23.6088% add_lvalue_reference_t: https://github.com/ken-matsui/gcc-bench/blob/main/add_lvalue_reference_t.md#wed-feb-28-070023-am-pst-2024 time: -33.8827%, peak memory: -24.9292%, total memory: -25.3043% add_rvalue_reference_t: https://github.com/ken-matsui/gcc-bench/blob/main/add_rvalue_reference_t.md#wed-feb-28-070701-am-pst-2024 time: -23.9186%, peak memory: -17.1311%, total memory: -19.5891% decay_t: https://github.com/ken-matsui/gcc-bench/blob/main/decay_t.md#wed-feb-28-072330-am-pst-2024 time: -42.4076%, peak memory: -29.2077%, total memory: -33.0914% rank: https://github.com/ken-matsui/gcc-bench/blob/main/rank.md#wed-feb-28-074917-am-pst-2024 time: -33.7312%, peak memory: -27.5885%, total memory: -34.5736% rank_v: https://github.com/ken-matsui/gcc-bench/blob/main/rank_v.md#wed-feb-28-073632-am-pst-2024 time: -40.7174%, peak memory: -16.4653%, total memory: -23.0131% is_invocable_v: https://github.com/ken-matsui/gcc-bench/blob/main/is_invocable.md#wed-feb-28-111001-am-pst-2024 time: -58.8307%, peak memory: -59.4966%, total memory: -59.8871% (This benchmark is not exhaustive as my laptop crashed with larger benchmarks) is_nothrow_invocable_v: https://github.com/ken-matsui/gcc-bench/blob/main/is_nothrow_invocable.md#wed-feb-28-112414-am-pst-2024 time: -70.4102%, peak memory: -62.5516%, total memory: -65.5853% (This benchmark is not exhaustive as my laptop crashed with larger benchmarks) Ken Matsui (26): c++: Implement __builtin_is_const trait libstdc++: Optimize std::is_const compilation performance c++: Implement __builtin_is_volatile trait libstdc++: Optimize std::is_volatile compilation performance c++: Implement __builtin_is_pointer trait libstdc++: Optimize std::is_pointer compilation performance c++: Implement __builtin_is_unbounded_array trait libstdc++: Optimize std::is_unbounded_array compilation performance c++: Implement __builtin_add_pointer trait libstdc++: Optimize std::add_pointer compilation performance c++: Implement __builtin_remove_extent trait libstdc++: Optimize std::remove_extent compilation performance c++: Implement __builtin_remove_all_extents trait libstdc++: Optimize std::remove_all_extents compilation performance c++: Implement __builtin_add_lvalue_reference trait libstdc++: Optimize std::add_lvalue_reference compilation performance c++: Implement __builtin_add_rvalue_reference trait libstdc++: Optimize std::add_rvalue_reference compilation performance c++: Implement __builtin_decay trait libstdc++: Optimize std::decay compilation performance c++: Implement __builtin_rank trait libstdc++: Optimize std::rank compilation performance c++: Implement __builtin_is_invocable trait libstdc++: Optimize std::is_invocable compilation performance c++: Implement __builtin_is_nothrow_invocable trait libstdc++: Optimize std::is_nothrow_invocable compilation performance gcc/cp/constraint.cc | 27 ++ gcc/cp/cp-trait.def | 13 + gcc/cp/cp-tree.h | 2 + gcc/cp/method.cc | 134 +++++++ gcc/cp/semantics.cc | 118 +++++- .../g++.dg/ext/add_lvalue_reference.C | 21 ++ gcc/testsuite/g++.dg/ext/add_pointer.C | 39 ++ .../g++.dg/ext/add_rvalue_reference.C | 20 + gcc/testsuite/g++.dg/ext/decay.C | 22 ++ gcc/testsuite/g++.dg/ext/has-builtin-1.C | 39 ++ gcc/testsuite/g++.dg/ext/is_const.C | 20 + gcc/testsuite/g++.dg/ext/is_invocable1.C | 349 ++++++++++++++++++ gcc/testsuite/g++.dg/ext/is_invocable2.C | 139 +++++++ gcc/testsuite/g++.dg/ext/is_invocable3.C | 51 +++ gcc/testsuite/g++.dg/ext/is_invocable4.C | 33 ++ .../g++.dg/ext/is_nothrow_invocable.C | 62 ++++ gcc/testsuite/g++.dg/ext/is_pointer.C | 51 +++ gcc/testsuite/g++.dg/ext/is_unbounded_array.C | 37 ++ gcc/testsuite/g++.dg/ext/is_volatile.C | 20 + gcc/testsuite/g++.dg/ext/rank.C | 24 ++ gcc/testsuite/g++.dg/ext/remove_all_extents.C | 16 + gcc/testsuite/g++.dg/ext/remove_extent.C | 16 + libstdc++-v3/include/bits/cpp_type_traits.h | 31 +- libstdc++-v3/include/std/type_traits | 143 ++++++- .../is_invocable/incomplete_args_neg.cc | 1 + .../20_util/is_invocable/incomplete_neg.cc | 1 + .../incomplete_args_neg.cc | 1 + .../is_nothrow_invocable/incomplete_neg.cc | 1 + 28 files changed, 1415 insertions(+), 16 deletions(-) create mode 100644 gcc/testsuite/g++.dg/ext/add_lvalue_reference.C create mode 100644 gcc/testsuite/g++.dg/ext/add_pointer.C create mode 100644 gcc/testsuite/g++.dg/ext/add_rvalue_reference.C create mode 100644 gcc/testsuite/g++.dg/ext/decay.C create mode 100644 gcc/testsuite/g++.dg/ext/is_const.C create mode 100644 gcc/testsuite/g++.dg/ext/is_invocable1.C create mode 100644 gcc/testsuite/g++.dg/ext/is_invocable2.C create mode 100644 gcc/testsuite/g++.dg/ext/is_invocable3.C create mode 100644 gcc/testsuite/g++.dg/ext/is_invocable4.C create mode 100644 gcc/testsuite/g++.dg/ext/is_nothrow_invocable.C create mode 100644 gcc/testsuite/g++.dg/ext/is_pointer.C create mode 100644 gcc/testsuite/g++.dg/ext/is_unbounded_array.C create mode 100644 gcc/testsuite/g++.dg/ext/is_volatile.C create mode 100644 gcc/testsuite/g++.dg/ext/rank.C create mode 100644 gcc/testsuite/g++.dg/ext/remove_all_extents.C create mode 100644 gcc/testsuite/g++.dg/ext/remove_extent.C -- 2.44.0