Thank you so much for taking the benchmark! This is a great improvement than I thought. In GCC contributions, do I need to benchmark (and report) every built-in trait I implement? On Mon, Mar 20, 2023 at 8:24 AM Patrick Palka wrote: > On Mon, Mar 20, 2023 at 5:56 AM Ken Matsui > wrote: > > > > > Does it actually make compilation faster though? > > > > > > Has it been measured? > > > > In my understanding, what I have implemented so far is so simple that > > it does not affect the speed. These traits are what Partick kindly > > recommended to get started. As explained on the GSoC page, some traits > > might involve expensive instantiation of multiple class templates. So > > IMHO, implementing built-in traits for those traits can make > > compilation cheaper. > > > > I have not measured it, but Patrick might have done? > > Although the native implementation of using two partial > specializations is very efficient, I'd suspect using a built-in would > be even better because it'd avoid the work of having to figure out > which of the two partial specializations to instantiate. > > I contrived the attached benchmark to measure this, which instantiates > ~160k specializations of is_reference_v (it was simpler to write a > benchmark for the variable template version). On my machine gcc trunk > (release build) as well as Clang 15 use between 10-15% less > time/memory with -DUSE_BUILTIN than without for this benchmark, so > this suggests the built-in improves compile time/memory usage for this > trait by at least 10-15%. For more complicated traits the improvement > should be even better. > > > > > On Mon, Mar 20, 2023 at 2:14 AM Jonathan Wakely > wrote: > > > > > > On Mon, 20 Mar 2023 at 08:08, Xi Ruoyao via Libstdc++ > > > wrote: > > > > > > > > On Mon, 2023-03-20 at 01:03 -0700, Ken Matsui wrote: > > > > > Oops, I assumed those were my email... Thank you for your heads up > and > > > > > your comments! > > > > > > > > > > > Bad ChangeLog format. You should have a tab (not 4 or 8 spaces, > nor > > > > > > nothing) to indent the ChangeLog content. > > > > > > > > > > Do you mean like the following? > > > > > > > > > > ``` > > > > > libstdc++-v3/ChangeLog: > > > > > > > > > > [TAB]* include/std/type_traits (is_reference): Use __is_reference > > > > > built-in > > > > > trait. > > > > > ``` > > > > > > > > Yep. > > > > > > > > > > Is there any benefit to use a builtin, instead of the existing > > > > > > implementation? I can see no but maybe I'm stupid. > > > > > > > > > > My patches are based on the GSoC project "C++: Implement compiler > > > > > built-in traits for the standard library traits". These built-in > > > > > traits basically make the compilation faster. > > > > > > > > > > https://gcc.gnu.org/wiki/SummerOfCode > > > > > > > > Ok, to me making compilation faster is a valid reason. > > > > > > Does it actually make compilation faster though? > > > > > > Has it been measured? > > > > > > > > > The patch fails to apply. It seems because your mail client > inserted an > > > > > > additional newline before "b/". Try to use git-send-email or > configure > > > > > > the mail client properly. > > > > > > > > > > Let me try to use git-send-email instead. I stupidly don't > understand > > > > > how to use them, so I was making my patches manually... > > > > > > > > Or adjust the mail client correctly. You can send the patch to > yourself > > > > first and see if it's not "mangled" by the mail client when you debug > > > > such an issue... > > > > > > > > But when you finally end up sending 10 patches in a series you'll > find > > > > git send-email much easier :). > > > > > > Figuring out how to generate proper patches is an important part of > > > contributing to GCC, so part of any GSoC project. > > >