Message ID | CAML+3pVYKw0zzseC1H+yKwO5L77S001qcvwgwh80AizD80djOw@mail.gmail.com |
---|---|
State | Superseded |
Headers |
Return-Path: <gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org> X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 076733857C48 for <patchwork@sourceware.org>; Sun, 19 Mar 2023 04:22:32 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 076733857C48 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1679199752; bh=f0QFC0xS7ENm4PzPammNRVtak38k4zDiC034BY9N0fU=; h=Date:Subject:To:Cc:List-Id:List-Unsubscribe:List-Archive: List-Post:List-Help:List-Subscribe:From:Reply-To:From; b=MOJ0M+FbJCCcHjHUhkiNfFxta6/3qR9NTMVPDhjcKXaKUZAWAxSMlpA69aV+IaJSm 3fdpLXimC9m3gNhA9aOtWvwl9epS1XS99zY+a1VBGu6NG4G2jzplMFSaB2c9K9wDed Q9sjKaj+6XeqTV9hxlfJQmpRY+367PZ+N43CRUvs= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-ua1-x934.google.com (mail-ua1-x934.google.com [IPv6:2607:f8b0:4864:20::934]) by sourceware.org (Postfix) with ESMTPS id 8EEA23858D1E for <gcc-patches@gcc.gnu.org>; Sun, 19 Mar 2023 04:21:57 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 8EEA23858D1E Received: by mail-ua1-x934.google.com with SMTP id i22so5836115uat.8 for <gcc-patches@gcc.gnu.org>; Sat, 18 Mar 2023 21:21:57 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1679199716; h=cc:to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=f0QFC0xS7ENm4PzPammNRVtak38k4zDiC034BY9N0fU=; b=hMsUEomcxJdDIGtR5yab47Vx0zRX+rjZlCL86qY+L3vPSLaj6hNPTzvysDcgBMMYij mC3dY/QgYbVFGIytt6j4O6vRWQE4ezopp4A0Y4Zs4ak1K7toBBhJZcT3R6rv0hkcdRgD /fHzQfqgjhLMYxc4NXUyAy5SBtCRWnfozCTTK4JkP75yitZkBi8xSLwT6ml3E+I0qfIS khhVoz2ak6i8PYmFRfEWSeQUMnMx/H9NXO7yfMHGx9khJnQ8mfsrdGoB064DSvjhWC+q j8ZtsBRtybxYaNi2Sla1H4nHE8braE5Xdxc2JbMXdsbmBCkVpbfc1iOxFvmtrmX4az5Z w0Lw== X-Gm-Message-State: AO0yUKWbjCsNhjXbkfCLBHBMHAoq3gG1IWzxzO63cD1TXBrHEyi1vbq3 k51fQUf+xFzySI8fhdK5CEn2mp1kfzGQe9jO3aA36LJq0QNYZk4xB4o= X-Google-Smtp-Source: AK7set8pZQ51xTLF3QZESO6mgDEB6wwpk63wEHZ9JUORc7Xr2pGCdNZjP+AKpPs91Lb+PC2ZrrP0L5XffW0sO0TKy6E= X-Received: by 2002:a05:6130:304:b0:68b:8665:a73b with SMTP id ay4-20020a056130030400b0068b8665a73bmr2323407uab.1.1679199716735; Sat, 18 Mar 2023 21:21:56 -0700 (PDT) MIME-Version: 1.0 Date: Sat, 18 Mar 2023 21:21:46 -0700 Message-ID: <CAML+3pVYKw0zzseC1H+yKwO5L77S001qcvwgwh80AizD80djOw@mail.gmail.com> Subject: [PATCH] libstdc++: use new built-in trait __is_reference To: gcc-patches@gcc.gnu.org Cc: Patrick Palka <ppalka@redhat.com> Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list <gcc-patches.gcc.gnu.org> List-Unsubscribe: <https://gcc.gnu.org/mailman/options/gcc-patches>, <mailto:gcc-patches-request@gcc.gnu.org?subject=unsubscribe> List-Archive: <https://gcc.gnu.org/pipermail/gcc-patches/> List-Post: <mailto:gcc-patches@gcc.gnu.org> List-Help: <mailto:gcc-patches-request@gcc.gnu.org?subject=help> List-Subscribe: <https://gcc.gnu.org/mailman/listinfo/gcc-patches>, <mailto:gcc-patches-request@gcc.gnu.org?subject=subscribe> From: Ken Matsui via Gcc-patches <gcc-patches@gcc.gnu.org> Reply-To: Ken Matsui <kmatsui@cs.washington.edu> Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" <gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org> |
Series |
libstdc++: use new built-in trait __is_reference
|
|
Commit Message
Ken Matsui
March 19, 2023, 4:21 a.m. UTC
libstdc++-v3/ChangeLog: * include/std/type_traits (is_reference): Use __is_reference built-in trait. ---
Comments
You need to CC libstdc++@gcc.gnu.org for any patches touching libstdc++. On Sat, 2023-03-18 at 21:21 -0700, Ken Matsui via Gcc-patches wrote: > libstdc++-v3/ChangeLog: > > * include/std/type_traits (is_reference): Use __is_reference built-in > trait. Bad ChangeLog format. You should have a tab (not 4 or 8 spaces, nor nothing) to indent the ChangeLog content. Is there any benefit to use a builtin, instead of the existing implementation? I can see no but maybe I'm stupid. > --- > diff --git a/libstdc++-v3/include/std/type_traits > b/libstdc++-v3/include/std/type_traits 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. > index 2bd607a8b8f..18408d8ceb6 100644 > --- a/libstdc++-v3/include/std/type_traits > +++ b/libstdc++-v3/include/std/type_traits > @@ -639,6 +639,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION > // Composite type categories. > > /// is_reference > +#if __has_builtin(__is_reference) > + template<typename _Tp> > + struct is_reference > + : public integral_constant<bool, __is_reference(_Tp)> If a patch depends on another patch not applied yet, sent them in a series. Or people are puzzled because when this patch is applied alone, the code fails to build. > + { }; > +#else > template<typename _Tp> > struct is_reference > : public false_type > @@ -653,6 +659,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION > struct is_reference<_Tp&&> > : public true_type > { }; > +#endif > > /// is_arithmetic > template<typename _Tp>
I see. Thank you! On Mon, Mar 20, 2023 at 12:26 AM Xi Ruoyao <xry111@xry111.site> wrote: > > You need to CC libstdc++@gcc.gnu.org for any patches touching libstdc++. > > On Sat, 2023-03-18 at 21:21 -0700, Ken Matsui via Gcc-patches wrote: > > libstdc++-v3/ChangeLog: > > > > * include/std/type_traits (is_reference): Use __is_reference built-in > > trait. > > Bad ChangeLog format. You should have a tab (not 4 or 8 spaces, nor > nothing) to indent the ChangeLog content. > > Is there any benefit to use a builtin, instead of the existing > implementation? I can see no but maybe I'm stupid. > > > --- > > diff --git a/libstdc++-v3/include/std/type_traits > > b/libstdc++-v3/include/std/type_traits > > 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. > > > index 2bd607a8b8f..18408d8ceb6 100644 > > --- a/libstdc++-v3/include/std/type_traits > > +++ b/libstdc++-v3/include/std/type_traits > > @@ -639,6 +639,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION > > // Composite type categories. > > > > /// is_reference > > +#if __has_builtin(__is_reference) > > + template<typename _Tp> > > + struct is_reference > > + : public integral_constant<bool, __is_reference(_Tp)> > > If a patch depends on another patch not applied yet, sent them in a > series. Or people are puzzled because when this patch is applied alone, > the code fails to build. > > > + { }; > > +#else > > template<typename _Tp> > > struct is_reference > > : public false_type > > @@ -653,6 +659,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION > > struct is_reference<_Tp&&> > > : public true_type > > { }; > > +#endif > > > > /// is_arithmetic > > template<typename _Tp> > > -- > Xi Ruoyao <xry111@xry111.site> > School of Aerospace Science and Technology, Xidian University
On Mon, 2023-03-20 at 00:30 -0700, Ken Matsui wrote: > I see. Thank you! Please continue to read. I guess you missed some inline comments from me... > > On Mon, Mar 20, 2023 at 12:26 AM Xi Ruoyao <xry111@xry111.site> wrote: > > > > You need to CC libstdc++@gcc.gnu.org for any patches touching > > libstdc++. > > > > On Sat, 2023-03-18 at 21:21 -0700, Ken Matsui via Gcc-patches wrote: > > > libstdc++-v3/ChangeLog: > > > > > > * include/std/type_traits (is_reference): Use __is_reference > > > built-in > > > trait. > > > > Bad ChangeLog format. You should have a tab (not 4 or 8 spaces, nor > > nothing) to indent the ChangeLog content. > > > > Is there any benefit to use a builtin, instead of the existing > > implementation? I can see no but maybe I'm stupid. > > > > > --- > > > diff --git a/libstdc++-v3/include/std/type_traits > > > b/libstdc++-v3/include/std/type_traits > > > > 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. > > > > > index 2bd607a8b8f..18408d8ceb6 100644 > > > --- a/libstdc++-v3/include/std/type_traits > > > +++ b/libstdc++-v3/include/std/type_traits > > > @@ -639,6 +639,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION > > > // Composite type categories. > > > > > > /// is_reference > > > +#if __has_builtin(__is_reference) > > > + template<typename _Tp> > > > + struct is_reference > > > + : public integral_constant<bool, __is_reference(_Tp)> > > > > If a patch depends on another patch not applied yet, sent them in a > > series. Or people are puzzled because when this patch is applied > > alone, > > the code fails to build. > > > > > + { }; > > > +#else > > > template<typename _Tp> > > > struct is_reference > > > : public false_type > > > @@ -653,6 +659,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION > > > struct is_reference<_Tp&&> > > > : public true_type > > > { }; > > > +#endif > > > > > > /// is_arithmetic > > > template<typename _Tp> > > > > -- > > Xi Ruoyao <xry111@xry111.site> > > School of Aerospace Science and Technology, Xidian University
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. ``` > 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 > 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... > If a patch depends on another patch not applied yet, sent them in a > series. Or people are puzzled because when this patch is applied alone, > the code fails to build. Oooh, this one! [PATCH 3/7] - the third patch in a series of seven patches I totally missed that. Thank you! On Mon, Mar 20, 2023 at 12:51 AM Xi Ruoyao <xry111@xry111.site> wrote: > > On Mon, 2023-03-20 at 00:30 -0700, Ken Matsui wrote: > > I see. Thank you! > > Please continue to read. I guess you missed some inline comments from > me... > > > > > On Mon, Mar 20, 2023 at 12:26 AM Xi Ruoyao <xry111@xry111.site> wrote: > > > > > > You need to CC libstdc++@gcc.gnu.org for any patches touching > > > libstdc++. > > > > > > On Sat, 2023-03-18 at 21:21 -0700, Ken Matsui via Gcc-patches wrote: > > > > libstdc++-v3/ChangeLog: > > > > > > > > * include/std/type_traits (is_reference): Use __is_reference > > > > built-in > > > > trait. > > > > > > Bad ChangeLog format. You should have a tab (not 4 or 8 spaces, nor > > > nothing) to indent the ChangeLog content. > > > > > > Is there any benefit to use a builtin, instead of the existing > > > implementation? I can see no but maybe I'm stupid. > > > > > > > --- > > > > diff --git a/libstdc++-v3/include/std/type_traits > > > > b/libstdc++-v3/include/std/type_traits > > > > > > 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. > > > > > > > index 2bd607a8b8f..18408d8ceb6 100644 > > > > --- a/libstdc++-v3/include/std/type_traits > > > > +++ b/libstdc++-v3/include/std/type_traits > > > > @@ -639,6 +639,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION > > > > // Composite type categories. > > > > > > > > /// is_reference > > > > +#if __has_builtin(__is_reference) > > > > + template<typename _Tp> > > > > + struct is_reference > > > > + : public integral_constant<bool, __is_reference(_Tp)> > > > > > > If a patch depends on another patch not applied yet, sent them in a > > > series. Or people are puzzled because when this patch is applied > > > alone, > > > the code fails to build. > > > > > > > + { }; > > > > +#else > > > > template<typename _Tp> > > > > struct is_reference > > > > : public false_type > > > > @@ -653,6 +659,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION > > > > struct is_reference<_Tp&&> > > > > : public true_type > > > > { }; > > > > +#endif > > > > > > > > /// is_arithmetic > > > > template<typename _Tp> > > > > > > -- > > > Xi Ruoyao <xry111@xry111.site> > > > School of Aerospace Science and Technology, Xidian University > > -- > Xi Ruoyao <xry111@xry111.site> > School of Aerospace Science and Technology, Xidian University
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. > > 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 :).
Thank you! On Mon, Mar 20, 2023 at 1:07 AM Xi Ruoyao <xry111@xry111.site> 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. > > > > 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 :). > > -- > Xi Ruoyao <xry111@xry111.site> > School of Aerospace Science and Technology, Xidian University
On Mon, 20 Mar 2023 at 08:08, Xi Ruoyao via Libstdc++ <libstdc++@gcc.gnu.org> 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.
> 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? On Mon, Mar 20, 2023 at 2:14 AM Jonathan Wakely <jwakely.gcc@gmail.com> wrote: > > On Mon, 20 Mar 2023 at 08:08, Xi Ruoyao via Libstdc++ > <libstdc++@gcc.gnu.org> 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.
It looks like I was able to use git send-email. The new patches became a series, so I couldn't figure out how to associate them with this email and another email. Please disregard this email. On Mon, Mar 20, 2023 at 2:56 AM Ken Matsui <kmatsui@cs.washington.edu> 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? > > On Mon, Mar 20, 2023 at 2:14 AM Jonathan Wakely <jwakely.gcc@gmail.com> wrote: > > > > On Mon, 20 Mar 2023 at 08:08, Xi Ruoyao via Libstdc++ > > <libstdc++@gcc.gnu.org> 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.
On Mon, Mar 20, 2023 at 5:56 AM Ken Matsui <kmatsui@cs.washington.edu> 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 <jwakely.gcc@gmail.com> wrote: > > > > On Mon, 20 Mar 2023 at 08:08, Xi Ruoyao via Libstdc++ > > <libstdc++@gcc.gnu.org> 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. >
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 <ppalka@redhat.com> wrote: > On Mon, Mar 20, 2023 at 5:56 AM Ken Matsui <kmatsui@cs.washington.edu> > 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 <jwakely.gcc@gmail.com> > wrote: > > > > > > On Mon, 20 Mar 2023 at 08:08, Xi Ruoyao via Libstdc++ > > > <libstdc++@gcc.gnu.org> 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. > > >
diff --git a/libstdc++-v3/include/std/type_traits b/libstdc++-v3/include/std/type_traits index 2bd607a8b8f..18408d8ceb6 100644 --- a/libstdc++-v3/include/std/type_traits +++ b/libstdc++-v3/include/std/type_traits @@ -639,6 +639,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // Composite type categories. /// is_reference +#if __has_builtin(__is_reference) + template<typename _Tp> + struct is_reference + : public integral_constant<bool, __is_reference(_Tp)> + { }; +#else template<typename _Tp> struct is_reference : public false_type @@ -653,6 +659,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION struct is_reference<_Tp&&> : public true_type { }; +#endif /// is_arithmetic template<typename _Tp>