From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM10-DM6-obe.outbound.protection.outlook.com (mail-dm6nam10olkn2074.outbound.protection.outlook.com [40.92.41.74]) by sourceware.org (Postfix) with ESMTPS id C5C1F384B061 for ; Thu, 13 Aug 2020 16:51:46 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org C5C1F384B061 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=IsfpzAx1fQP/t4i/85GE8g7EphvNAy3uRHt1ykVpnJPkMZkKxHe3WS92SipZakZDODojfOmnFihPOrhe0BQQQF5PaLsImOli6MYkEpfEgUBQ6D23P7vUV1wggAcf6jDjmFjrPMTmaXiqX5o/07O7o9k6uH78SIYQQRn7Ck1dba24KVC9OF92EXRRqU5qHK6WPXafg9vFT9E1vX44IlhKpNfLXPrwHi6VneR3AgSrEVSLjm101TpT6UC9oOAmLod/QkSZeLlvZBGfszER04C4qN5qkISqVSyGPM4WcKaaqMOz5RV/Zm9BmQQyYGgZ6KP1zxdDe5lnV6nTO+GjgSG+kw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=rwPVFMdlwRbEQ9OCNnHh2Is2hYeFm6/MHo0F/tGU0XU=; b=hIphKHHC14yY2R3nSLkWfOTta1TsIu0TDz8BJQJTNU2LbmNUS/hbO/oyR4FbC8aNUKlwTGxcy1mEwdF2n3xnsj7+kPyIUdf+DjlFUPu3W7YyD37el85ORjI/WWMYJlMLxXugCX461tOs4vBRN412J/fUe/jgeDcmxOml5wBYLCYG2fdDDeseTJcW726VhGo2IBdkpImXfd6f5DDJqS8XrjkgqA3xfMDG6eeczyJ99VqhORk9/ZDYWSmJIk7BP9KUVR3eL2AVV8wLz5EktggsmniPRrDrUU3ObhMcRJG3Ev4nBaBRjmPf2IVwNa1d0/ldIqv26zasUbM4GZl+E2jJGw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none Received: from DM6NAM10FT036.eop-nam10.prod.protection.outlook.com (2a01:111:e400:7e86::43) by DM6NAM10HT202.eop-nam10.prod.protection.outlook.com (2a01:111:e400:7e86::354) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3283.17; Thu, 13 Aug 2020 16:51:46 +0000 Received: from BYAPR08MB4232.namprd08.prod.outlook.com (2a01:111:e400:7e86::48) by DM6NAM10FT036.mail.protection.outlook.com (2a01:111:e400:7e86::438) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3283.17 via Frontend Transport; Thu, 13 Aug 2020 16:51:46 +0000 Received: from BYAPR08MB4232.namprd08.prod.outlook.com ([fe80::b4c5:300c:aad4:1811]) by BYAPR08MB4232.namprd08.prod.outlook.com ([fe80::b4c5:300c:aad4:1811%7]) with mapi id 15.20.3283.015; Thu, 13 Aug 2020 16:51:46 +0000 From: Aditya K To: Jeff Law via Gcc-patches , "jwakely.gcc@gmail.com" Subject: Re: Add cold attribute to one time construction APIs Thread-Topic: Add cold attribute to one time construction APIs Thread-Index: AQHWcZDpe06qp1z/Pk20YrD7TQJghKk2QLVo Date: Thu, 13 Aug 2020 16:51:46 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-incomingtopheadermarker: OriginalChecksum:5BD907D87928BE16F08B1070C8209717EC66979687F13F8FDE95775C4DC58701; UpperCasedChecksum:5F7FE7A0B82C17070808594112B2A9A966B4B59CE0E146FFBA83DC84AB387949; SizeAsReceived:7033; Count:44 x-ms-exchange-messagesentrepresentingtype: 1 x-tmn: [CjG9szG4Psc2RcY5oC1k9E65rpk4jZkLS9F1upQfKIAC6dog2KCxdw==] x-ms-publictraffictype: Email x-incomingheadercount: 44 x-eopattributedmessage: 0 x-ms-office365-filtering-correlation-id: cb929678-c499-4766-4ecf-08d83fa92a16 x-ms-traffictypediagnostic: DM6NAM10HT202: x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: hbSK9rGvvQCDszbb2WzFEkC1vydrggRuUVDjxrloNdqBWeovMgkQsStdtbTeBtWtY4qE8hEWSwqCcClagSIbnDtwikdyLlSPGBUhQXE/HTeBCQhwrpR3wbQuAMYOaCbA69yG1ZgW3KqUGcHSyCazIODxpbLzi3X20h/gWnGrqV5MVUk3uVt2i2LlCdGcaQtEit8clU8hVkvk4kllQD43Gg== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:0; SRV:; IPV:NLI; SFV:NSPM; H:BYAPR08MB4232.namprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:; DIR:OUT; SFP:1901; x-ms-exchange-antispam-messagedata: 2m9bym0XDFvkUcy4lFprtR72K3E5VuQSaCvOLKkjYlxkWq1xldfmniFzUqr+6cqOd0OKyH10iWQmP1Na6wObUffrCbYI4AjUaRYfrvd+jyPU205d2OgGUAmqdy6MeJz0eTm1o+CDBG+o/AWWnCNZLIdrIUvy1jK1xpHzcs24rg3Qxk3RRG79WHwyT18xwdWj x-ms-exchange-transport-forked: True Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-AuthSource: DM6NAM10FT036.eop-nam10.prod.protection.outlook.com X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-CrossTenant-Network-Message-Id: cb929678-c499-4766-4ecf-08d83fa92a16 X-MS-Exchange-CrossTenant-rms-persistedconsumerorg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Aug 2020 16:51:46.0253 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Internet X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6NAM10HT202 X-Spam-Status: No, score=-7.5 required=5.0 tests=BAYES_00, BODY_8BITS, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, FREEMAIL_REPLY, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) 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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Aug 2020 16:51:48 -0000 Revised patch with _GLIBCXX_COLD added at the end.=0A= =0A= ```=0A= commit 3dc9f9a8461b1c88e991ceb517e5fdd81f268d1e=0A= Author: Aditya Kumar <1894981+hiraditya@users.noreply.github.com>=0A= Date: Thu Aug 13 09:41:34 2020 -0700=0A= =0A= Add cold attribute to one time construction APIs=0A= =0A= __cxa_guard_acquire is used for only one purpose,=0A= namely guarding local static variable initialization,=0A= and since that purpose is definitionally cold, it should be attributed = as cold.=0A= Similarly for __cxa_guard_release and __cxa_guard_abort=0A= =0A= diff --git a/libstdc++-v3/include/bits/c++config b/libstdc++-v3/include/bit= s/c++config=0A= index b1fad59d4..f6f954eef 100644=0A= --- a/libstdc++-v3/include/bits/c++config=0A= +++ b/libstdc++-v3/include/bits/c++config=0A= @@ -35,20 +35,21 @@=0A= =0A= // The datestamp of the C++ library in compressed ISO date format.=0A= #define __GLIBCXX__=0A= =0A= // Macros for various attributes.=0A= // _GLIBCXX_PURE=0A= // _GLIBCXX_CONST=0A= // _GLIBCXX_NORETURN=0A= // _GLIBCXX_NOTHROW=0A= // _GLIBCXX_VISIBILITY=0A= +// _GLIBCXX_COLD=0A= #ifndef _GLIBCXX_PURE=0A= # define _GLIBCXX_PURE __attribute__ ((__pure__))=0A= #endif=0A= =0A= #ifndef _GLIBCXX_CONST=0A= # define _GLIBCXX_CONST __attribute__ ((__const__))=0A= #endif=0A= =0A= #ifndef _GLIBCXX_NORETURN=0A= # define _GLIBCXX_NORETURN __attribute__ ((__noreturn__))=0A= @@ -67,20 +68,24 @@=0A= #define _GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY=0A= =0A= #if _GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY=0A= # define _GLIBCXX_VISIBILITY(V) __attribute__ ((__visibility__ (#V)))=0A= #else=0A= // If this is not supplied by the OS-specific or CPU-specific=0A= // headers included below, it will be defined to an empty default.=0A= # define _GLIBCXX_VISIBILITY(V) _GLIBCXX_PSEUDO_VISIBILITY(V)=0A= #endif=0A= =0A= +#ifndef _GLIBCXX_COLD=0A= +# define _GLIBCXX_COLD __attribute__ ((cold))=0A= +#endif=0A= +=0A= // Macros for deprecated attributes.=0A= // _GLIBCXX_USE_DEPRECATED=0A= // _GLIBCXX_DEPRECATED=0A= // _GLIBCXX17_DEPRECATED=0A= // _GLIBCXX20_DEPRECATED( string-literal )=0A= #ifndef _GLIBCXX_USE_DEPRECATED=0A= # define _GLIBCXX_USE_DEPRECATED 1=0A= #endif=0A= =0A= #if defined(__DEPRECATED) && (__cplusplus >=3D 201103L)=0A= diff --git a/libstdc++-v3/libsupc++/cxxabi.h b/libstdc++-v3/libsupc++/cxxab= i.h=0A= index 000713ecd..24c1366e2 100644=0A= --- a/libstdc++-v3/libsupc++/cxxabi.h=0A= +++ b/libstdc++-v3/libsupc++/cxxabi.h=0A= @@ -108,27 +108,27 @@ namespace __cxxabiv1=0A= __cxa_vec_delete2(void* __array_address, size_t __element_size,=0A= size_t __padding_size, __cxa_cdtor_type __destructor,=0A= void (*__dealloc) (void*));=0A= =0A= void=0A= __cxa_vec_delete3(void* __array_address, size_t __element_size,=0A= size_t __padding_size, __cxa_cdtor_type __destructor,=0A= void (*__dealloc) (void*, size_t));=0A= =0A= int=0A= - __cxa_guard_acquire(__guard*);=0A= + __cxa_guard_acquire(__guard*) _GLIBCXX_COLD;=0A= =0A= void=0A= - __cxa_guard_release(__guard*) _GLIBCXX_NOTHROW;=0A= + __cxa_guard_release(__guard*) _GLIBCXX_NOTHROW _GLIBCXX_COLD;=0A= =0A= void=0A= - __cxa_guard_abort(__guard*) _GLIBCXX_NOTHROW;=0A= + __cxa_guard_abort(__guard*) _GLIBCXX_NOTHROW _GLIBCXX_COLD;=0A= =0A= // DSO destruction.=0A= int=0A= __cxa_atexit(void (*)(void*), void*, void*) _GLIBCXX_NOTHROW;=0A= =0A= void=0A= __cxa_finalize(void*);=0A= =0A= // TLS destruction.=0A= int=0A= ```=0A= =0A= From: Aditya K=0A= Sent: Thursday, August 13, 2020 10:47 AM=0A= To: Jeff Law via Gcc-patches ; jwakely.gcc@gmail.c= om =0A= Subject: Add cold attribute to one time construction APIs =0A= =A0=0A= This would help compiler optimize local static objects.=0A= =0A= ```=0A= commit e2f299679ddf56a6d6d71ea9d589cd76b2ca107b=0A= Author: Aditya Kumar <1894981+hiraditya@users.noreply.github.com>=0A= Date:=A0=A0 Thu Aug 13 09:41:34 2020 -0700=0A= =0A= =A0=A0=A0 Add cold attribute to one time construction APIs=0A= =A0=A0=A0 =0A= =A0=A0=A0 __cxa_guard_acquire is used for only one purpose,=0A= =A0=A0=A0 namely guarding local static variable initialization,=0A= =A0=A0=A0 and since that purpose is definitionally cold, it should be attri= buted as cold.=0A= =A0=A0=A0 Similarly for __cxa_guard_release and __cxa_guard_abort=0A= =0A= diff --git a/libstdc++-v3/include/bits/c++config b/libstdc++-v3/include/bit= s/c++config=0A= index b1fad59d4..359e955a7 100644=0A= --- a/libstdc++-v3/include/bits/c++config=0A= +++ b/libstdc++-v3/include/bits/c++config=0A= @@ -39,20 +39,24 @@=0A= =A0// Macros for various attributes.=0A= =A0//=A0=A0 _GLIBCXX_PURE=0A= =A0//=A0=A0 _GLIBCXX_CONST=0A= =A0//=A0=A0 _GLIBCXX_NORETURN=0A= =A0//=A0=A0 _GLIBCXX_NOTHROW=0A= =A0//=A0=A0 _GLIBCXX_VISIBILITY=0A= =A0#ifndef _GLIBCXX_PURE=0A= =A0# define _GLIBCXX_PURE __attribute__ ((__pure__))=0A= =A0#endif=0A= =A0=0A= +#ifndef _GLIBCXX_COLD=0A= +# define _GLIBCXX_COLD __attribute__ ((cold))=0A= +#endif=0A= +=0A= =A0#ifndef _GLIBCXX_CONST=0A= =A0# define _GLIBCXX_CONST __attribute__ ((__const__))=0A= =A0#endif=0A= =A0=0A= =A0#ifndef _GLIBCXX_NORETURN=0A= =A0# define _GLIBCXX_NORETURN __attribute__ ((__noreturn__))=0A= =A0#endif=0A= =A0=0A= =A0// See below for C++=0A= =A0#ifndef _GLIBCXX_NOTHROW=0A= diff --git a/libstdc++-v3/libsupc++/cxxabi.h b/libstdc++-v3/libsupc++/cxxab= i.h=0A= index 000713ecd..24c1366e2 100644=0A= --- a/libstdc++-v3/libsupc++/cxxabi.h=0A= +++ b/libstdc++-v3/libsupc++/cxxabi.h=0A= @@ -108,27 +108,27 @@ namespace __cxxabiv1=0A= =A0=A0 __cxa_vec_delete2(void* __array_address, size_t __element_size,=0A= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 size_t __paddi= ng_size, __cxa_cdtor_type __destructor,=0A= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 void (*__deall= oc) (void*));=0A= =A0=0A= =A0=A0 void=0A= =A0=A0 __cxa_vec_delete3(void* __array_address, size_t __element_size,=0A= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 size_t __paddi= ng_size, __cxa_cdtor_type __destructor,=0A= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 void (*__deall= oc) (void*, size_t));=0A= =A0=0A= =A0=A0 int=0A= -=A0 __cxa_guard_acquire(__guard*);=0A= +=A0 __cxa_guard_acquire(__guard*) _GLIBCXX_COLD;=0A= =A0=0A= =A0=A0 void=0A= -=A0 __cxa_guard_release(__guard*) _GLIBCXX_NOTHROW;=0A= +=A0 __cxa_guard_release(__guard*) _GLIBCXX_NOTHROW _GLIBCXX_COLD;=0A= =A0=0A= =A0=A0 void=0A= -=A0 __cxa_guard_abort(__guard*) _GLIBCXX_NOTHROW;=0A= +=A0 __cxa_guard_abort(__guard*) _GLIBCXX_NOTHROW _GLIBCXX_COLD;=0A= =A0=0A= =A0=A0 // DSO destruction.=0A= =A0=A0 int=0A= =A0=A0 __cxa_atexit(void (*)(void*), void*, void*) _GLIBCXX_NOTHROW;=0A= =A0=0A= =A0=A0 void=0A= =A0=A0 __cxa_finalize(void*);=0A= =A0=0A= =A0=A0 // TLS destruction.=0A= =A0=A0 int=0A= ```=