On Wed, Feb 28, 2024 at 11:32 AM Ken Matsui <kmat...@gcc.gnu.org> wrote:
>
> Hi,
>
> 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:

Ping.  Ok for trunk or maybe for 15?

>
> 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)
>
> Sincerely,
> Ken Matsui
>
> Ken Matsui (26):
>   c++: Implement __is_const built-in trait
>   libstdc++: Optimize std::is_const compilation performance
>   c++: Implement __is_volatile built-in trait
>   libstdc++: Optimize std::is_volatile compilation performance
>   c++: Implement __is_pointer built-in trait
>   libstdc++: Optimize std::is_pointer compilation performance
>   c++: Implement __is_unbounded_array built-in trait
>   libstdc++: Optimize std::is_unbounded_array compilation performance
>   c++: Implement __add_pointer built-in trait
>   libstdc++: Optimize std::add_pointer compilation performance
>   c++: Implement __remove_extent built-in trait
>   libstdc++: Optimize std::remove_extent compilation performance
>   c++: Implement __remove_all_extents built-in trait
>   libstdc++: Optimize std::remove_all_extents compilation performance
>   c++: Implement __add_lvalue_reference built-in trait
>   libstdc++: Optimize std::add_lvalue_reference compilation performance
>   c++: Implement __add_rvalue_reference built-in trait
>   libstdc++: Optimize std::add_rvalue_reference compilation performance
>   c++: Implement __decay built-in trait
>   libstdc++: Optimize std::decay compilation performance
>   c++: Implement __rank built-in trait
>   libstdc++: Optimize std::rank compilation performance
>   c++: Implement __is_invocable built-in trait
>   libstdc++: Optimize std::is_invocable compilation performance
>   c++: Implement __is_nothrow_invocable built-in 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                              | 132 +++++++
>  gcc/cp/semantics.cc                           |  92 ++++-
>  .../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          | 142 ++++++-
>  .../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, 1389 insertions(+), 13 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
>

Reply via email to