summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Stubbs <ams@codesourcery.com>2022-02-15 15:33:53 +0000
committerAndrew Stubbs <ams@codesourcery.com>2022-05-24 16:58:05 +0100
commit7d5faa57568b68d83543480e1cf39383986c86b5 (patch)
tree52c607abf0f9c92a78938b63fadb8d39104efcb1
parentedd7d04ccb4b5ead99cca6d6e20f5c9fa8f1286b (diff)
amdgcn: Remove LLVM 9 assembler/linker support
The minimum required LLVM version is now 13.0.1, and is enforced by configure. gcc/ChangeLog: * config.in: Regenerate. * config/gcn/gcn-hsa.h (X_FIJI): Delete. (X_900): Delete. (X_906): Delete. (X_908): Delete. (S_FIJI): Delete. (S_900): Delete. (S_906): Delete. (S_908): Delete. (NO_XNACK): New macro. (NO_SRAM_ECC): New macro. (SRAMOPT): Keep only v4 variant. (HSACO3_SELECT_OPT): Delete. (DRIVER_SELF_SPECS): Delete. (ASM_SPEC): Remove LLVM 9 support. * config/gcn/gcn-valu.md (gather<mode>_insn_2offsets<exec>): Remove assembler bug workaround. (scatter<mode>_insn_2offsets<exec_scatter>): Likewise. * config/gcn/gcn.cc (output_file_start): Remove LLVM 9 support. (print_operand_address): Remove assembler bug workaround. * config/gcn/mkoffload.cc (EF_AMDGPU_XNACK_V3): Delete. (EF_AMDGPU_SRAM_ECC_V3): Delete. (SET_XNACK_ON): Delete v3 variants. (SET_XNACK_OFF): Delete v3 variants. (TEST_XNACK): Delete v3 variants. (SET_SRAM_ECC_ON): Delete v3 variants. (SET_SRAM_ECC_ANY): Delete v3 variants. (SET_SRAM_ECC_OFF): Delete v3 variants. (SET_SRAM_ECC_UNSUPPORTED): Delete v3 variants. (TEST_SRAM_ECC_ANY): Delete v3 variants. (TEST_SRAM_ECC_ON): Delete v3 variants. (copy_early_debug_info): Remove v3 support. (main): Remove v3 support. * configure: Regenerate. * configure.ac: Replace all GCN feature checks with a version check. Backport from 8086230e7ac619c0b0eeb6e15df7975ac214725f.
-rw-r--r--gcc/ChangeLog.omp38
-rw-r--r--gcc/config.in66
-rw-r--r--gcc/config/gcn/gcn-hsa.h59
-rw-r--r--gcc/config/gcn/gcn-valu.md25
-rw-r--r--gcc/config/gcn/gcn.c76
-rw-r--r--gcc/config/gcn/mkoffload.c65
-rwxr-xr-xgcc/configure392
-rw-r--r--gcc/configure.ac135
8 files changed, 96 insertions, 760 deletions
diff --git a/gcc/ChangeLog.omp b/gcc/ChangeLog.omp
index e260341d53a..21555f7bab8 100644
--- a/gcc/ChangeLog.omp
+++ b/gcc/ChangeLog.omp
@@ -1,3 +1,41 @@
+2022-05-24 Andrew Stubbs <ams@codesourcery.com>
+
+ * config.in: Regenerate.
+ * config/gcn/gcn-hsa.h (X_FIJI): Delete.
+ (X_900): Delete.
+ (X_906): Delete.
+ (X_908): Delete.
+ (S_FIJI): Delete.
+ (S_900): Delete.
+ (S_906): Delete.
+ (S_908): Delete.
+ (NO_XNACK): New macro.
+ (NO_SRAM_ECC): New macro.
+ (SRAMOPT): Keep only v4 variant.
+ (HSACO3_SELECT_OPT): Delete.
+ (DRIVER_SELF_SPECS): Delete.
+ (ASM_SPEC): Remove LLVM 9 support.
+ * config/gcn/gcn-valu.md
+ (gather<mode>_insn_2offsets<exec>): Remove assembler bug workaround.
+ (scatter<mode>_insn_2offsets<exec_scatter>): Likewise.
+ * config/gcn/gcn.cc (output_file_start): Remove LLVM 9 support.
+ (print_operand_address): Remove assembler bug workaround.
+ * config/gcn/mkoffload.cc (EF_AMDGPU_XNACK_V3): Delete.
+ (EF_AMDGPU_SRAM_ECC_V3): Delete.
+ (SET_XNACK_ON): Delete v3 variants.
+ (SET_XNACK_OFF): Delete v3 variants.
+ (TEST_XNACK): Delete v3 variants.
+ (SET_SRAM_ECC_ON): Delete v3 variants.
+ (SET_SRAM_ECC_ANY): Delete v3 variants.
+ (SET_SRAM_ECC_OFF): Delete v3 variants.
+ (SET_SRAM_ECC_UNSUPPORTED): Delete v3 variants.
+ (TEST_SRAM_ECC_ANY): Delete v3 variants.
+ (TEST_SRAM_ECC_ON): Delete v3 variants.
+ (copy_early_debug_info): Remove v3 support.
+ (main): Remove v3 support.
+ * configure: Regenerate.
+ * configure.ac: Replace all GCN feature checks with a version check.
+
2022-04-20 Andrew Stubbs <ams@codesourcery.com>
* omp-low.c: Do USM transformations for "unified_address".
diff --git a/gcc/config.in b/gcc/config.in
index 2de5a463315..4d5da7dab3a 100644
--- a/gcc/config.in
+++ b/gcc/config.in
@@ -1438,72 +1438,6 @@
#endif
-/* Define if your assembler has fixed global_load functions. */
-#ifndef USED_FOR_TARGET
-#undef HAVE_GCN_ASM_GLOBAL_LOAD_FIXED
-#endif
-
-
-/* Define if your assembler expects amdgcn_target gfx908+xnack syntax. */
-#ifndef USED_FOR_TARGET
-#undef HAVE_GCN_ASM_V3_SYNTAX
-#endif
-
-
-/* Define if your assembler expects amdgcn_target gfx908:xnack+ syntax. */
-#ifndef USED_FOR_TARGET
-#undef HAVE_GCN_ASM_V4_SYNTAX
-#endif
-
-
-/* Define if your assembler allows -mattr=+sramecc for fiji. */
-#ifndef USED_FOR_TARGET
-#undef HAVE_GCN_SRAM_ECC_FIJI
-#endif
-
-
-/* Define if your assembler allows -mattr=+sramecc for gfx900. */
-#ifndef USED_FOR_TARGET
-#undef HAVE_GCN_SRAM_ECC_GFX900
-#endif
-
-
-/* Define if your assembler allows -mattr=+sramecc for gfx906. */
-#ifndef USED_FOR_TARGET
-#undef HAVE_GCN_SRAM_ECC_GFX906
-#endif
-
-
-/* Define if your assembler allows -mattr=+sramecc for gfx908. */
-#ifndef USED_FOR_TARGET
-#undef HAVE_GCN_SRAM_ECC_GFX908
-#endif
-
-
-/* Define if your assembler allows -mattr=+xnack for fiji. */
-#ifndef USED_FOR_TARGET
-#undef HAVE_GCN_XNACK_FIJI
-#endif
-
-
-/* Define if your assembler allows -mattr=+xnack for gfx900. */
-#ifndef USED_FOR_TARGET
-#undef HAVE_GCN_XNACK_GFX900
-#endif
-
-
-/* Define if your assembler allows -mattr=+xnack for gfx906. */
-#ifndef USED_FOR_TARGET
-#undef HAVE_GCN_XNACK_GFX906
-#endif
-
-
-/* Define if your assembler allows -mattr=+xnack for gfx908. */
-#ifndef USED_FOR_TARGET
-#undef HAVE_GCN_XNACK_GFX908
-#endif
-
-
/* Define to 1 if you have the `getchar_unlocked' function. */
#ifndef USED_FOR_TARGET
#undef HAVE_GETCHAR_UNLOCKED
diff --git a/gcc/config/gcn/gcn-hsa.h b/gcc/config/gcn/gcn-hsa.h
index 4fd2f07b983..12c3b16c62e 100644
--- a/gcc/config/gcn/gcn-hsa.h
+++ b/gcc/config/gcn/gcn-hsa.h
@@ -75,68 +75,19 @@ extern unsigned int gcn_local_sym_hash (const char *name);
supported for gcn. */
#define GOMP_SELF_SPECS ""
-#ifdef HAVE_GCN_XNACK_FIJI
-#define X_FIJI
-#else
-#define X_FIJI "!march=*:;march=fiji:;"
-#endif
-#ifdef HAVE_GCN_XNACK_GFX900
-#define X_900
-#else
-#define X_900 "march=gfx900:;"
-#endif
-#ifdef HAVE_GCN_XNACK_GFX906
-#define X_906
-#else
-#define X_906 "march=gfx906:;"
-#endif
-#ifdef HAVE_GCN_XNACK_GFX908
-#define X_908
-#else
-#define X_908 "march=gfx908:;"
-#endif
-
-/* These targets can't have SRAM-ECC, even if a broken assembler allows it. */
-#define S_FIJI "!march=*:;march=fiji:;"
-#define S_900 "march=gfx900:;"
-#define S_906 "march=gfx906:;"
-#ifdef HAVE_GCN_SRAM_ECC_GFX908
-#define S_908
-#else
-#define S_908 "march=gfx908:;"
-#endif
+#define NO_XNACK "!march=*:;march=fiji:;"
+#define NO_SRAM_ECC "!march=*:;march=fiji:;march=gfx900:;march=gfx906:;"
-#ifdef HAVE_GCN_ASM_V3_SYNTAX
-#define SRAMOPT "!msram-ecc=off:-mattr=+sram-ecc;:-mattr=-sram-ecc"
-#endif
-#ifdef HAVE_GCN_ASM_V4_SYNTAX
/* In HSACOv4 no attribute setting means the binary supports "any" hardware
configuration. The name of the attribute also changed. */
#define SRAMOPT "msram-ecc=on:-mattr=+sramecc;msram-ecc=off:-mattr=-sramecc"
-#endif
-#if !defined(SRAMOPT) && !defined(IN_LIBGCC2)
-#error "No assembler syntax configured"
-#endif
-
-#ifdef HAVE_GCN_ASM_V4_SYNTAX
-/* FIJI cards don't seem to support drivers new enough to allow HSACOv4. */
-#define HSACO3_SELECT_OPT \
- "%{!march=*|march=fiji:--amdhsa-code-object-version=3} "
-#else
-#define HSACO3_SELECT_OPT
-#endif
-
-/* These targets can't have SRAM-ECC, even if a broken assembler allows it. */
-#define DRIVER_SELF_SPECS \
- "%{march=fiji|march=gfx900|march=gfx906:%{!msram-ecc=*:-msram-ecc=off}}"
/* Use LLVM assembler and linker options. */
#define ASM_SPEC "-triple=amdgcn--amdhsa " \
"%:last_arg(%{march=*:-mcpu=%*}) " \
- HSACO3_SELECT_OPT \
- "%{" X_FIJI X_900 X_906 X_908 \
- "mxnack:-mattr=+xnack;:-mattr=-xnack} " \
- "%{" S_FIJI S_900 S_906 S_908 SRAMOPT "} " \
+ "%{!march=*|march=fiji:--amdhsa-code-object-version=3} " \
+ "%{" NO_XNACK "mxnack:-mattr=+xnack;:-mattr=-xnack} " \
+ "%{" NO_SRAM_ECC SRAMOPT "} " \
"-filetype=obj"
#define LINK_SPEC "--pie --export-dynamic"
#define LIB_SPEC "-lc"
diff --git a/gcc/config/gcn/gcn-valu.md b/gcc/config/gcn/gcn-valu.md
index 01fdce64d42..9b7197aa19a 100644
--- a/gcc/config/gcn/gcn-valu.md
+++ b/gcc/config/gcn/gcn-valu.md
@@ -823,17 +823,8 @@
static char buf[200];
if (AS_GLOBAL_P (as))
- {
- /* Work around assembler bug in which a 64-bit register is expected,
- but a 32-bit value would be correct. */
- int reg = REGNO (operands[2]) - FIRST_VGPR_REG;
- if (HAVE_GCN_ASM_GLOBAL_LOAD_FIXED)
- sprintf (buf, "global_load%%o0\t%%0, v%d, %%1 offset:%%3%s\;"
- "s_waitcnt\tvmcnt(0)", reg, glc);
- else
- sprintf (buf, "global_load%%o0\t%%0, v[%d:%d], %%1 offset:%%3%s\;"
- "s_waitcnt\tvmcnt(0)", reg, reg + 1, glc);
- }
+ sprintf (buf, "global_load%%o0\t%%0, %%2, %%1 offset:%%3%s\;"
+ "s_waitcnt\tvmcnt(0)", glc);
else
gcc_unreachable ();
@@ -958,17 +949,7 @@
static char buf[200];
if (AS_GLOBAL_P (as))
- {
- /* Work around assembler bug in which a 64-bit register is expected,
- but a 32-bit value would be correct. */
- int reg = REGNO (operands[1]) - FIRST_VGPR_REG;
- if (HAVE_GCN_ASM_GLOBAL_LOAD_FIXED)
- sprintf (buf, "global_store%%s3\tv%d, %%3, %%0 offset:%%2%s",
- reg, glc);
- else
- sprintf (buf, "global_store%%s3\tv[%d:%d], %%3, %%0 offset:%%2%s",
- reg, reg + 1, glc);
- }
+ sprintf (buf, "global_store%%s3\t%%1, %%3, %%0 offset:%%2%s", glc);
else
gcc_unreachable ();
diff --git a/gcc/config/gcn/gcn.c b/gcc/config/gcn/gcn.c
index 5c390c69865..7f00cd7a14c 100644
--- a/gcc/config/gcn/gcn.c
+++ b/gcc/config/gcn/gcn.c
@@ -5191,71 +5191,38 @@ gcn_shared_mem_layout (unsigned HOST_WIDE_INT *lo,
static void
output_file_start (void)
{
+ /* In HSACOv4 no attribute setting means the binary supports "any" hardware
+ configuration. In GCC binaries, this is true for SRAM ECC, but not
+ XNACK. */
+ const char *xnack = (flag_xnack ? ":xnack+" : ":xnack-");
+ const char *sram_ecc = (flag_sram_ecc == SRAM_ECC_ON ? ":sramecc+"
+ : flag_sram_ecc == SRAM_ECC_OFF ? ":sramecc-"
+ : "");
+
const char *cpu;
- bool use_xnack_attr = true;
- bool use_sram_attr = true;
switch (gcn_arch)
{
case PROCESSOR_FIJI:
cpu = "gfx803";
-#ifndef HAVE_GCN_XNACK_FIJI
- use_xnack_attr = false;
-#endif
- use_sram_attr = false;
+ xnack = "";
+ sram_ecc = "";
break;
case PROCESSOR_VEGA10:
cpu = "gfx900";
-#ifndef HAVE_GCN_XNACK_GFX900
- use_xnack_attr = false;
-#endif
- use_sram_attr = false;
+ sram_ecc = "";
break;
case PROCESSOR_VEGA20:
cpu = "gfx906";
-#ifndef HAVE_GCN_XNACK_GFX906
- use_xnack_attr = false;
-#endif
- use_sram_attr = false;
+ sram_ecc = "";
break;
case PROCESSOR_GFX908:
cpu = "gfx908";
-#ifndef HAVE_GCN_XNACK_GFX908
- use_xnack_attr = false;
-#endif
-#ifndef HAVE_GCN_SRAM_ECC_GFX908
- use_sram_attr = false;
-#endif
break;
default: gcc_unreachable ();
}
-#if HAVE_GCN_ASM_V3_SYNTAX
- const char *xnack = (flag_xnack ? "+xnack" : "");
- const char *sram_ecc = (flag_sram_ecc ? "+sram-ecc" : "");
-#endif
-#if HAVE_GCN_ASM_V4_SYNTAX
- /* In HSACOv4 no attribute setting means the binary supports "any" hardware
- configuration. In GCC binaries, this is true for SRAM ECC, but not
- XNACK. */
- const char *xnack = (flag_xnack ? ":xnack+" : ":xnack-");
- const char *sram_ecc = (flag_sram_ecc == SRAM_ECC_ON ? ":sramecc+"
- : flag_sram_ecc == SRAM_ECC_OFF ? ":sramecc-"
- : "");
-#endif
- if (!use_xnack_attr)
- xnack = "";
- if (!use_sram_attr)
- sram_ecc = "";
-
fprintf(asm_out_file, "\t.amdgcn_target \"amdgcn-unknown-amdhsa--%s%s%s\"\n",
- cpu,
-#if HAVE_GCN_ASM_V3_SYNTAX
- xnack, sram_ecc
-#endif
-#ifdef HAVE_GCN_ASM_V4_SYNTAX
- sram_ecc, xnack
-#endif
- );
+ cpu, sram_ecc, xnack);
}
/* Implement ASM_DECLARE_FUNCTION_NAME via gcn-hsa.h.
@@ -5700,23 +5667,10 @@ print_operand_address (FILE *file, rtx mem)
if (vgpr_offset == NULL_RTX)
/* In this case, the vector offset is zero, so we use the first
lane of v1, which is initialized to zero. */
- {
- if (HAVE_GCN_ASM_GLOBAL_LOAD_FIXED)
- fprintf (file, "v1");
- else
- fprintf (file, "v[1:2]");
- }
+ fprintf (file, "v1");
else if (REG_P (vgpr_offset)
&& VGPR_REGNO_P (REGNO (vgpr_offset)))
- {
- if (HAVE_GCN_ASM_GLOBAL_LOAD_FIXED)
- fprintf (file, "v%d",
- REGNO (vgpr_offset) - FIRST_VGPR_REG);
- else
- fprintf (file, "v[%d:%d]",
- REGNO (vgpr_offset) - FIRST_VGPR_REG,
- REGNO (vgpr_offset) - FIRST_VGPR_REG + 1);
- }
+ fprintf (file, "v%d", REGNO (vgpr_offset) - FIRST_VGPR_REG);
else
output_operand_lossage ("bad ADDR_SPACE_GLOBAL address");
}
diff --git a/gcc/config/gcn/mkoffload.c b/gcc/config/gcn/mkoffload.c
index 78c36ed5f7a..58c9b46dc35 100644
--- a/gcc/config/gcn/mkoffload.c
+++ b/gcc/config/gcn/mkoffload.c
@@ -56,9 +56,6 @@
#undef EF_AMDGPU_MACH_AMDGCN_GFX908
#define EF_AMDGPU_MACH_AMDGCN_GFX908 0x30
-#define EF_AMDGPU_XNACK_V3 0x100
-#define EF_AMDGPU_SRAM_ECC_V3 0x200
-
#define EF_AMDGPU_FEATURE_XNACK_V4 0x300 /* Mask. */
#define EF_AMDGPU_FEATURE_XNACK_UNSUPPORTED_V4 0x000
#define EF_AMDGPU_FEATURE_XNACK_ANY_V4 0x100
@@ -71,19 +68,6 @@
#define EF_AMDGPU_FEATURE_SRAMECC_OFF_V4 0x800
#define EF_AMDGPU_FEATURE_SRAMECC_ON_V4 0xc00
-#ifdef HAVE_GCN_ASM_V3_SYNTAX
-#define SET_XNACK_ON(VAR) VAR |= EF_AMDGPU_XNACK_V3
-#define SET_XNACK_OFF(VAR) VAR &= ~EF_AMDGPU_XNACK_V3
-#define TEST_XNACK(VAR) (VAR & EF_AMDGPU_XNACK_V3)
-
-#define SET_SRAM_ECC_ON(VAR) VAR |= EF_AMDGPU_SRAM_ECC_V3
-#define SET_SRAM_ECC_ANY(VAR) SET_SRAM_ECC_ON (VAR)
-#define SET_SRAM_ECC_OFF(VAR) VAR &= ~EF_AMDGPU_SRAM_ECC_V3
-#define SET_SRAM_ECC_UNSUPPORTED(VAR) SET_SRAM_ECC_OFF (VAR)
-#define TEST_SRAM_ECC_ANY(VAR) 0 /* Not supported. */
-#define TEST_SRAM_ECC_ON(VAR) (VAR & EF_AMDGPU_SRAM_ECC_V3)
-#endif
-#ifdef HAVE_GCN_ASM_V4_SYNTAX
#define SET_XNACK_ON(VAR) VAR = ((VAR & ~EF_AMDGPU_FEATURE_XNACK_V4) \
| EF_AMDGPU_FEATURE_XNACK_ON_V4)
#define SET_XNACK_OFF(VAR) VAR = ((VAR & ~EF_AMDGPU_FEATURE_XNACK_V4) \
@@ -104,7 +88,6 @@
== EF_AMDGPU_FEATURE_SRAMECC_ANY_V4)
#define TEST_SRAM_ECC_ON(VAR) ((VAR & EF_AMDGPU_FEATURE_SRAMECC_V4) \
== EF_AMDGPU_FEATURE_SRAMECC_ON_V4)
-#endif
#ifndef R_AMDGPU_NONE
#define R_AMDGPU_NONE 0
@@ -130,12 +113,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 =
-#ifdef HAVE_GCN_ASM_V3_SYNTAX
- 0;
-#endif
-#ifdef HAVE_GCN_ASM_V4_SYNTAX
(EF_AMDGPU_FEATURE_XNACK_ANY_V4 | EF_AMDGPU_FEATURE_SRAMECC_ANY_V4);
-#endif
/* Delete tempfiles. */
@@ -362,14 +340,9 @@ copy_early_debug_info (const char *infile, const char *outfile)
/* Patch the correct elf architecture flag into the file. */
ehdr.e_ident[7] = ELFOSABI_AMDGPU_HSA;
-#ifdef HAVE_GCN_ASM_V3_SYNTAX
- ehdr.e_ident[8] = ELFABIVERSION_AMDGPU_HSA_V3;
-#endif
-#ifdef HAVE_GCN_ASM_V4_SYNTAX
ehdr.e_ident[8] = (elf_arch == EF_AMDGPU_MACH_AMDGCN_GFX803
? ELFABIVERSION_AMDGPU_HSA_V3
: ELFABIVERSION_AMDGPU_HSA_V4);
-#endif
ehdr.e_type = ET_REL;
ehdr.e_machine = EM_AMDGPU;
ehdr.e_flags = elf_arch | elf_flags_actual;
@@ -884,7 +857,6 @@ main (int argc, char **argv)
bool fopenacc = false;
bool fPIC = false;
bool fpic = false;
- bool sram_seen = false;
for (int i = 1; i < argc; i++)
{
#define STR "-foffload-abi="
@@ -912,20 +884,11 @@ main (int argc, char **argv)
else if (strcmp (argv[i], "-mno-xnack") == 0)
SET_XNACK_OFF (elf_flags);
else if (strcmp (argv[i], "-msram-ecc=on") == 0)
- {
- SET_SRAM_ECC_ON (elf_flags);
- sram_seen = true;
- }
+ SET_SRAM_ECC_ON (elf_flags);
else if (strcmp (argv[i], "-msram-ecc=any") == 0)
- {
- SET_SRAM_ECC_ANY (elf_flags);
- sram_seen = true;
- }
+ SET_SRAM_ECC_ANY (elf_flags);
else if (strcmp (argv[i], "-msram-ecc=off") == 0)
- {
- SET_SRAM_ECC_OFF (elf_flags);
- sram_seen = true;
- }
+ SET_SRAM_ECC_OFF (elf_flags);
else if (strcmp (argv[i], "-save-temps") == 0)
save_temps = true;
else if (strcmp (argv[i], "-v") == 0)
@@ -946,28 +909,6 @@ main (int argc, char **argv)
if (!(fopenacc ^ fopenmp))
fatal_error (input_location, "either -fopenacc or -fopenmp must be set");
- if (!sram_seen)
- {
-#ifdef HAVE_GCN_ASM_V3_SYNTAX
- /* For HSACOv3, the SRAM-ECC feature defaults to "on" on GPUs where the
- feature is available.
- (HSACOv4 has elf_flags initialsed to "any" in all cases.) */
- switch (elf_arch)
- {
- case EF_AMDGPU_MACH_AMDGCN_GFX803:
- case EF_AMDGPU_MACH_AMDGCN_GFX900:
- case EF_AMDGPU_MACH_AMDGCN_GFX906:
-#ifndef HAVE_GCN_SRAM_ECC_GFX908
- case EF_AMDGPU_MACH_AMDGCN_GFX908:
-#endif
- break;
- default:
- SET_SRAM_ECC_ON (elf_flags);
- break;
- }
-#endif
- }
-
const char *abi;
switch (offload_abi)
{
diff --git a/gcc/configure b/gcc/configure
index 708328e1670..0487412e587 100755
--- a/gcc/configure
+++ b/gcc/configure
@@ -28891,385 +28891,27 @@ case "$target" in
;;
esac
-# This tests if the assembler supports two registers for global_load functions
-# (like in LLVM versions <12) or one register (like in LLVM 12).
+# AMD GCN needs the LLVM assembler and linker.
+# Test that LLVM is at least 13.0.1.
case "$target" in
amdgcn-* | gcn-*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler fix for global_load functions" >&5
-$as_echo_n "checking assembler fix for global_load functions... " >&6; }
- gcc_cv_as_gcn_global_load_fixed=yes
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking llvm assembler version" >&5
+$as_echo_n "checking llvm assembler version... " >&6; }
+ gcc_cv_as_version="unknown"
if test x$gcc_cv_as != x; then
- cat > conftest.s <<EOF
- global_store_dwordx2 v[1:2], v[4:5], s[14:15]
-EOF
- if $gcc_cv_as -triple=amdgcn--amdhsa -filetype=obj -mcpu=gfx900 -o conftest.o conftest.s > /dev/null 2>&1; then
- gcc_cv_as_gcn_global_load_fixed=no
- fi
- rm -f conftest.s conftest.o conftest
- fi
- global_load_fixed=`if test x$gcc_cv_as_gcn_global_load_fixed = xyes; then echo 1; else echo 0; fi`
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_GCN_ASM_GLOBAL_LOAD_FIXED $global_load_fixed
-_ACEOF
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_gcn_global_load_fixed" >&5
-$as_echo "$gcc_cv_as_gcn_global_load_fixed" >&6; }
- ;;
-esac
-
-case "$target" in
- amdgcn-* | gcn-*)
- # Test the LLVM assembler syntax dialect; they have made a number of
- # changes between LLVM 12 & 13 without any backward compatibility.
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for assembler amdgcn_target v2/3 syntax" >&5
-$as_echo_n "checking assembler for assembler amdgcn_target v2/3 syntax... " >&6; }
-if ${gcc_cv_as_gcn_asm_v3_syntax+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- gcc_cv_as_gcn_asm_v3_syntax=no
- if test x$gcc_cv_as != x; then
- $as_echo '.amdgcn_target "amdgcn-unknown-amdhsa--gfx906+xnack"' > conftest.s
- if { ac_try='$gcc_cv_as $gcc_cv_as_flags -triple=amdgcn--amdhsa -mcpu=gfx906 -mattr=+xnack -o conftest.o conftest.s >&5'
- { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }
- then
- gcc_cv_as_gcn_asm_v3_syntax=yes
- else
- echo "configure: failed program was" >&5
- cat conftest.s >&5
- fi
- rm -f conftest.o conftest.s
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_gcn_asm_v3_syntax" >&5
-$as_echo "$gcc_cv_as_gcn_asm_v3_syntax" >&6; }
-if test $gcc_cv_as_gcn_asm_v3_syntax = yes; then
-
-$as_echo "#define HAVE_GCN_ASM_V3_SYNTAX 1" >>confdefs.h
-
-fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for assembler amdgcn_target v4 syntax" >&5
-$as_echo_n "checking assembler for assembler amdgcn_target v4 syntax... " >&6; }
-if ${gcc_cv_as_gcn_asm_v4_syntax+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- gcc_cv_as_gcn_asm_v4_syntax=no
- if test x$gcc_cv_as != x; then
- $as_echo '.amdgcn_target "amdgcn-unknown-amdhsa--gfx908:xnack+"' > conftest.s
- if { ac_try='$gcc_cv_as $gcc_cv_as_flags -triple=amdgcn--amdhsa -mcpu=gfx908 -mattr=+xnack -o conftest.o conftest.s >&5'
- { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }
- then
- gcc_cv_as_gcn_asm_v4_syntax=yes
- else
- echo "configure: failed program was" >&5
- cat conftest.s >&5
- fi
- rm -f conftest.o conftest.s
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_gcn_asm_v4_syntax" >&5
-$as_echo "$gcc_cv_as_gcn_asm_v4_syntax" >&6; }
-if test $gcc_cv_as_gcn_asm_v4_syntax = yes; then
-
-$as_echo "#define HAVE_GCN_ASM_V4_SYNTAX 1" >>confdefs.h
-
-fi
-
-
- # Some attribute names changed in the move to v4 ...
- if test $gcc_cv_as_gcn_asm_v3_syntax = yes; then
- sramopt="+sram-ecc"
- sramattr="+sram-ecc"
- xnackattr="+xnack"
- elif test $gcc_cv_as_gcn_asm_v4_syntax = yes; then
- sramopt="+sramecc"
- sramattr=":sramecc+"
- xnackattr=":xnack+"
- else
- as_fn_error $? "Unrecognised assembler version" "$LINENO" 5
- fi
-
- # Test whether the LLVM assembler accepts -mattr=+xnack without any
- # diagnostic. LLVM 9 & 10 accept the option whether it makes sense or not,
- # LLVM 12+ throws a warning for GPUs without support.
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for assembler accepts -mattr=+xnack for fiji" >&5
-$as_echo_n "checking assembler for assembler accepts -mattr=+xnack for fiji... " >&6; }
-if ${gcc_cv_as_gcn_xnack_ecc_fiji+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- gcc_cv_as_gcn_xnack_ecc_fiji=no
- if test x$gcc_cv_as != x; then
- $as_echo '' > conftest.s
- if { ac_try='$gcc_cv_as $gcc_cv_as_flags -triple=amdgcn--amdhsa -mcpu=fiji -mattr=+xnack 2>conftest.err -o conftest.o conftest.s >&5'
- { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }
- then
- grep "." conftest.err >&5 \
- || gcc_cv_as_gcn_xnack_ecc_fiji=yes
- else
- echo "configure: failed program was" >&5
- cat conftest.s >&5
- fi
- rm -f conftest.o conftest.s
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_gcn_xnack_ecc_fiji" >&5
-$as_echo "$gcc_cv_as_gcn_xnack_ecc_fiji" >&6; }
-if test $gcc_cv_as_gcn_xnack_ecc_fiji = yes; then
-
-$as_echo "#define HAVE_GCN_XNACK_FIJI 1" >>confdefs.h
-
-fi
-
- rm -f conftest.err
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for assembler accepts -mattr=+xnack for gfx900" >&5
-$as_echo_n "checking assembler for assembler accepts -mattr=+xnack for gfx900... " >&6; }
-if ${gcc_cv_as_gcn_xnack_ecc_gfx900+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- gcc_cv_as_gcn_xnack_ecc_gfx900=no
- if test x$gcc_cv_as != x; then
- $as_echo '' > conftest.s
- if { ac_try='$gcc_cv_as $gcc_cv_as_flags -triple=amdgcn--amdhsa -mcpu=gfx900 -mattr=+xnack 2>conftest.err -o conftest.o conftest.s >&5'
- { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }
- then
- grep "." conftest.err >&5 \
- || gcc_cv_as_gcn_xnack_ecc_gfx900=yes
- else
- echo "configure: failed program was" >&5
- cat conftest.s >&5
- fi
- rm -f conftest.o conftest.s
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_gcn_xnack_ecc_gfx900" >&5
-$as_echo "$gcc_cv_as_gcn_xnack_ecc_gfx900" >&6; }
-if test $gcc_cv_as_gcn_xnack_ecc_gfx900 = yes; then
-
-$as_echo "#define HAVE_GCN_XNACK_GFX900 1" >>confdefs.h
-
-fi
-
- rm -f conftest.err
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for assembler accepts -mattr=+xnack for gfx906" >&5
-$as_echo_n "checking assembler for assembler accepts -mattr=+xnack for gfx906... " >&6; }
-if ${gcc_cv_as_gcn_xnack_ecc_gfx906+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- gcc_cv_as_gcn_xnack_ecc_gfx906=no
- if test x$gcc_cv_as != x; then
- $as_echo '' > conftest.s
- if { ac_try='$gcc_cv_as $gcc_cv_as_flags -triple=amdgcn--amdhsa -mcpu=gfx906 -mattr=+xnack 2>conftest.err -o conftest.o conftest.s >&5'
- { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }
- then
- grep "." conftest.err >&5 \
- || gcc_cv_as_gcn_xnack_ecc_gfx906=yes
- else
- echo "configure: failed program was" >&5
- cat conftest.s >&5
- fi
- rm -f conftest.o conftest.s
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_gcn_xnack_ecc_gfx906" >&5
-$as_echo "$gcc_cv_as_gcn_xnack_ecc_gfx906" >&6; }
-if test $gcc_cv_as_gcn_xnack_ecc_gfx906 = yes; then
-
-$as_echo "#define HAVE_GCN_XNACK_GFX906 1" >>confdefs.h
-
-fi
-
- rm -f conftest.err
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for assembler accepts -mattr=+xnack for gfx908" >&5
-$as_echo_n "checking assembler for assembler accepts -mattr=+xnack for gfx908... " >&6; }
-if ${gcc_cv_as_gcn_xnack_ecc_gfx908+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- gcc_cv_as_gcn_xnack_ecc_gfx908=no
- if test x$gcc_cv_as != x; then
- $as_echo '' > conftest.s
- if { ac_try='$gcc_cv_as $gcc_cv_as_flags -triple=amdgcn--amdhsa -mcpu=gfx908 -mattr=+xnack 2>conftest.err -o conftest.o conftest.s >&5'
- { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }
- then
- grep "." conftest.err >&5 \
- || gcc_cv_as_gcn_xnack_ecc_gfx908=yes
- else
- echo "configure: failed program was" >&5
- cat conftest.s >&5
- fi
- rm -f conftest.o conftest.s
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_gcn_xnack_ecc_gfx908" >&5
-$as_echo "$gcc_cv_as_gcn_xnack_ecc_gfx908" >&6; }
-if test $gcc_cv_as_gcn_xnack_ecc_gfx908 = yes; then
-
-$as_echo "#define HAVE_GCN_XNACK_GFX908 1" >>confdefs.h
-
-fi
-
- rm -f conftest.err
-
- # Test whether the LLVM assembler accepts -mattr=+sramecc without any
- # diagnostic. LLVM 9 & 10 accept the option whether it makes sense or not,
- # (some?) LLVM 12 rejects it for all GPUs, and LLVM13 throws a warning
- # for GPUs without support.
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for assembler accepts -mattr=$sramopt for fiji" >&5
-$as_echo_n "checking assembler for assembler accepts -mattr=$sramopt for fiji... " >&6; }
-if ${gcc_cv_as_gcn_sram_ecc_fiji+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- gcc_cv_as_gcn_sram_ecc_fiji=no
- if test x$gcc_cv_as != x; then
- $as_echo '' > conftest.s
- if { ac_try='$gcc_cv_as $gcc_cv_as_flags -triple=amdgcn--amdhsa -mcpu=fiji -mattr=$sramopt 2>conftest.err -o conftest.o conftest.s >&5'
- { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }
- then
- grep "." conftest.err >&5 \
- || gcc_cv_as_gcn_sram_ecc_fiji=yes
- else
- echo "configure: failed program was" >&5
- cat conftest.s >&5
- fi
- rm -f conftest.o conftest.s
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_gcn_sram_ecc_fiji" >&5
-$as_echo "$gcc_cv_as_gcn_sram_ecc_fiji" >&6; }
-if test $gcc_cv_as_gcn_sram_ecc_fiji = yes; then
-
-$as_echo "#define HAVE_GCN_SRAM_ECC_FIJI 1" >>confdefs.h
-
-fi
-
- rm -f conftest.err
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for assembler accepts -mattr=$sramopt for gfx900" >&5
-$as_echo_n "checking assembler for assembler accepts -mattr=$sramopt for gfx900... " >&6; }
-if ${gcc_cv_as_gcn_sram_ecc_gfx900+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- gcc_cv_as_gcn_sram_ecc_gfx900=no
- if test x$gcc_cv_as != x; then
- $as_echo '' > conftest.s
- if { ac_try='$gcc_cv_as $gcc_cv_as_flags -triple=amdgcn--amdhsa -mcpu=gfx900 -mattr=$sramopt 2>conftest.err -o conftest.o conftest.s >&5'
- { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }
- then
- grep "." conftest.err >&5 \
- || gcc_cv_as_gcn_sram_ecc_gfx900=yes
- else
- echo "configure: failed program was" >&5
- cat conftest.s >&5
- fi
- rm -f conftest.o conftest.s
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_gcn_sram_ecc_gfx900" >&5
-$as_echo "$gcc_cv_as_gcn_sram_ecc_gfx900" >&6; }
-if test $gcc_cv_as_gcn_sram_ecc_gfx900 = yes; then
-
-$as_echo "#define HAVE_GCN_SRAM_ECC_GFX900 1" >>confdefs.h
-
-fi
-
- rm -f conftest.err
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for assembler accepts -mattr=$sramopt for gfx906" >&5
-$as_echo_n "checking assembler for assembler accepts -mattr=$sramopt for gfx906... " >&6; }
-if ${gcc_cv_as_gcn_sram_ecc_gfx906+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- gcc_cv_as_gcn_sram_ecc_gfx906=no
- if test x$gcc_cv_as != x; then
- $as_echo '' > conftest.s
- if { ac_try='$gcc_cv_as $gcc_cv_as_flags -triple=amdgcn--amdhsa -mcpu=gfx906 -mattr=$sramopt 2>conftest.err -o conftest.o conftest.s >&5'
- { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }
- then
- grep "." conftest.err >&5 \
- || gcc_cv_as_gcn_sram_ecc_gfx906=yes
- else
- echo "configure: failed program was" >&5
- cat conftest.s >&5
- fi
- rm -f conftest.o conftest.s
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_gcn_sram_ecc_gfx906" >&5
-$as_echo "$gcc_cv_as_gcn_sram_ecc_gfx906" >&6; }
-if test $gcc_cv_as_gcn_sram_ecc_gfx906 = yes; then
-
-$as_echo "#define HAVE_GCN_SRAM_ECC_GFX906 1" >>confdefs.h
-
-fi
-
- rm -f conftest.err
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for assembler accepts -mattr=$sramopt for gfx908" >&5
-$as_echo_n "checking assembler for assembler accepts -mattr=$sramopt for gfx908... " >&6; }
-if ${gcc_cv_as_gcn_sram_ecc_gfx908+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- gcc_cv_as_gcn_sram_ecc_gfx908=no
- if test x$gcc_cv_as != x; then
- $as_echo '' > conftest.s
- if { ac_try='$gcc_cv_as $gcc_cv_as_flags -triple=amdgcn--amdhsa -mcpu=gfx908 -mattr=$sramopt 2>conftest.err -o conftest.o conftest.s >&5'
- { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }
- then
- grep "." conftest.err >&5 \
- || gcc_cv_as_gcn_sram_ecc_gfx908=yes
- else
- echo "configure: failed program was" >&5
- cat conftest.s >&5
+ gcc_cv_as_version=`$gcc_cv_as --version 2>&1 | sed -ne '/version/s/.* \([0-9]\)/\1/p' || echo error`
+ case "$gcc_cv_as_version" in
+ 13.0.[1-9]*) ;; # 13.0.1+
+ 13.[1-9]*) ;; # 13.1+
+ 1[4-9]*) ;; # 14..19
+ [2-9][0-9]*) ;; # 20..99
+ [1-9][0-9][0-9]*) ;; # 100+
+ error) as_fn_error $? "cannot determine LLVM version" "$LINENO" 5 ;;
+ *) as_fn_error $? "LLVM 13.0.1 or later is required (found LLVM $gcc_cv_as_version)" "$LINENO" 5 ;;
+ esac
fi
- rm -f conftest.o conftest.s
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_gcn_sram_ecc_gfx908" >&5
-$as_echo "$gcc_cv_as_gcn_sram_ecc_gfx908" >&6; }
-if test $gcc_cv_as_gcn_sram_ecc_gfx908 = yes; then
-
-$as_echo "#define HAVE_GCN_SRAM_ECC_GFX908 1" >>confdefs.h
-
-fi
-
- rm -f conftest.err
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_version, ok" >&5
+$as_echo "$gcc_cv_as_version, ok" >&6; }
;;
esac
diff --git a/gcc/configure.ac b/gcc/configure.ac
index df1c9cc3200..acc523c1cd3 100644
--- a/gcc/configure.ac
+++ b/gcc/configure.ac
@@ -5348,130 +5348,25 @@ case "$target" in
;;
esac
-# This tests if the assembler supports two registers for global_load functions
-# (like in LLVM versions <12) or one register (like in LLVM 12).
+# AMD GCN needs the LLVM assembler and linker.
+# Test that LLVM is at least 13.0.1.
case "$target" in
amdgcn-* | gcn-*)
- AC_MSG_CHECKING(assembler fix for global_load functions)
- gcc_cv_as_gcn_global_load_fixed=yes
+ AC_MSG_CHECKING(llvm assembler version)
+ gcc_cv_as_version="unknown"
if test x$gcc_cv_as != x; then
- cat > conftest.s <<EOF
- global_store_dwordx2 v[[1:2]], v[[4:5]], s[[14:15]]
-EOF
- if $gcc_cv_as -triple=amdgcn--amdhsa -filetype=obj -mcpu=gfx900 -o conftest.o conftest.s > /dev/null 2>&1; then
- gcc_cv_as_gcn_global_load_fixed=no
- fi
- rm -f conftest.s conftest.o conftest
- fi
- global_load_fixed=`if test x$gcc_cv_as_gcn_global_load_fixed = xyes; then echo 1; else echo 0; fi`
- AC_DEFINE_UNQUOTED(HAVE_GCN_ASM_GLOBAL_LOAD_FIXED, $global_load_fixed,
- [Define if your assembler has fixed global_load functions.])
- AC_MSG_RESULT($gcc_cv_as_gcn_global_load_fixed)
- ;;
-esac
-
-case "$target" in
- amdgcn-* | gcn-*)
- # Test the LLVM assembler syntax dialect; they have made a number of
- # changes between LLVM 12 & 13 without any backward compatibility.
- gcc_GAS_CHECK_FEATURE([assembler amdgcn_target v2/3 syntax],
- gcc_cv_as_gcn_asm_v3_syntax,,
- [-triple=amdgcn--amdhsa -mcpu=gfx906 -mattr=+xnack],
- [.amdgcn_target "amdgcn-unknown-amdhsa--gfx906+xnack"],,
- [AC_DEFINE(HAVE_GCN_ASM_V3_SYNTAX, 1,
- [Define if your assembler expects amdgcn_target gfx908+xnack syntax.])])
- gcc_GAS_CHECK_FEATURE([assembler amdgcn_target v4 syntax],
- gcc_cv_as_gcn_asm_v4_syntax,,
- [-triple=amdgcn--amdhsa -mcpu=gfx908 -mattr=+xnack],
- [.amdgcn_target "amdgcn-unknown-amdhsa--gfx908:xnack+"],,
- [AC_DEFINE(HAVE_GCN_ASM_V4_SYNTAX, 1,
- [Define if your assembler expects amdgcn_target gfx908:xnack+ syntax.])])
-
- # Some attribute names changed in the move to v4 ...
- if test $gcc_cv_as_gcn_asm_v3_syntax = yes; then
- sramopt="+sram-ecc"
- sramattr="+sram-ecc"
- xnackattr="+xnack"
- elif test $gcc_cv_as_gcn_asm_v4_syntax = yes; then
- sramopt="+sramecc"
- sramattr=":sramecc+"
- xnackattr=":xnack+"
- else
- AC_MSG_ERROR([Unrecognised assembler version])
+ gcc_cv_as_version=`$gcc_cv_as --version 2>&1 | sed -ne '/version/s/.* \([[0-9]]\)/\1/p' || echo error`
+ case "$gcc_cv_as_version" in
+ 13.0.[[1-9]]*) ;; # 13.0.1+
+ 13.[[1-9]]*) ;; # 13.1+
+ 1[[4-9]]*) ;; # 14..19
+ [[2-9]][[0-9]]*) ;; # 20..99
+ [[1-9]][[0-9]][[0-9]]*) ;; # 100+
+ error) AC_MSG_ERROR([cannot determine LLVM version]) ;;
+ *) AC_MSG_ERROR([LLVM 13.0.1 or later is required (found LLVM $gcc_cv_as_version)]) ;;
+ esac
fi
-
- # Test whether the LLVM assembler accepts -mattr=+xnack without any
- # diagnostic. LLVM 9 & 10 accept the option whether it makes sense or not,
- # LLVM 12+ throws a warning for GPUs without support.
- gcc_GAS_CHECK_FEATURE([assembler accepts -mattr=+xnack for fiji],
- gcc_cv_as_gcn_xnack_ecc_fiji,,
- [-triple=amdgcn--amdhsa -mcpu=fiji -mattr=+xnack 2>conftest.err], [],
- [grep "." conftest.err >&AS_MESSAGE_LOG_FD \
- || gcc_cv_as_gcn_xnack_ecc_fiji=yes],
- [AC_DEFINE(HAVE_GCN_XNACK_FIJI, 1,
- [Define if your assembler allows -mattr=+xnack for fiji.])])
- rm -f conftest.err
- gcc_GAS_CHECK_FEATURE([assembler accepts -mattr=+xnack for gfx900],
- gcc_cv_as_gcn_xnack_ecc_gfx900,,
- [-triple=amdgcn--amdhsa -mcpu=gfx900 -mattr=+xnack 2>conftest.err], [],
- [grep "." conftest.err >&AS_MESSAGE_LOG_FD \
- || gcc_cv_as_gcn_xnack_ecc_gfx900=yes],
- [AC_DEFINE(HAVE_GCN_XNACK_GFX900, 1,
- [Define if your assembler allows -mattr=+xnack for gfx900.])])
- rm -f conftest.err
- gcc_GAS_CHECK_FEATURE([assembler accepts -mattr=+xnack for gfx906],
- gcc_cv_as_gcn_xnack_ecc_gfx906,,
- [-triple=amdgcn--amdhsa -mcpu=gfx906 -mattr=+xnack 2>conftest.err], [],
- [grep "." conftest.err >&AS_MESSAGE_LOG_FD \
- || gcc_cv_as_gcn_xnack_ecc_gfx906=yes],
- [AC_DEFINE(HAVE_GCN_XNACK_GFX906, 1,
- [Define if your assembler allows -mattr=+xnack for gfx906.])])
- rm -f conftest.err
- gcc_GAS_CHECK_FEATURE([assembler accepts -mattr=+xnack for gfx908],
- gcc_cv_as_gcn_xnack_ecc_gfx908,,
- [-triple=amdgcn--amdhsa -mcpu=gfx908 -mattr=+xnack 2>conftest.err], [],
- [grep "." conftest.err >&AS_MESSAGE_LOG_FD \
- || gcc_cv_as_gcn_xnack_ecc_gfx908=yes],
- [AC_DEFINE(HAVE_GCN_XNACK_GFX908, 1,
- [Define if your assembler allows -mattr=+xnack for gfx908.])])
- rm -f conftest.err
-
- # Test whether the LLVM assembler accepts -mattr=+sramecc without any
- # diagnostic. LLVM 9 & 10 accept the option whether it makes sense or not,
- # (some?) LLVM 12 rejects it for all GPUs, and LLVM13 throws a warning
- # for GPUs without support.
- gcc_GAS_CHECK_FEATURE([assembler accepts -mattr=$sramopt for fiji],
- gcc_cv_as_gcn_sram_ecc_fiji,,
- [-triple=amdgcn--amdhsa -mcpu=fiji -mattr=$sramopt 2>conftest.err], [],
- [grep "." conftest.err >&AS_MESSAGE_LOG_FD \
- || gcc_cv_as_gcn_sram_ecc_fiji=yes],
- [AC_DEFINE(HAVE_GCN_SRAM_ECC_FIJI, 1,
- [Define if your assembler allows -mattr=+sramecc for fiji.])])
- rm -f conftest.err
- gcc_GAS_CHECK_FEATURE([assembler accepts -mattr=$sramopt for gfx900],
- gcc_cv_as_gcn_sram_ecc_gfx900,,
- [-triple=amdgcn--amdhsa -mcpu=gfx900 -mattr=$sramopt 2>conftest.err], [],
- [grep "." conftest.err >&AS_MESSAGE_LOG_FD \
- || gcc_cv_as_gcn_sram_ecc_gfx900=yes],
- [AC_DEFINE(HAVE_GCN_SRAM_ECC_GFX900, 1,
- [Define if your assembler allows -mattr=+sramecc for gfx900.])])
- rm -f conftest.err
- gcc_GAS_CHECK_FEATURE([assembler accepts -mattr=$sramopt for gfx906],
- gcc_cv_as_gcn_sram_ecc_gfx906,,
- [-triple=amdgcn--amdhsa -mcpu=gfx906 -mattr=$sramopt 2>conftest.err], [],
- [grep "." conftest.err >&AS_MESSAGE_LOG_FD \
- || gcc_cv_as_gcn_sram_ecc_gfx906=yes],
- [AC_DEFINE(HAVE_GCN_SRAM_ECC_GFX906, 1,
- [Define if your assembler allows -mattr=+sramecc for gfx906.])])
- rm -f conftest.err
- gcc_GAS_CHECK_FEATURE([assembler accepts -mattr=$sramopt for gfx908],
- gcc_cv_as_gcn_sram_ecc_gfx908,,
- [-triple=amdgcn--amdhsa -mcpu=gfx908 -mattr=$sramopt 2>conftest.err], [],
- [grep "." conftest.err >&AS_MESSAGE_LOG_FD \
- || gcc_cv_as_gcn_sram_ecc_gfx908=yes],
- [AC_DEFINE(HAVE_GCN_SRAM_ECC_GFX908, 1,
- [Define if your assembler allows -mattr=+sramecc for gfx908.])])
- rm -f conftest.err
+ AC_MSG_RESULT([$gcc_cv_as_version, ok])
;;
esac