diff --git a/gcc/config.gcc b/gcc/config.gcc index 87a5c92b6e3b96619f4841dde7c1f3de8a46bbfc..17873ac21039000c459d0427e9ca32b87e39ff16 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 ac32b8a328fac1fefc90b3b5c40c8537f8bb9100..7d6e3141cea173f06e05e43bd6aca3c0353fe231 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 285746f7f4dd67605f329198aef22596ad0c9142..49099bad7e726bf0607bde1de859081210236d63 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 efb73af50c44eb379aa39aea1d7280c1fa575fc9..700e554855e5f2a4ab240c48cb06bf6e4a852f01 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 b003db6cd26d0250f2fbc1b61dbdbbac39fcf497..4148ceaf5828c7c2b2e7cf6da44a7bd1955f677c 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 e06a2849d909306aa570be8aff26b08803e87531..1067b45f2947b8cec2b1d6c669f222c2b63a9f78 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 58eeada82958161baba565be07186f1ffd228dcb..04356b8619576f35b4e10e9f7509e9fd98ea3872 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 037df2657ccf2d537ac24c2ba72d8ab877deddc4..7bcf910cbd0fe9763b514c46d1a266c93ba8133c 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 a9872e86beefe43eecf0223de477d36898888783..269fe7ec87012d573371947146ec24e71141f97a 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 e7b96212354479a78e828bc9bb3a7409abec828a..d09074e13de46b54c2e17b7c6817a1589ef7096c 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 53dc1c7d23ad69e9e1eaa5047749e24d6e60a83d..1d183b61ca4f7302b77cb714e42c3c1ca801bf81 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: