From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa2.mentor.iphmx.com (esa2.mentor.iphmx.com [68.232.141.98]) by sourceware.org (Postfix) with ESMTPS id 877B43857737; Fri, 3 Nov 2023 14:55:11 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 877B43857737 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mentor.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 877B43857737 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=68.232.141.98 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699023322; cv=none; b=K5yhC+mONHilYjl775ETDW5LhoqGNkQTHb1EBqmvdiIrOsAyaS9VjlZ+9VnOrmtcT/CCkU8ij3ZxYNw07LXcg3isuOgpEj4Y4Q28xSp+GH/Qb06LMHwA5n3GDzbNGHEt/NBAy57iApDZ9s/GxZpCMTuNiV2CsLxkjY2+Vqtt40g= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699023322; c=relaxed/simple; bh=7cSPiXozaZ46u6cBBzk+ouMx+vCZtJMSwpAFRMUvOcU=; h=From:To:Subject:Date:Message-ID:MIME-Version; b=cVCKqaA8C5RQSyq7QZokQY+IT/RqshSViDbpBoAHF1KiwOa5xjJ0bHCGxEKFoMPUSXCuOPPCiphBbHDitR51ExABZtmZxV6M/mXP9WVAU9vhr8O09gZL/CCsXGLInzRPgNgLh0obA6uNm6zYxivvq6AmGvS1CuMN7P8hiUTmx3s= ARC-Authentication-Results: i=1; server2.sourceware.org X-CSE-ConnectionGUID: 9hFI0RkGS/WL8Rnic95UJw== X-CSE-MsgGUID: NKsSrVdsR5eB8vF8tc7zmA== X-IronPort-AV: E=Sophos;i="6.03,273,1694764800"; d="scan'208,223";a="24388903" Received: from orw-gwy-02-in.mentorg.com ([192.94.38.167]) by esa2.mentor.iphmx.com with ESMTP; 03 Nov 2023 06:55:10 -0800 IronPort-SDR: Qg/NT/ME8IcJ32Uaz7PxuS93eDh+BYCS75F1OhijQ/5YsXsW8lnMScsCnqNBPuLipjjzkWHmuy ZsuGGF4aNYcGBPHq45a3L5i2IY1e007IeSEhvj+OiUS2QBKep2O97rXnkn9xnfLaNslCcde8Xc 3awJ2x38jfBY5QN4P6YYY9iuj4ffTR7Mn7d5npeXUvHfFHFLu+B8RguidNwhPDFk8PwddgfKnU +8UGF1ns+pi3tVGUtDhdAfl9oWIww0HX8hY2aNI1L7ZPGQX9bbK/gJyHmX8iThJsXJUx431mB2 THc= From: Thomas Schwinge To: Kwok Cheung Yeung , Andrew Stubbs , CC: , Julian Brown Subject: GCN: Address undeclared 'NULL' usage in 'libgcc/config/gcn/gthr-gcn.h:__gthread_getspecific' (was: [PATCH 1/3] Create GCN-specific gthreads) In-Reply-To: References: User-Agent: Notmuch/0.29.3+94~g74c3f1b (https://notmuchmail.org) Emacs/28.2 (x86_64-pc-linux-gnu) Date: Fri, 3 Nov 2023 15:54:34 +0100 Message-ID: <87o7gavqdx.fsf@euler.schwinge.homeip.net> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: svr-ies-mbx-13.mgc.mentorg.com (139.181.222.13) To svr-ies-mbx-10.mgc.mentorg.com (139.181.222.10) X-Spam-Status: No, score=-11.8 required=5.0 tests=BAYES_00,GIT_PATCH_0,HEADER_FROM_DIFFERENT_DOMAINS,KAM_DMARC_STATUS,KAM_SHORT,SPF_HELO_PASS,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --=-=-= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Hi! On 2019-06-07T15:39:36+0100, Andrew Stubbs wrote: > This patch creates a new gthread model for AMD GCN devices. > > For now, there's just enough support for libgfortran to use mutexes in > its I/O routines. The rest can be added at a later time, if at all. Hmm, interestingly we don't have that for nvptx -- and I didn't run into the need when early this year I was working on Fortran I/O support for nvptx corresponding to that of GCN. (That's the pending "nvptx, libgfortran: Switch out of "minimal" mode" and prerequisite patches.) Anyway, not resolving that mystery today, but just a simple technicality: pushed to master branch commit 5926f30a8dcee9142360fdae445ebfdee4a528f9 "GCN: Address undeclared 'NULL' usage in 'libgcc/config/gcn/gthr-gcn.h:__gt= hread_getspecific'", see attached. Gr=C3=BC=C3=9Fe Thomas > Notes: > > * GCN GPUs do not support dynamic creation and deletion of threads, so > there can be no implementation for those functions. (There may be > many threads, of course, but they are hardware managed and must be > launched all at once.) > > * It would be possible to implement support for EMUTLS, but I have no > wish to do so at this time, and it isn't likely to be needed by > OpenMP or OpenACC offload kernels, so those functions are also stub > implementations. > > OK to commit? > > -- > Andrew Stubbs > Mentor Graphics / CodeSourcery > Create GCN-specific gthreads > > 2019-06-05 Kwok Cheung Yeung > Andrew Stubbs > > gcc/ > * config.gcc (thread_file): Set to gcn for AMD GCN. > * config/gcn/gcn.c (gcn_emutls_var_init): New function. > (TARGET_EMUTLS_VAR_INIT): New hook. > > config/ > * gthr.m4 (GCC_AC_THREAD_HEADER): Add case for gcn. > > libgcc/ > * configure: Regenerate. > * config/gcn/gthr-gcn.h: New. > > diff --git a/config/gthr.m4 b/config/gthr.m4 > index 7b29f1f3327..4b937306ad0 100644 > --- a/config/gthr.m4 > +++ b/config/gthr.m4 > @@ -13,6 +13,7 @@ AC_DEFUN([GCC_AC_THREAD_HEADER], > case $1 in > aix) thread_header=3Dconfig/rs6000/gthr-aix.h ;; > dce) thread_header=3Dconfig/pa/gthr-dce.h ;; > + gcn) thread_header=3Dconfig/gcn/gthr-gcn.h ;; > lynx) thread_header=3Dconfig/gthr-lynx.h ;; > mipssde) thread_header=3Dconfig/mips/gthr-mipssde.h ;; > posix) thread_header=3Dgthr-posix.h ;; > diff --git a/gcc/config.gcc b/gcc/config.gcc > index 6b00c387247..b450098aa09 100644 > --- a/gcc/config.gcc > +++ b/gcc/config.gcc > @@ -1428,6 +1428,7 @@ amdgcn-*-amdhsa) > fi > # Force .init_array support. > gcc_cv_initfini_array=3Dyes > + thread_file=3Dgcn > ;; > moxie-*-elf) > gas=3Dyes > diff --git a/gcc/config/gcn/gcn.c b/gcc/config/gcn/gcn.c > index 71f4b4ce35a..e528b649cce 100644 > --- a/gcc/config/gcn/gcn.c > +++ b/gcc/config/gcn/gcn.c > @@ -3163,6 +3163,16 @@ gcn_valid_cvt_p (machine_mode from, machine_mode t= o, enum gcn_cvt_t op) > || (to =3D=3D DFmode && (from =3D=3D SImode || from =3D=3D SFmode= ))); > } > > +/* Implement TARGET_EMUTLS_VAR_INIT. > + > + Disable emutls (gthr-gcn.h does not support it, yet). */ > + > +tree > +gcn_emutls_var_init (tree, tree decl, tree) > +{ > + sorry_at (DECL_SOURCE_LOCATION (decl), "TLS is not implemented for GCN= ."); > +} > + > /* }}} */ > /* {{{ Costs. */ > > @@ -6007,6 +6017,8 @@ print_operand (FILE *file, rtx x, int code) > #define TARGET_CONSTANT_ALIGNMENT gcn_constant_alignment > #undef TARGET_DEBUG_UNWIND_INFO > #define TARGET_DEBUG_UNWIND_INFO gcn_debug_unwind_info > +#undef TARGET_EMUTLS_VAR_INIT > +#define TARGET_EMUTLS_VAR_INIT gcn_emutls_var_init > #undef TARGET_EXPAND_BUILTIN > #define TARGET_EXPAND_BUILTIN gcn_expand_builtin > #undef TARGET_FUNCTION_ARG > diff --git a/libgcc/config/gcn/gthr-gcn.h b/libgcc/config/gcn/gthr-gcn.h > new file mode 100644 > index 00000000000..4227b515f01 > --- /dev/null > +++ b/libgcc/config/gcn/gthr-gcn.h > @@ -0,0 +1,163 @@ > +/* Threads compatibility routines for libgcc2 and libobjc. */ > +/* Compile this one with gcc. */ > +/* Copyright (C) 2019 Free Software Foundation, Inc. > + > +This file is part of GCC. > + > +GCC is free software; you can redistribute it and/or modify it under > +the terms of the GNU General Public License as published by the Free > +Software Foundation; either version 3, or (at your option) any later > +version. > + > +GCC is distributed in the hope that it will be useful, but WITHOUT ANY > +WARRANTY; without even the implied warranty of MERCHANTABILITY or > +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License > +for more details. > + > +Under Section 7 of GPL version 3, you are granted additional > +permissions described in the GCC Runtime Library Exception, version > +3.1, as published by the Free Software Foundation. > + > +You should have received a copy of the GNU General Public License and > +a copy of the GCC Runtime Library Exception along with this program; > +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see > +. */ > + > +/* AMD GCN does not support dynamic creation of threads. There may be m= any > + hardware threads, but they're all created simultaneously at launch ti= me. > + > + This implementation is intended to provide mutexes for libgfortran, e= tc. > + It is not intended to provide a TLS implementation at this time, > + although that may be added later if needed. > + > + __gthread_active_p returns "1" to ensure that mutexes are used, and t= hat > + programs attempting to use emutls will fail with the appropriate abor= t. > + It is expected that the TLS tests will fail. */ > + > +#ifndef GCC_GTHR_GCN_H > +#define GCC_GTHR_GCN_H > + > +#define __GTHREADS 1 > + > +#ifdef __cplusplus > +extern "C" { > +#endif > + > +#ifdef _LIBOBJC > +#error "Objective C is not supported on AMD GCN" > +#else > + > +static inline int > +__gthread_active_p (void) > +{ > + return 1; > +} > + > +typedef int __gthread_key_t; > +typedef int __gthread_once_t; > +typedef int __gthread_mutex_t; > +typedef int __gthread_recursive_mutex_t; > + > +#define __GTHREAD_ONCE_INIT 0 > +#define __GTHREAD_MUTEX_INIT 0 > +#define __GTHREAD_RECURSIVE_MUTEX_INIT 0 > + > +static inline int > +__gthread_once (__gthread_once_t *__once __attribute__((unused)), > + void (*__func) (void) __attribute__((unused))) > +{ > + return 0; > +} > + > +static inline int > +__gthread_key_create (__gthread_key_t *__key __attribute__((unused)), > + void (*__dtor) (void *) __attribute__((unused))) > +{ > + /* Operation is not supported. */ > + return -1; > +} > + > +static inline int > +__gthread_key_delete (__gthread_key_t __key __attribute__ ((__unused__))= ) > +{ > + /* Operation is not supported. */ > + return -1; > +} > + > +static inline void * > +__gthread_getspecific (__gthread_key_t __key __attribute__((unused))) > +{ > + return NULL; > +} > + > +static inline int > +__gthread_setspecific (__gthread_key_t __key __attribute__((unused)), > + const void *__ptr __attribute__((unused))) > +{ > + /* Operation is not supported. */ > + return -1; > +} > + > +static inline int > +__gthread_mutex_destroy (__gthread_mutex_t *__mutex __attribute__((unuse= d))) > +{ > + return 0; > +} > + > +static inline int > +__gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *__mutex = __attribute__((unused))) > +{ > + return 0; > +} > + > + > +static inline int > +__gthread_mutex_lock (__gthread_mutex_t *__mutex) > +{ > + while (__sync_lock_test_and_set (__mutex, 1)) > + asm volatile ("s_sleep\t1" ::: "memory"); > + > + return 0; > +} > + > +static inline int > +__gthread_mutex_trylock (__gthread_mutex_t *__mutex) > +{ > + return __sync_lock_test_and_set (__mutex, 1); > +} > + > +static inline int > +__gthread_mutex_unlock (__gthread_mutex_t *__mutex) > +{ > + __sync_lock_release (__mutex); > + > + return 0; > +} > + > +static inline int > +__gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *__mutex __a= ttribute__((unused))) > +{ > + /* Operation is not supported. */ > + return -1; > +} > + > +static inline int > +__gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *__mutex = __attribute__((unused))) > +{ > + /* Operation is not supported. */ > + return -1; > +} > + > +static inline int > +__gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex _= _attribute__((unused))) > +{ > + /* Operation is not supported. */ > + return -1; > +} > +#endif /* _LIBOBJC */ > + > +#ifdef __cplusplus > +} > +#endif > + > +#endif /* ! GCC_GTHR_GCN_H */ > diff --git a/libgcc/configure b/libgcc/configure > index b2914de0629..af910b62931 100644 > --- a/libgcc/configure > +++ b/libgcc/configure > @@ -5542,6 +5542,7 @@ tm_file=3D"${tm_file_}" > case $target_thread_file in > aix) thread_header=3Dconfig/rs6000/gthr-aix.h ;; > dce) thread_header=3Dconfig/pa/gthr-dce.h ;; > + gcn) thread_header=3Dconfig/gcn/gthr-gcn.h ;; > lynx) thread_header=3Dconfig/gthr-lynx.h ;; > mipssde) thread_header=3Dconfig/mips/gthr-mipssde.h ;; > posix) thread_header=3Dgthr-posix.h ;; ----------------- Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstra=C3=9Fe 201= , 80634 M=C3=BCnchen; Gesellschaft mit beschr=C3=A4nkter Haftung; Gesch=C3= =A4ftsf=C3=BChrer: Thomas Heurung, Frank Th=C3=BCrauf; Sitz der Gesellschaf= t: M=C3=BCnchen; Registergericht M=C3=BCnchen, HRB 106955 --=-=-= Content-Type: text/x-diff; charset="utf-8" Content-Disposition: inline; filename="0001-GCN-Address-undeclared-NULL-usage-in-libgcc-config-g.patch" Content-Transfer-Encoding: quoted-printable >From 5926f30a8dcee9142360fdae445ebfdee4a528f9 Mon Sep 17 00:00:00 2001 From: Thomas Schwinge Date: Wed, 13 Jul 2022 18:17:30 +0200 Subject: [PATCH] GCN: Address undeclared 'NULL' usage in 'libgcc/config/gcn/gthr-gcn.h:__gthread_getspecific' MIME-Version: 1.0 Content-Type: text/plain; charset=3DUTF-8 Content-Transfer-Encoding: 8bit For 'libgcc/config/gcn/gthr-gcn.h' used in libstdc++ context (WIP), we have: [...]/build-gcc-offload-amdgcn-amdhsa/amdgcn-amdhsa/libstdc++-v3/includ= e/amdgcn-amdhsa/bits/gthr-default.h: In function =E2=80=98void* __gthread_g= etspecific(__gthread_key_t)=E2=80=99: [...]/build-gcc-offload-amdgcn-amdhsa/amdgcn-amdhsa/libstdc++-v3/includ= e/amdgcn-amdhsa/bits/gthr-default.h:90:10: error: =E2=80=98NULL=E2=80=99 wa= s not declared in this scope 90 | return NULL; | ^~~~ Resolve this with 's%NULL%0', as is used in 'libgcc/gthr-single.h:__gthread_getspecific', for example. Follow-up to commit 76d463310787c8c7fd0c55cf88031b240311ab68 "Create GCN-specific gthreads". libgcc/ * config/gcn/gthr-gcn.h (__gthread_getspecific): 's%NULL%0'. --- libgcc/config/gcn/gthr-gcn.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libgcc/config/gcn/gthr-gcn.h b/libgcc/config/gcn/gthr-gcn.h index a0bfde2023a..d81b27db933 100644 --- a/libgcc/config/gcn/gthr-gcn.h +++ b/libgcc/config/gcn/gthr-gcn.h @@ -87,7 +87,7 @@ __gthread_key_delete (__gthread_key_t __key __attribute__= ((__unused__))) static inline void * __gthread_getspecific (__gthread_key_t __key __attribute__((unused))) { - return NULL; + return 0; } =20 static inline int --=20 2.34.1 --=-=-=--