Thanks,
Richard.
gcc/ChangeLog:
* config.gcc (amdgcn): Add gfx1036 entries.
* config/gcn/gcn-hsa.h (NO_XNACK): Likewise.
(gcn_local_sym_hash): Likewise.
* config/gcn/gcn-opts.h (enum processor_type): Likewise.
(TARGET_GFX1036): New macro.
* config/gcn/gcn.cc (gcn_option_override): Handle gfx1036.
(gcn_omp_device_kind_arch_isa): Likewise.
(output_file_start): Likewise.
* config/gcn/gcn.h (TARGET_CPU_CPP_BUILTINS): Add __gfx1036__.
(TARGET_CPU_CPP_BUILTINS): Rename __gfx1030 to __gfx1030__.
* config/gcn/gcn.opt: Add gfx1036.
* config/gcn/mkoffload.cc (EF_AMDGPU_MACH_AMDGCN_GFX1036): New.
(main): Handle gfx1036.
* config/gcn/t-omp-device: Add gfx1036 isa.
* doc/install.texi (amdgcn): Add gfx1036.
* doc/invoke.texi (-march): Likewise.
libgomp/ChangeLog:
* plugin/plugin-gcn.c (EF_AMDGPU_MACH): GFX1036.
(gcn_gfx1103_s): New.
(isa_hsa_name): Handle gfx1036.
(isa_code): Likewise.
(max_isa_vgprs): Likewise.
---
gcc/config.gcc | 4 ++--
gcc/config/gcn/gcn-hsa.h | 6 +++---
gcc/config/gcn/gcn-opts.h | 2 ++
gcc/config/gcn/gcn.cc | 10 ++++++++++
gcc/config/gcn/gcn.h | 4 +++-
gcc/config/gcn/gcn.opt | 3 +++
gcc/config/gcn/mkoffload.cc | 5 +++++
gcc/config/gcn/t-omp-device | 2 +-
gcc/doc/install.texi | 3 ++-
gcc/doc/invoke.texi | 3 +++
libgomp/plugin/plugin-gcn.c | 8 ++++++++
11 files changed, 42 insertions(+), 8 deletions(-)
diff --git a/gcc/config.gcc b/gcc/config.gcc
index 87a5c92b6e3..17873ac2103 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -4560,7 +4560,7 @@ case "${target}" in
for which in arch tune; do
eval "val=\$with_$which"
case ${val} in
- "" | fiji | gfx900 | gfx906 | gfx908 | gfx90a | gfx1030
| gfx1100 | gfx1103)
+ "" | fiji | gfx900 | gfx906 | gfx908 | gfx90a | gfx1030
| gfx1036 | gfx1100 | gfx1103)
# OK
;;
*)
@@ -4576,7 +4576,7 @@ case "${target}" in
TM_MULTILIB_CONFIG=
;;
xdefault | xyes)
- TM_MULTILIB_CONFIG=`echo
"gfx900,gfx906,gfx908,gfx90a,gfx1030,gfx1100,gfx1103" | sed
"s/${with_arch},\?//;s/,$//"`
+ TM_MULTILIB_CONFIG=`echo
"gfx900,gfx906,gfx908,gfx90a,gfx1030,gfx1036,gfx1100,gfx1103" | sed
"s/${with_arch},\?//;s/,$//"`
;;
*)
TM_MULTILIB_CONFIG="${with_multilib_list}"
diff --git a/gcc/config/gcn/gcn-hsa.h b/gcc/config/gcn/gcn-hsa.h
index ac32b8a328f..7d6e3141cea 100644
--- a/gcc/config/gcn/gcn-hsa.h
+++ b/gcc/config/gcn/gcn-hsa.h
@@ -90,7 +90,7 @@ extern unsigned int gcn_local_sym_hash (const char *name);
the ELF flags (e_flags) of that generated file must be identical to those
generated by the compiler. */
-#define NO_XNACK "march=fiji:;march=gfx1030:;march=gfx1100:;march=gfx1103:;" \
+#define NO_XNACK
"march=fiji:;march=gfx1030:;march=gfx1036:;march=gfx1100:;march=gfx1103:;" \
/* These match the defaults set in gcn.cc. */ \
"!mxnack*|mxnack=default:%{march=gfx900|march=gfx906|march=gfx908:-mattr=-xnack};"
#define NO_SRAM_ECC "!march=*:;march=fiji:;march=gfx900:;march=gfx906:;"
@@ -106,8 +106,8 @@ extern unsigned int gcn_local_sym_hash (const char *name);
"%{" ABI_VERSION_SPEC "} " \
"%{" NO_XNACK XNACKOPT "} " \
"%{" NO_SRAM_ECC SRAMOPT "} " \
-
"%{march=gfx1030|march=gfx1100|march=gfx1103:-mattr=+wavefrontsize64} " \
- "%{march=gfx1030|march=gfx1100|march=gfx1103:-mattr=+cumode}
" \
+
"%{march=gfx1030|march=gfx1036|march=gfx1100|march=gfx1103:-mattr=+wavefrontsize64}
" \
+
"%{march=gfx1030|march=gfx1036|march=gfx1100|march=gfx1103:-mattr=+cumode} " \
"-filetype=obj"
#define LINK_SPEC "--pie --export-dynamic"
#define LIB_SPEC "-lc"
diff --git a/gcc/config/gcn/gcn-opts.h b/gcc/config/gcn/gcn-opts.h
index 285746f7f4d..49099bad7e7 100644
--- a/gcc/config/gcn/gcn-opts.h
+++ b/gcc/config/gcn/gcn-opts.h
@@ -26,6 +26,7 @@ enum processor_type
PROCESSOR_GFX908,
PROCESSOR_GFX90a,
PROCESSOR_GFX1030,
+ PROCESSOR_GFX1036,
PROCESSOR_GFX1100,
PROCESSOR_GFX1103
};
@@ -36,6 +37,7 @@ enum processor_type
#define TARGET_GFX908 (gcn_arch == PROCESSOR_GFX908)
#define TARGET_GFX90a (gcn_arch == PROCESSOR_GFX90a)
#define TARGET_GFX1030 (gcn_arch == PROCESSOR_GFX1030)
+#define TARGET_GFX1036 (gcn_arch == PROCESSOR_GFX1036)
#define TARGET_GFX1100 (gcn_arch == PROCESSOR_GFX1100)
#define TARGET_GFX1103 (gcn_arch == PROCESSOR_GFX1103)
diff --git a/gcc/config/gcn/gcn.cc b/gcc/config/gcn/gcn.cc
index efb73af50c4..700e554855e 100644
--- a/gcc/config/gcn/gcn.cc
+++ b/gcc/config/gcn/gcn.cc
@@ -139,6 +139,7 @@ gcn_option_override (void)
: gcn_arch == PROCESSOR_GFX908 ? ISA_CDNA1
: gcn_arch == PROCESSOR_GFX90a ? ISA_CDNA2
: gcn_arch == PROCESSOR_GFX1030 ? ISA_RDNA2
+ : gcn_arch == PROCESSOR_GFX1036 ? ISA_RDNA2
: gcn_arch == PROCESSOR_GFX1100 ? ISA_RDNA3
: gcn_arch == PROCESSOR_GFX1103 ? ISA_RDNA3
: ISA_UNKNOWN);
@@ -165,6 +166,7 @@ gcn_option_override (void)
/* gfx803 "Fiji", gfx1030 and gfx1100 do not support XNACK. */
if (gcn_arch == PROCESSOR_FIJI
|| gcn_arch == PROCESSOR_GFX1030
+ || gcn_arch == PROCESSOR_GFX1036
|| gcn_arch == PROCESSOR_GFX1100
|| gcn_arch == PROCESSOR_GFX1103)
{
@@ -172,6 +174,7 @@ gcn_option_override (void)
error ("%<-mxnack=on%> is incompatible with %<-march=%s%>",
(gcn_arch == PROCESSOR_FIJI ? "fiji"
: gcn_arch == PROCESSOR_GFX1030 ? "gfx1030"
+ : gcn_arch == PROCESSOR_GFX1036 ? "gfx1036"
: gcn_arch == PROCESSOR_GFX1100 ? "gfx1100"
: gcn_arch == PROCESSOR_GFX1103 ? "gfx1103"
: NULL));
@@ -3049,6 +3052,8 @@ gcn_omp_device_kind_arch_isa (enum
omp_device_kind_arch_isa trait,
return gcn_arch == PROCESSOR_GFX90a;
if (strcmp (name, "gfx1030") == 0)
return gcn_arch == PROCESSOR_GFX1030;
+ if (strcmp (name, "gfx1036") == 0)
+ return gcn_arch == PROCESSOR_GFX1036;
if (strcmp (name, "gfx1100") == 0)
return gcn_arch == PROCESSOR_GFX1100;
if (strcmp (name, "gfx1103") == 0)
@@ -6584,6 +6589,11 @@ output_file_start (void)
xnack = "";
sram_ecc = "";
break;
+ case PROCESSOR_GFX1036:
+ cpu = "gfx1036";
+ xnack = "";
+ sram_ecc = "";
+ break;
case PROCESSOR_GFX1100:
cpu = "gfx1100";
xnack = "";
diff --git a/gcc/config/gcn/gcn.h b/gcc/config/gcn/gcn.h
index b003db6cd26..4148ceaf582 100644
--- a/gcc/config/gcn/gcn.h
+++ b/gcc/config/gcn/gcn.h
@@ -48,7 +48,9 @@
else if (TARGET_GFX90a)
\
builtin_define ("__gfx90a__"); \
else if (TARGET_GFX1030)
\
- builtin_define ("__gfx1030"); \
+ builtin_define ("__gfx1030__"); \
+ else if (TARGET_GFX1036)
\
+ builtin_define ("__gfx1036__"); \
else if (TARGET_GFX1100)
\
builtin_define ("__gfx1100__"); \
else if (TARGET_GFX1103)
\
diff --git a/gcc/config/gcn/gcn.opt b/gcc/config/gcn/gcn.opt
index e06a2849d90..1067b45f294 100644
--- a/gcc/config/gcn/gcn.opt
+++ b/gcc/config/gcn/gcn.opt
@@ -43,6 +43,9 @@ Enum(gpu_type) String(gfx90a) Value(PROCESSOR_GFX90a)
EnumValue
Enum(gpu_type) String(gfx1030) Value(PROCESSOR_GFX1030)
+EnumValue
+Enum(gpu_type) String(gfx1036) Value(PROCESSOR_GFX1036)
+
EnumValue
Enum(gpu_type) String(gfx1100) Value(PROCESSOR_GFX1100)
diff --git a/gcc/config/gcn/mkoffload.cc b/gcc/config/gcn/mkoffload.cc
index 58eeada8295..04356b86195 100644
--- a/gcc/config/gcn/mkoffload.cc
+++ b/gcc/config/gcn/mkoffload.cc
@@ -59,6 +59,8 @@
#define EF_AMDGPU_MACH_AMDGCN_GFX90a 0x3f
#undef EF_AMDGPU_MACH_AMDGCN_GFX1030
#define EF_AMDGPU_MACH_AMDGCN_GFX1030 0x36
+#undef EF_AMDGPU_MACH_AMDGCN_GFX1036
+#define EF_AMDGPU_MACH_AMDGCN_GFX1036 0x45
#undef EF_AMDGPU_MACH_AMDGCN_GFX1100
#define EF_AMDGPU_MACH_AMDGCN_GFX1100 0x41
#undef EF_AMDGPU_MACH_AMDGCN_GFX1103
@@ -971,6 +973,8 @@ main (int argc, char **argv)
elf_arch = EF_AMDGPU_MACH_AMDGCN_GFX90a;
else if (strcmp (argv[i], "-march=gfx1030") == 0)
elf_arch = EF_AMDGPU_MACH_AMDGCN_GFX1030;
+ else if (strcmp (argv[i], "-march=gfx1036") == 0)
+ elf_arch = EF_AMDGPU_MACH_AMDGCN_GFX1036;
else if (strcmp (argv[i], "-march=gfx1100") == 0)
elf_arch = EF_AMDGPU_MACH_AMDGCN_GFX1100;
else if (strcmp (argv[i], "-march=gfx1103") == 0)
@@ -1016,6 +1020,7 @@ main (int argc, char **argv)
{
case EF_AMDGPU_MACH_AMDGCN_GFX803:
case EF_AMDGPU_MACH_AMDGCN_GFX1030:
+ case EF_AMDGPU_MACH_AMDGCN_GFX1036:
case EF_AMDGPU_MACH_AMDGCN_GFX1100:
case EF_AMDGPU_MACH_AMDGCN_GFX1103:
SET_XNACK_UNSET (elf_flags);
diff --git a/gcc/config/gcn/t-omp-device b/gcc/config/gcn/t-omp-device
index 037df2657cc..7bcf910cbd0 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.cc
echo kind: gpu > $@
echo arch: amdgcn gcn >> $@
- echo isa: fiji gfx803 gfx900 gfx906 gfx908 gfx90a gfx1030 gfx1100 gfx1103
>> $@
+ echo isa: fiji gfx803 gfx900 gfx906 gfx908 gfx90a gfx1030 gfx1036 gfx1100
gfx1103 >> $@
diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi
index a9872e86bee..269fe7ec870 100644
--- a/gcc/doc/install.texi
+++ b/gcc/doc/install.texi
@@ -1266,7 +1266,8 @@ default set of libraries is selected based on the value of
@item amdgcn*-*-*
@var{list} is a comma separated list of ISA names (allowed values:
@code{fiji},
@code{gfx900}, @code{gfx906}, @code{gfx908}, @code{gfx90a}, @code{gfx1030},
-@code{gfx1100}, @code{gfx1103}). It ought not include the name of the default
+@code{gfx1036}, @code{gfx1100}, @code{gfx1103}).
+It ought not include the name of the default
ISA, specified via @option{--with-arch}. If @var{list} is empty, then there
will be no multilibs and only the default run-time library will be built. If
@var{list} is @code{default} or @option{--with-multilib-list=} is not
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index e7b96212354..d09074e13de 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -21792,6 +21792,9 @@ Compile for CDNA2 Instinct MI200 series devices
(gfx90a).
@item gfx1030
Compile for RDNA2 gfx1030 devices (GFX10 series).
+@item gfx1036
+Compile for RDNA2 gfx1036 devices (GFX10 series).
+
@item gfx1100
Compile for RDNA3 gfx1100 devices (GFX11 series).
diff --git a/libgomp/plugin/plugin-gcn.c b/libgomp/plugin/plugin-gcn.c
index 53dc1c7d23a..1d183b61ca4 100644
--- a/libgomp/plugin/plugin-gcn.c
+++ b/libgomp/plugin/plugin-gcn.c
@@ -391,6 +391,7 @@ typedef enum {
EF_AMDGPU_MACH_AMDGCN_GFX908 = 0x030,
EF_AMDGPU_MACH_AMDGCN_GFX90a = 0x03f,
EF_AMDGPU_MACH_AMDGCN_GFX1030 = 0x036,
+ EF_AMDGPU_MACH_AMDGCN_GFX1036 = 0x045,
EF_AMDGPU_MACH_AMDGCN_GFX1100 = 0x041,
EF_AMDGPU_MACH_AMDGCN_GFX1103 = 0x044
} EF_AMDGPU_MACH;
@@ -1677,6 +1678,7 @@ const static char *gcn_gfx906_s = "gfx906";
const static char *gcn_gfx908_s = "gfx908";
const static char *gcn_gfx90a_s = "gfx90a";
const static char *gcn_gfx1030_s = "gfx1030";
+const static char *gcn_gfx1036_s = "gfx1036";
const static char *gcn_gfx1100_s = "gfx1100";
const static char *gcn_gfx1103_s = "gfx1103";
const static int gcn_isa_name_len = 7;
@@ -1700,6 +1702,8 @@ isa_hsa_name (int isa) {
return gcn_gfx90a_s;
case EF_AMDGPU_MACH_AMDGCN_GFX1030:
return gcn_gfx1030_s;
+ case EF_AMDGPU_MACH_AMDGCN_GFX1036:
+ return gcn_gfx1036_s;
case EF_AMDGPU_MACH_AMDGCN_GFX1100:
return gcn_gfx1100_s;
case EF_AMDGPU_MACH_AMDGCN_GFX1103:
@@ -1746,6 +1750,9 @@ isa_code(const char *isa) {
if (!strncmp (isa, gcn_gfx1030_s, gcn_isa_name_len))
return EF_AMDGPU_MACH_AMDGCN_GFX1030;
+ if (!strncmp (isa, gcn_gfx1036_s, gcn_isa_name_len))
+ return EF_AMDGPU_MACH_AMDGCN_GFX1036;
+
if (!strncmp (isa, gcn_gfx1100_s, gcn_isa_name_len))
return EF_AMDGPU_MACH_AMDGCN_GFX1100;
@@ -1770,6 +1777,7 @@ max_isa_vgprs (int isa)
case EF_AMDGPU_MACH_AMDGCN_GFX90a:
return 512;
case EF_AMDGPU_MACH_AMDGCN_GFX1030:
+ case EF_AMDGPU_MACH_AMDGCN_GFX1036:
return 512; /* 512 SIMD32 = 256 wavefrontsize64. */
case EF_AMDGPU_MACH_AMDGCN_GFX1100:
case EF_AMDGPU_MACH_AMDGCN_GFX1103: