From: Andrew Stubbs Date: Thu, 22 Oct 2020 20:23:48 +0000 (+0100) Subject: amdgcn: Add gfx908 support X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bb55967ccde0b48f285150caf6443a327159b4a2;p=thirdparty%2Fgcc.git amdgcn: Add gfx908 support gcc/ * config/gcn/gcn-opts.h (enum processor_type): Add PROCESSOR_GFX908. * config/gcn/gcn.c (gcn_omp_device_kind_arch_isa): Add gfx908. (output_file_start): Add gfx908. * config/gcn/gcn.opt (gpu_type): Add gfx908. * config/gcn/t-gcn-hsa (MULTILIB_OPTIONS): Add march=gfx908. (MULTILIB_DIRNAMES): Add gfx908. * config/gcn/mkoffload.c (EF_AMDGPU_MACH_AMDGCN_GFX908): New define. (main): Recognize gfx908. * config/gcn/t-omp-device: Add gfx908. libgomp/ * plugin/plugin-gcn.c (EF_AMDGPU_MACH): Add EF_AMDGPU_MACH_AMDGCN_GFX908. (gcn_gfx908_s): New constant string. (isa_hsa_name): Add gfx908. (isa_code): Add gfx908. (cherry picked from commit 3535402e20118655b2ad4085a6e1d4f1b9c46e92) --- diff --git a/gcc/ChangeLog.omp b/gcc/ChangeLog.omp index 374665d3fabb..d6566ce97a03 100644 --- a/gcc/ChangeLog.omp +++ b/gcc/ChangeLog.omp @@ -1,3 +1,18 @@ +2021-03-25 Kwok Cheung Yeung + + Backport from mainline + 2020-10-22 Andrew Stubbs + + * config/gcn/gcn-opts.h (enum processor_type): Add PROCESSOR_GFX908. + * config/gcn/gcn.c (gcn_omp_device_kind_arch_isa): Add gfx908. + (output_file_start): Add gfx908. + * config/gcn/gcn.opt (gpu_type): Add gfx908. + * config/gcn/t-gcn-hsa (MULTILIB_OPTIONS): Add march=gfx908. + (MULTILIB_DIRNAMES): Add gfx908. + * config/gcn/mkoffload.c (EF_AMDGPU_MACH_AMDGCN_GFX908): New define. + (main): Recognize gfx908. + * config/gcn/t-omp-device: Add gfx908. + 2021-03-01 Kwok Cheung Yeung * omp-expand.c (expand_oacc_for): Convert .tile variable to diff --git a/gcc/config/gcn/gcn-opts.h b/gcc/config/gcn/gcn-opts.h index 8eefb7a348a1..b4bd76e6fb08 100644 --- a/gcc/config/gcn/gcn-opts.h +++ b/gcc/config/gcn/gcn-opts.h @@ -22,7 +22,8 @@ enum processor_type { PROCESSOR_FIJI, // gfx803 PROCESSOR_VEGA10, // gfx900 - PROCESSOR_VEGA20 // gfx906 + PROCESSOR_VEGA20, // gfx906 + PROCESSOR_GFX908 // as yet unnamed }; /* Set in gcn_option_override. */ diff --git a/gcc/config/gcn/gcn.c b/gcc/config/gcn/gcn.c index 095de6a2f7ec..225efc3f088d 100644 --- a/gcc/config/gcn/gcn.c +++ b/gcc/config/gcn/gcn.c @@ -2613,6 +2613,8 @@ gcn_omp_device_kind_arch_isa (enum omp_device_kind_arch_isa trait, return gcn_arch == PROCESSOR_VEGA10; if (strcmp (name, "gfx906") == 0) return gcn_arch == PROCESSOR_VEGA20; + if (strcmp (name, "gfx908") == 0) + return gcn_arch == PROCESSOR_GFX908; return 0; default: gcc_unreachable (); @@ -5164,6 +5166,7 @@ output_file_start (void) case PROCESSOR_FIJI: cpu = "gfx803"; break; case PROCESSOR_VEGA10: cpu = "gfx900"; break; case PROCESSOR_VEGA20: cpu = "gfx906"; break; + case PROCESSOR_GFX908: cpu = "gfx908+sram-ecc"; break; default: gcc_unreachable (); } diff --git a/gcc/config/gcn/gcn.opt b/gcc/config/gcn/gcn.opt index 57216983e4be..ee8fb4614e87 100644 --- a/gcc/config/gcn/gcn.opt +++ b/gcc/config/gcn/gcn.opt @@ -34,6 +34,9 @@ Enum(gpu_type) String(gfx900) Value(PROCESSOR_VEGA10) EnumValue Enum(gpu_type) String(gfx906) Value(PROCESSOR_VEGA20) +EnumValue +Enum(gpu_type) String(gfx908) Value(PROCESSOR_GFX908) + march= Target RejectNegative Joined ToLower Enum(gpu_type) Var(gcn_arch) Init(PROCESSOR_FIJI) Specify the name of the target GPU. diff --git a/gcc/config/gcn/mkoffload.c b/gcc/config/gcn/mkoffload.c index 60794c104346..d114287e353a 100644 --- a/gcc/config/gcn/mkoffload.c +++ b/gcc/config/gcn/mkoffload.c @@ -51,6 +51,8 @@ #define EF_AMDGPU_MACH_AMDGCN_GFX900 0x2c #undef EF_AMDGPU_MACH_AMDGCN_GFX906 #define EF_AMDGPU_MACH_AMDGCN_GFX906 0x2f +#undef EF_AMDGPU_MACH_AMDGCN_GFX908 +#define EF_AMDGPU_MACH_AMDGCN_GFX908 0x230 // Assume SRAM-ECC enabled. #ifndef R_AMDGPU_NONE #define R_AMDGPU_NONE 0 @@ -850,6 +852,8 @@ main (int argc, char **argv) elf_arch = EF_AMDGPU_MACH_AMDGCN_GFX900; else if (strcmp (argv[i], "-march=gfx906") == 0) elf_arch = EF_AMDGPU_MACH_AMDGCN_GFX906; + else if (strcmp (argv[i], "-march=gfx908") == 0) + elf_arch = EF_AMDGPU_MACH_AMDGCN_GFX908; } if (!(fopenacc ^ fopenmp)) diff --git a/gcc/config/gcn/t-gcn-hsa b/gcc/config/gcn/t-gcn-hsa index 16d243c3f2ba..b39e9541f08a 100644 --- a/gcc/config/gcn/t-gcn-hsa +++ b/gcc/config/gcn/t-gcn-hsa @@ -42,8 +42,8 @@ ALL_HOST_OBJS += gcn-run.o gcn-run$(exeext): gcn-run.o +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ $< -ldl -MULTILIB_OPTIONS = march=gfx900/march=gfx906 -MULTILIB_DIRNAMES = gfx900 gfx906 +MULTILIB_OPTIONS = march=gfx900/march=gfx906/march=gfx908 +MULTILIB_DIRNAMES = gfx900 gfx906 gfx908 gcn-tree.o: $(srcdir)/config/gcn/gcn-tree.c $(COMPILE) $< diff --git a/gcc/config/gcn/t-omp-device b/gcc/config/gcn/t-omp-device index d9809d5f4552..8461c432ca9e 100644 --- a/gcc/config/gcn/t-omp-device +++ b/gcc/config/gcn/t-omp-device @@ -1,4 +1,4 @@ omp-device-properties-gcn: $(srcdir)/config/gcn/gcn.c echo kind: gpu > $@ echo arch: gcn >> $@ - echo isa: fiji gfx900 gfx906 >> $@ + echo isa: fiji gfx900 gfx906 gfx908 >> $@ diff --git a/libgomp/ChangeLog.omp b/libgomp/ChangeLog.omp index e8e1ce96fc3b..b0af9c205a38 100644 --- a/libgomp/ChangeLog.omp +++ b/libgomp/ChangeLog.omp @@ -1,3 +1,14 @@ +2021-03-25 Kwok Cheung Yeung + + Backport from mainline + 2020-10-22 Andrew Stubbs + + * plugin/plugin-gcn.c (EF_AMDGPU_MACH): Add + EF_AMDGPU_MACH_AMDGCN_GFX908. + (gcn_gfx908_s): New constant string. + (isa_hsa_name): Add gfx908. + (isa_code): Add gfx908. + 2021-03-25 Thomas Schwinge * plugin/plugin-hsa.c (init_enviroment_variables): Don't prepend diff --git a/libgomp/plugin/plugin-gcn.c b/libgomp/plugin/plugin-gcn.c index 5d96b33351b8..cef616f4f5f8 100644 --- a/libgomp/plugin/plugin-gcn.c +++ b/libgomp/plugin/plugin-gcn.c @@ -406,6 +406,7 @@ typedef enum { EF_AMDGPU_MACH_AMDGCN_GFX803 = 0x02a, EF_AMDGPU_MACH_AMDGCN_GFX900 = 0x02c, EF_AMDGPU_MACH_AMDGCN_GFX906 = 0x02f, + EF_AMDGPU_MACH_AMDGCN_GFX908 = 0x030 } EF_AMDGPU_MACH; const static int EF_AMDGPU_MACH_MASK = 0x000000ff; @@ -1630,6 +1631,7 @@ elf_gcn_isa_field (Elf64_Ehdr *image) const static char *gcn_gfx803_s = "gfx803"; const static char *gcn_gfx900_s = "gfx900"; const static char *gcn_gfx906_s = "gfx906"; +const static char *gcn_gfx908_s = "gfx908"; const static int gcn_isa_name_len = 6; /* Returns the name that the HSA runtime uses for the ISA or NULL if we do not @@ -1645,6 +1647,8 @@ isa_hsa_name (int isa) { return gcn_gfx900_s; case EF_AMDGPU_MACH_AMDGCN_GFX906: return gcn_gfx906_s; + case EF_AMDGPU_MACH_AMDGCN_GFX908: + return gcn_gfx908_s; } return NULL; } @@ -1678,6 +1682,9 @@ isa_code(const char *isa) { if (!strncmp (isa, gcn_gfx906_s, gcn_isa_name_len)) return EF_AMDGPU_MACH_AMDGCN_GFX906; + if (!strncmp (isa, gcn_gfx908_s, gcn_isa_name_len)) + return EF_AMDGPU_MACH_AMDGCN_GFX908; + return -1; }