From patchwork Thu Jan 25 15:11:17 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tobias Burnus X-Patchwork-Id: 192126 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:e09d:b0:103:945f:af90 with SMTP id gm29csp41978dyb; Thu, 25 Jan 2024 07:12:50 -0800 (PST) X-Google-Smtp-Source: AGHT+IEUTShZbrUdcnR1uCwv6CZXKz2C9nKrrUb38YckXF9KsrnqtGCTt7nO1btIRf5tJx3wixFd X-Received: by 2002:a05:620a:3705:b0:783:8851:b768 with SMTP id de5-20020a05620a370500b007838851b768mr1366403qkb.154.1706195570096; Thu, 25 Jan 2024 07:12:50 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1706195570; cv=pass; d=google.com; s=arc-20160816; b=URm7ISAxiu8kzJiQqcbiUmyFouf1J4UuzT4KRU1Orw06wy7l5gS7nLKFnAVhiiTwRi g5inslxKTCCzFT9MdKob5frNoKnSlozupCtv1aTGZWmrkdm7K/uQIEQ8Zm1fgHu09r+k W29cVN/9LWjMPWiK53XQfJjmml7qstJmH0LNvm//bQ1uLkcS2IfTVeb1Ae4j8dLtv5yy kLkSJpghvplSoOnW3W0bFZIO3q29pxURei++6oFRymsrfyEPGGav5X2EiIFKD0SJFvym J4sosKAsZw3aYWr1ypGixt1yehqtolHhLQh/ssOuIvDTvB4vuwrTQfZlpVJInTpliG40 hHtQ== 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:in-reply-to:references:to:from :content-language:subject:user-agent:mime-version:date:message-id :dkim-signature:arc-filter:dmarc-filter:delivered-to; bh=f12QHPy4Yw5NAh8Q2hRs2a2EpL/UdO2XO/erDPm2wXE=; fh=ZkSOh4DggmpC13RRw6gWMieYVUH5KUViPCmIFGSxsX8=; b=AxESz0hzURAyDMtRjTqjfwGdNhF+I7iVnrAY8uyK8DaK2VAaSkHw5oRENe85snjiDO vaUwtVV+jlWYf+VnBa3bTTp4lj5Gj+XLrXgvCuT67pSecdHeAf6HmGnOaCPXHXV/h9Ws DMA31VprusCcDsGmzhZg6bhj9my+S3FAYJU4uKPtvGaZR6pALxDz1XykPYn6bIv7KQ8n dX53C3C1WmWtM2t873e2t986fFI5T0jzxfMeXLF9d4ZYhg6XZDnudN8ZABH2h+NaNoxo 65Sx9lVbOfOc3TtF9jBOXDAT+XVgawlwTDmsYBxT4PZd9/M0MbjttKtp/jTbZgdvrj8k 2jiA== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@baylibre-com.20230601.gappssmtp.com header.s=20230601 header.b=zKbVtAD1; arc=pass (i=1); spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org" Received: from server2.sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id b23-20020a05620a119700b0078306193918si12292198qkk.532.2024.01.25.07.12.49 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 25 Jan 2024 07:12:50 -0800 (PST) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) client-ip=2620:52:3:1:0:246e:9693:128c; Authentication-Results: mx.google.com; dkim=pass header.i=@baylibre-com.20230601.gappssmtp.com header.s=20230601 header.b=zKbVtAD1; arc=pass (i=1); spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c 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 B480A3857709 for ; Thu, 25 Jan 2024 15:12:49 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-wm1-x335.google.com (mail-wm1-x335.google.com [IPv6:2a00:1450:4864:20::335]) by sourceware.org (Postfix) with ESMTPS id D144D385828A for ; Thu, 25 Jan 2024 15:11:20 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D144D385828A Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=baylibre.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org D144D385828A Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::335 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1706195489; cv=none; b=Gefo517qw0ixwfQe2rSHrUkKFVwGFmLBLnlI9NUqwo6fODTwEdOMN3wubDONqZXxig21r5HbKVvwcV9HQgnLG0NWSYHaCkZL3d8N2+b+tmSyOXopa2EcsahYDa5BL+6F7smVHaK/ihKYUPj4BwQPvbgV3MjkcIYdZ2NptsGGB4U= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1706195489; c=relaxed/simple; bh=OQU8q0cFmYdTnqtiHDQ5A3Pki7QBL3LezDym0sxZiwU=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=FBBA/pQ26r8L1S5GrJy0m7CmzDAWE/NwVJKvTqQicz/QHyVdiAwZrQdfltijvrKAvhOKeCtTplZejUJNTbrwDZ/blFmUa1IyiJDdNPuYquu8Blqsr8Z8ph5F61uK00cIbNi/TBOufL+bzYzhAn1Bh8fe+U9i5sVARGSag/kEsBk= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-wm1-x335.google.com with SMTP id 5b1f17b1804b1-40ed1e78835so7192945e9.2 for ; Thu, 25 Jan 2024 07:11:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1706195479; x=1706800279; darn=gcc.gnu.org; h=in-reply-to:references:to:from:content-language:subject:user-agent :mime-version:date:message-id:from:to:cc:subject:date:message-id :reply-to; bh=f12QHPy4Yw5NAh8Q2hRs2a2EpL/UdO2XO/erDPm2wXE=; b=zKbVtAD1pScpUTaoi5I/iZMghd0L4SoFuhc+yoSYRoC+sq+QPGtat1BkcbykDJ5MVD anA1C9fiSLatbAQ1HGGWwlAprlEbo18txLvfb6Qq8P/aXmcPOGCBFrKpMDDkfdjV8wqO jmKsrdITsXq5TS1iv3qKak5it0EsMX/1il18DhLLivKX1/z3f9HmMZybDtwLQTm0YqOu CTMFwwIboAFDLK1ophCfQngnFHK4UmkR8nwKvaLNr7Onkqhq10DANmyY0ixgpKfbg+DY QCPa5Sn0v1CvbHU+lFhbNTAVJsDFFbPwBa+B+sHraugQMPtfxatVrB4dTZA+bG0kAE0o Poqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706195479; x=1706800279; h=in-reply-to:references:to:from:content-language:subject:user-agent :mime-version:date:message-id:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to; bh=f12QHPy4Yw5NAh8Q2hRs2a2EpL/UdO2XO/erDPm2wXE=; b=bfmHaUXMZFSqv4EprgZpTm3Sig/jl0v1T4Z9iBySCVRGQqmn3agaDaIwk8OD87xrq3 ihzdDKNHtMTYWxrHVpejMdPMJ7GOE30dQ6BbOd6gD8s3TYV9lntdMbxEB2tfA7OZQlxA XF6jhh7a7+EZy3vfohtqguKP4yOTE0xm+/3Ye6tdF+pQKlJMrkuALrrWeNn+kr2qug8g U6Fi6sweHWjsgdxyatmfgmKE5HwBdIK8An34bzURPEMMw+zeAwsJhYsgRcyWRUF+Ehqs v+6P5nQPOrZl3IBhaUR5OgjAxDNkfX8OZP6BhoElUr51zFla12o/0CBeE3b/vR4URRcX pn7Q== X-Gm-Message-State: AOJu0YwQdjWwurcI8xsuSEDH6B14loRcR9iSvQPsMRIs6CGl2VnS+0Yi pV49+H96/GEAIdbRQNEIMf70cha+YQVTewcIMXH3LfHAT5fkZyvzhbu2Eo5P9IY= X-Received: by 2002:a05:600c:17d0:b0:40e:5562:bcda with SMTP id y16-20020a05600c17d000b0040e5562bcdamr537330wmo.155.1706195479269; Thu, 25 Jan 2024 07:11:19 -0800 (PST) Received: from ?IPV6:2001:16b8:2afa:4100:be03:58ff:fe31:f74? (200116b82afa4100be0358fffe310f74.dip.versatel-1u1.de. [2001:16b8:2afa:4100:be03:58ff:fe31:f74]) by smtp.gmail.com with ESMTPSA id k41-20020a05600c1ca900b0040e34ca648bsm2983512wms.0.2024.01.25.07.11.18 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 25 Jan 2024 07:11:18 -0800 (PST) Message-ID: <9270c731-05b8-410b-b33b-0c6764747f5f@baylibre.com> Date: Thu, 25 Jan 2024 16:11:17 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [patch][v2] gcn/mkoffload.cc: Fix SRAM_ECC and XNACK handling [PR111966] Content-Language: en-US From: Tobias Burnus To: Andrew Stubbs , gcc-patches References: <45e2515e-b9aa-42a4-908d-80b2189c7aeb@baylibre.com> <8f1c4d70-d067-45ff-9a4f-076f47c470da@baylibre.com> In-Reply-To: X-Spam-Status: No, score=-12.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, GIT_PATCH_0, KAM_ASCII_DIVIDERS, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, 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: 1789011587489897119 X-GMAIL-MSGID: 1789075726178831815 Updated patch enclosed. Tobias Burnus wrote: > I have now run the attached script and the result running yesterday's > build with both my patch and your patch applied. (And the now committed gcn-hsa.h patch) Now the result with the testscript is: * fiji, gfx1030, gfx1100 work, except for "error: '-mxnack=on' is incompatible with ..." (and link errors for fiji as libgomp is not build, which makes the testing a tad less reliable but should be fine). * (default)/gfx900/gfx906/gfx908: Works, except for -mxnack=on/any due to .target / -mattr= mismatch * gfx90a: simply works OK for mainline? Tobias PS: For the test script, see previous email in the thread; for the output of that script, see attachment. PPS: I hope I got everything right. gcn/mkoffload.cc: Fix SRAM_ECC and XNACK handling [PR111966] Some more '-g' fixes as the .mkoffload.dbg.o debug file's has elf flags which did not match those generated for the compilation, leading to linker errors. For .mkoffload.dbg.o, the elf flags are generated by mkoffload itself - while for the other .o files, that's done by the compiler via setting default and mainly via the ASM_SPEC. This is a follow up to r14-8332-g13127dac106724 which fixed an issue caused by the default arch. In this patch, it is mainly for gfx1100 and gfx1030 which always failed. It also affects gfx906 and possibly gfx900 but only when using the -mxnack/-msram-ecc flags explicitly. What happens on the compiler side is mainly determined by gcn-hsa.h's and otherwise by some default setting. In particular for xnack and sram_ecc, there is: For gfx1100 and gfx1030, neither xnack nor sram_ecc is set (only '+wavefrontsize64'). For fiji, gfx900, gfx906 and gfx908 there is always -mattr=-xnack and for all but gfx908 also -msram-ecc=no - independent of what has been passed to the compiler. However, on the elf flags, the result differs: For fiji, due to the HSACOv3, it is always set to 0 via copy_early_debug_info; for gfx900, gfx906 and gfx908, xnack is OFF. For sram-ecc, it is 'unset' for gfx900, 'any' for gfx906 and for gfx908 it is 'any' unless overridden. For gfx90a, the -msram-ecc= and -mxnack= are passed on, or if not present, ...=any is passed on. Note that this "any" is different from argument nor present at elf flag level: For XNACK: unset/unsupported is 0, any = 0x100, off = 0x200, on = 0x300. For SRAMECC: unset/unsupported is 0, any = 0x400, off = 0x800, on = 0xc00. The obstack_ptr_grow changes are more to avoid confusion than having an actual effect as they would overwise be filtered out via the ASM_SPEC. gcc/ChangeLog: PR other/111966 * config/gcn/mkoffload.cc (SET_XNACK_UNSET, TEST_SRAM_ECC_UNSET): New. (SET_SRAM_ECC_UNSUPPORTED): Renamed to ... (SET_SRAM_ECC_UNSET): ... this. (copy_early_debug_info): Remove gfx900 special case, now handled as part of the generic handling. (main): Update SRAM_ECC and XNACK for the -march as done in gcn-hsa.h. Signed-off-by: Tobias Burnus gcc/config/gcn/mkoffload.cc | 50 +++++++++++++++++++++++++++++---------------- 1 file changed, 32 insertions(+), 18 deletions(-) diff --git a/gcc/config/gcn/mkoffload.cc b/gcc/config/gcn/mkoffload.cc index 0d0e7bac9b2..fe443abba21 100644 --- a/gcc/config/gcn/mkoffload.cc +++ b/gcc/config/gcn/mkoffload.cc @@ -80,6 +80,8 @@ | EF_AMDGPU_FEATURE_XNACK_ANY_V4) #define SET_XNACK_OFF(VAR) VAR = ((VAR & ~EF_AMDGPU_FEATURE_XNACK_V4) \ | EF_AMDGPU_FEATURE_XNACK_OFF_V4) +#define SET_XNACK_UNSET(VAR) VAR = ((VAR & ~EF_AMDGPU_FEATURE_XNACK_V4) \ + | EF_AMDGPU_FEATURE_SRAMECC_UNSUPPORTED_V4) #define TEST_XNACK_ANY(VAR) ((VAR & EF_AMDGPU_FEATURE_XNACK_V4) \ == EF_AMDGPU_FEATURE_XNACK_ANY_V4) #define TEST_XNACK_ON(VAR) ((VAR & EF_AMDGPU_FEATURE_XNACK_V4) \ @@ -94,13 +96,14 @@ | EF_AMDGPU_FEATURE_SRAMECC_ANY_V4) #define SET_SRAM_ECC_OFF(VAR) VAR = ((VAR & ~EF_AMDGPU_FEATURE_SRAMECC_V4) \ | EF_AMDGPU_FEATURE_SRAMECC_OFF_V4) -#define SET_SRAM_ECC_UNSUPPORTED(VAR) \ +#define SET_SRAM_ECC_UNSET(VAR) \ VAR = ((VAR & ~EF_AMDGPU_FEATURE_SRAMECC_V4) \ | EF_AMDGPU_FEATURE_SRAMECC_UNSUPPORTED_V4) #define TEST_SRAM_ECC_ANY(VAR) ((VAR & EF_AMDGPU_FEATURE_SRAMECC_V4) \ == EF_AMDGPU_FEATURE_SRAMECC_ANY_V4) #define TEST_SRAM_ECC_ON(VAR) ((VAR & EF_AMDGPU_FEATURE_SRAMECC_V4) \ == EF_AMDGPU_FEATURE_SRAMECC_ON_V4) +#define TEST_SRAM_ECC_UNSET(VAR) ((VAR & EF_AMDGPU_FEATURE_SRAMECC_V4) == 0) #ifndef R_AMDGPU_NONE #define R_AMDGPU_NONE 0 @@ -125,7 +128,7 @@ static struct obstack files_to_cleanup; enum offload_abi offload_abi = OFFLOAD_ABI_UNSET; uint32_t elf_arch = EF_AMDGPU_MACH_AMDGCN_GFX900; // Default GPU architecture. -uint32_t elf_flags = EF_AMDGPU_FEATURE_SRAMECC_ANY_V4; +uint32_t elf_flags = EF_AMDGPU_FEATURE_SRAMECC_UNSUPPORTED_V4; static int gcn_stack_size = 0; /* Zero means use default. */ @@ -344,10 +347,6 @@ copy_early_debug_info (const char *infile, const char *outfile) /* Fiji devices use HSACOv3 regardless of the assembler. */ uint32_t elf_flags_actual = (elf_arch == EF_AMDGPU_MACH_AMDGCN_GFX803 ? 0 : elf_flags); - /* GFX900 devices don't support the sramecc attribute even if - a buggy assembler thinks it does. This must match gcn-hsa.h */ - if (elf_arch == EF_AMDGPU_MACH_AMDGCN_GFX900) - SET_SRAM_ECC_UNSUPPORTED (elf_flags_actual); /* Patch the correct elf architecture flag into the file. */ ehdr.e_ident[7] = ELFOSABI_AMDGPU_HSA; @@ -1007,21 +1006,34 @@ main (int argc, char **argv) gcc_unreachable (); } - /* Disable XNACK mode on architectures where it doesn't work (well). - Set default to "any" otherwise. */ + /* This must match gcn-hsa.h's settings for NO_XNACK, NO_SRAM_ECC + and ASM_SPEC. */ switch (elf_arch) { case EF_AMDGPU_MACH_AMDGCN_GFX803: + case EF_AMDGPU_MACH_AMDGCN_GFX1030: + case EF_AMDGPU_MACH_AMDGCN_GFX1100: + SET_XNACK_UNSET (elf_flags); + SET_SRAM_ECC_UNSET (elf_flags); + break; case EF_AMDGPU_MACH_AMDGCN_GFX900: + SET_XNACK_OFF (elf_flags); + SET_SRAM_ECC_UNSET (elf_flags); + break; case EF_AMDGPU_MACH_AMDGCN_GFX906: + SET_XNACK_OFF (elf_flags); + SET_SRAM_ECC_ANY (elf_flags); + break; case EF_AMDGPU_MACH_AMDGCN_GFX908: - case EF_AMDGPU_MACH_AMDGCN_GFX1030: - case EF_AMDGPU_MACH_AMDGCN_GFX1100: SET_XNACK_OFF (elf_flags); + if (TEST_SRAM_ECC_UNSET (elf_flags)) + SET_SRAM_ECC_ANY (elf_flags); break; case EF_AMDGPU_MACH_AMDGCN_GFX90a: if (TEST_XNACK_UNSET (elf_flags)) SET_XNACK_ANY (elf_flags); + if (TEST_SRAM_ECC_UNSET (elf_flags)) + SET_SRAM_ECC_ANY (elf_flags); break; default: fatal_error (input_location, "unhandled architecture"); @@ -1145,14 +1157,16 @@ main (int argc, char **argv) } obstack_ptr_grow (&ld_argv_obstack, gcn_s2_name); obstack_ptr_grow (&ld_argv_obstack, "-lgomp"); - obstack_ptr_grow (&ld_argv_obstack, - (TEST_XNACK_ON (elf_flags) ? "-mxnack=on" - : TEST_XNACK_ANY (elf_flags) ? "-mxnack=any" - : "-mxnack=off")); - obstack_ptr_grow (&ld_argv_obstack, - (TEST_SRAM_ECC_ON (elf_flags) ? "-msram-ecc=on" - : TEST_SRAM_ECC_ANY (elf_flags) ? "-msram-ecc=any" - : "-msram-ecc=off")); + if (!TEST_XNACK_UNSET (elf_flags)) + obstack_ptr_grow (&ld_argv_obstack, + (TEST_XNACK_ON (elf_flags) ? "-mxnack=on" + : TEST_XNACK_ANY (elf_flags) ? "-mxnack=any" + : "-mxnack=off")); + if (!TEST_SRAM_ECC_UNSET (elf_flags)) + obstack_ptr_grow (&ld_argv_obstack, + (TEST_SRAM_ECC_ON (elf_flags) ? "-msram-ecc=on" + : TEST_SRAM_ECC_ANY (elf_flags) ? "-msram-ecc=any" + : "-msram-ecc=off")); if (verbose) obstack_ptr_grow (&ld_argv_obstack, "-v");