From patchwork Fri Nov 3 14:54:34 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Thomas Schwinge X-Patchwork-Id: 161331 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:8f47:0:b0:403:3b70:6f57 with SMTP id j7csp1093719vqu; Fri, 3 Nov 2023 07:55:56 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGc7ZXFQAbSgRb48kccQOVXCEuT8sgJLXRLAPLGNP6PNKzDP5+nNg33JusJZ6UKNeMUnrkW X-Received: by 2002:a05:6214:4103:b0:66d:1624:2200 with SMTP id kc3-20020a056214410300b0066d16242200mr27376264qvb.13.1699023356393; Fri, 03 Nov 2023 07:55:56 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1699023356; cv=pass; d=google.com; s=arc-20160816; b=o8Z8+BL8M/1sf5dPatRUUXxiMefQN58I7KlsWkVC7QRzAbragwZ8WvJvGFmJP5nvem 1eUn/rWRweoIOT7M1ZFpSMKSn4IcCWsiTZUVEx2VqhhnfJ5PKMBAR7T2aBUJ8jjiqjiU 3Lq03l85P3S05AlIbH2ild8yJWmhMElnj3rZ0u6PNeynK1KKTbn34+8lNdUbUR7P9y8+ aIZk2YJojhIqUuPxf6XEQSBu5FARA+61vZPUddosrusdEfsl4tKFJYg8Qqn3Kq0gKCgt +2QZPWWWyy0IkQp337+4gQuTDSpDMix1Ip9V++CHjhJ9opawDavj+PCzgzKqcKNQX7pU V/CA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:mime-version:message-id:date :user-agent:references:in-reply-to:subject:cc:to:from:ironport-sdr :arc-filter:dmarc-filter:delivered-to; bh=bUuCIYWQmRwKIIWWub9axl8YcYhKKIoT/+AKfcM24VQ=; fh=5ojLv6cER/kelBntMv3XTehNv3/BbWIwOCzB/HKOiCs=; b=r3Xr0/cfKDgirZn2aRLTbBzY5BSMFkBGKi37TpgeZBhHzQJAjmKdfL+8XG/kiyFJgf UGRISoutjc2CNSD8S8OYcOA/rJnTrGHcB1TrJ8e8QmkJzjjkqTNGo9rwXYYP4v6Vyhf+ 7glFsOcHB381xsq20F84XNdtxALrdwl80wMVzfL4XftYuG80O8cncVgmiSnc52RJttDu AufwdDdm+CHGkwSlWMwBBIJ3rVeShe3bs7z3dN4e9bsKoy8G+EfMlDWHq0EYpNY4MQIR Ji4PWDmiBD/VrE/vdE8egRZTPOZ7l+oV4fdimCG8cRoowLaOynFS9rzOkozkcS9LSqsk 8h7w== ARC-Authentication-Results: i=2; mx.google.com; arc=pass (i=1); spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org" Received: from server2.sourceware.org (server2.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id t16-20020a05621405d000b006471c003ddcsi1574312qvz.612.2023.11.03.07.55.56 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Nov 2023 07:55:56 -0700 (PDT) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; arc=pass (i=1); spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org" Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 2A52C385841D for ; Fri, 3 Nov 2023 14:55:56 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org 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 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 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1781555114560735107 X-GMAIL-MSGID: 1781555114560735107 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:__gthread_getspecific'", see attached. Grüße 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=config/rs6000/gthr-aix.h ;; > dce) thread_header=config/pa/gthr-dce.h ;; > + gcn) thread_header=config/gcn/gthr-gcn.h ;; > lynx) thread_header=config/gthr-lynx.h ;; > mipssde) thread_header=config/mips/gthr-mipssde.h ;; > posix) thread_header=gthr-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=yes > + thread_file=gcn > ;; > moxie-*-elf) > gas=yes > 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 to, enum gcn_cvt_t op) > || (to == DFmode && (from == SImode || from == 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 many > + hardware threads, but they're all created simultaneously at launch time. > + > + This implementation is intended to provide mutexes for libgfortran, etc. > + 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 that > + programs attempting to use emutls will fail with the appropriate abort. > + 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__((unused))) > +{ > + 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 __attribute__((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="${tm_file_}" > case $target_thread_file in > aix) thread_header=config/rs6000/gthr-aix.h ;; > dce) thread_header=config/pa/gthr-dce.h ;; > + gcn) thread_header=config/gcn/gthr-gcn.h ;; > lynx) thread_header=config/gthr-lynx.h ;; > mipssde) thread_header=config/mips/gthr-mipssde.h ;; > posix) thread_header=gthr-posix.h ;; ----------------- Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht München, HRB 106955 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=UTF-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/include/amdgcn-amdhsa/bits/gthr-default.h: In function ‘void* __gthread_getspecific(__gthread_key_t)’: [...]/build-gcc-offload-amdgcn-amdhsa/amdgcn-amdhsa/libstdc++-v3/include/amdgcn-amdhsa/bits/gthr-default.h:90:10: error: ‘NULL’ was 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; } static inline int -- 2.34.1