[gcc/devel/omp/gcc-10] amdgcn: Add gfx908 support
Kwok Yeung
kcy@gcc.gnu.org
Thu Mar 25 20:13:37 GMT 2021
https://gcc.gnu.org/g:bb55967ccde0b48f285150caf6443a327159b4a2
commit bb55967ccde0b48f285150caf6443a327159b4a2
Author: Andrew Stubbs <ams@codesourcery.com>
Date: Thu Oct 22 21:23:48 2020 +0100
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:
---
gcc/ChangeLog.omp | 15 +++++++++++++++
gcc/config/gcn/gcn-opts.h | 3 ++-
gcc/config/gcn/gcn.c | 3 +++
gcc/config/gcn/gcn.opt | 3 +++
gcc/config/gcn/mkoffload.c | 4 ++++
gcc/config/gcn/t-gcn-hsa | 4 ++--
gcc/config/gcn/t-omp-device | 2 +-
libgomp/ChangeLog.omp | 11 +++++++++++
libgomp/plugin/plugin-gcn.c | 7 +++++++
9 files changed, 48 insertions(+), 4 deletions(-)
diff --git a/gcc/ChangeLog.omp b/gcc/ChangeLog.omp
index 374665d3fab..d6566ce97a0 100644
--- a/gcc/ChangeLog.omp
+++ b/gcc/ChangeLog.omp
@@ -1,3 +1,18 @@
+2021-03-25 Kwok Cheung Yeung <kcy@codesourcery.com>
+
+ Backport from mainline
+ 2020-10-22 Andrew Stubbs <ams@codesourcery.com>
+
+ * 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 <kcy@codesourcery.com>
* 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 8eefb7a348a..b4bd76e6fb0 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 095de6a2f7e..225efc3f088 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 57216983e4b..ee8fb4614e8 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 60794c10434..d114287e353 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 16d243c3f2b..b39e9541f08 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 d9809d5f455..8461c432ca9 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 e8e1ce96fc3..b0af9c205a3 100644
--- a/libgomp/ChangeLog.omp
+++ b/libgomp/ChangeLog.omp
@@ -1,3 +1,14 @@
+2021-03-25 Kwok Cheung Yeung <kcy@codesourcery.com>
+
+ Backport from mainline
+ 2020-10-22 Andrew Stubbs <ams@codesourcery.com>
+
+ * 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 <thomas@codesourcery.com>
* 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 5d96b33351b..cef616f4f5f 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;
}
More information about the Gcc-cvs
mailing list