[gcc r14-6997] amdgcn: Match new XNACK defaults in mkoffload

Andrew Stubbs ams@gcc.gnu.org
Mon Jan 8 09:58:35 GMT 2024


https://gcc.gnu.org/g:78dff4c25c1b959e4682d7da50d00fb371849a46

commit r14-6997-g78dff4c25c1b959e4682d7da50d00fb371849a46
Author: Andrew Stubbs <ams@codesourcery.com>
Date:   Wed Jan 3 16:53:52 2024 +0000

    amdgcn: Match new XNACK defaults in mkoffload
    
    The patch that disabled XNACK by default for ISA other than gfx90a was missing
    the matching mkoffload changes.  This patch should fix offload.
    
    gcc/ChangeLog:
    
            * config/gcn/mkoffload.cc (TEST_XNACK_UNSET): New.
            (elf_flags): Remove XNACK from the default value.
            (main): Set a default XNACK according to the arch.

Diff:
---
 gcc/config/gcn/mkoffload.cc | 23 +++++++++++++++++++++--
 1 file changed, 21 insertions(+), 2 deletions(-)

diff --git a/gcc/config/gcn/mkoffload.cc b/gcc/config/gcn/mkoffload.cc
index 03cd040dbd2..5b7de0076c7 100644
--- a/gcc/config/gcn/mkoffload.cc
+++ b/gcc/config/gcn/mkoffload.cc
@@ -84,6 +84,7 @@
 			    == EF_AMDGPU_FEATURE_XNACK_ON_V4)
 #define TEST_XNACK_OFF(VAR) ((VAR & EF_AMDGPU_FEATURE_XNACK_V4) \
 			     == EF_AMDGPU_FEATURE_XNACK_OFF_V4)
+#define TEST_XNACK_UNSET(VAR) ((VAR & EF_AMDGPU_FEATURE_XNACK_V4) == 0)
 
 #define SET_SRAM_ECC_ON(VAR) VAR = ((VAR & ~EF_AMDGPU_FEATURE_SRAMECC_V4) \
 				    | EF_AMDGPU_FEATURE_SRAMECC_ON_V4)
@@ -122,8 +123,7 @@ static struct obstack files_to_cleanup;
 
 enum offload_abi offload_abi = OFFLOAD_ABI_UNSET;
 uint32_t elf_arch = EF_AMDGPU_MACH_AMDGCN_GFX803;  // Default GPU architecture.
-uint32_t elf_flags =
-    (EF_AMDGPU_FEATURE_XNACK_ANY_V4 | EF_AMDGPU_FEATURE_SRAMECC_ANY_V4);
+uint32_t elf_flags = EF_AMDGPU_FEATURE_SRAMECC_ANY_V4;
 
 static int gcn_stack_size = 0;  /* Zero means use default.  */
 
@@ -1005,6 +1005,25 @@ main (int argc, char **argv)
       gcc_unreachable ();
     }
 
+  /* Disable XNACK mode on architectures where it doesn't work (well).
+     Set default to "any" otherwise.  */
+  switch (elf_arch)
+    {
+    case EF_AMDGPU_MACH_AMDGCN_GFX803:
+    case EF_AMDGPU_MACH_AMDGCN_GFX900:
+    case EF_AMDGPU_MACH_AMDGCN_GFX906:
+    case EF_AMDGPU_MACH_AMDGCN_GFX908:
+    case EF_AMDGPU_MACH_AMDGCN_GFX1030:
+      SET_XNACK_OFF (elf_flags);
+      break;
+    case EF_AMDGPU_MACH_AMDGCN_GFX90a:
+      if (TEST_XNACK_UNSET (elf_flags))
+	SET_XNACK_ANY (elf_flags);
+      break;
+    default:
+      fatal_error (input_location, "unhandled architecture");
+    }
+
   /* Build arguments for compiler pass.  */
   struct obstack cc_argv_obstack;
   obstack_init (&cc_argv_obstack);


More information about the Gcc-cvs mailing list