aboutsummaryrefslogtreecommitdiff
path: root/gcc/configure.ac
diff options
context:
space:
mode:
authorAndrew Stubbs <ams@codesourcery.com>2021-09-24 11:37:37 +0100
committerAndrew Stubbs <ams@codesourcery.com>2021-10-07 11:26:44 +0100
commit6ca03ca35a58ebf9792aa8a08adf00b6fd3e0015 (patch)
treeb22b3e23c2343a1b3e165b4faee5b38d9c3f5a0b /gcc/configure.ac
parent6496ae5c9651206c9de43f63018a549a2ef2244e (diff)
downloadgcc-6ca03ca35a58ebf9792aa8a08adf00b6fd3e0015.zip
gcc-6ca03ca35a58ebf9792aa8a08adf00b6fd3e0015.tar.gz
gcc-6ca03ca35a58ebf9792aa8a08adf00b6fd3e0015.tar.bz2
amdgcn: Support LLVM 13 assembler syntax
The LLVM devs have changed the assembler architecture attribute names on both CLI and in the ".amdgcn_target" directive, and changed the attribute syntax inside the directive, without keeping any backwards compatibility. :-( This patch improves our configure tests to detect what dialect to use, what attributes are valid, and adjusts the specs to match. gcc/ChangeLog: * config.in: Regenerate. * config/gcn/gcn-hsa.h (X_FIJI): New macro. (X_900): New macro. (X_906): New macro. (X_908): New macro. (A_FIJI): Rename to ... (S_FIJI): ... this. (A_900): Rename to ... (S_900): ... this. (A_906): Rename to ... (S_906): ... this. (A_908): Rename to ... (S_908): ... this. (SRAMOPT): New macro. (ASM_SPEC): Adjust xnack option usage. * config/gcn/gcn.c (output_file_start): Adjust amdgcn_target usage. * configure: Regenerate. * configure.ac: Detect LLVM assembler dialect.
Diffstat (limited to 'gcc/configure.ac')
-rw-r--r--gcc/configure.ac108
1 files changed, 92 insertions, 16 deletions
diff --git a/gcc/configure.ac b/gcc/configure.ac
index b49cb22..344b2f5 100644
--- a/gcc/configure.ac
+++ b/gcc/configure.ac
@@ -5332,30 +5332,106 @@ esac
case "$target" in
amdgcn-* | gcn-*)
- gcc_GAS_CHECK_FEATURE([assembler accepts -mattr=+sram-ecc for fiji],
+ # 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])
+ 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=-xnack -mattr=+sram-ecc],
- [.amdgcn_target "amdgcn-unknown-amdhsa--gfx803+sram-ecc"],,
+ [-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=+sram-ecc for fiji.])])
- gcc_GAS_CHECK_FEATURE([assembler accepts -mattr=+sram-ecc for gfx900],
+ [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=-xnack -mattr=+sram-ecc],
- [.amdgcn_target "amdgcn-unknown-amdhsa--gfx900+sram-ecc"],,
+ [-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=+sram-ecc for gfx900.])])
- gcc_GAS_CHECK_FEATURE([assembler accepts -mattr=+sram-ecc for gfx906],
+ [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=-xnack -mattr=+sram-ecc],
- [.amdgcn_target "amdgcn-unknown-amdhsa--gfx906+sram-ecc"],,
+ [-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=+sram-ecc for gfx906.])])
- gcc_GAS_CHECK_FEATURE([assembler accepts -mattr=+sram-ecc for gfx908],
+ [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=-xnack -mattr=+sram-ecc],
- [.amdgcn_target "amdgcn-unknown-amdhsa--gfx908+sram-ecc"],,
+ [-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=+sram-ecc for gfx908.])])
+ [Define if your assembler allows -mattr=+sramecc for gfx908.])])
+ rm -f conftest.err
;;
arm*)
gcc_GAS_CHECK_FEATURE([assembler for arm accepts context-specific architecture extensions],