diff options
author | Andrew Stubbs <ams@codesourcery.com> | 2021-09-24 11:37:37 +0100 |
---|---|---|
committer | Andrew Stubbs <ams@codesourcery.com> | 2021-10-07 11:26:44 +0100 |
commit | 6ca03ca35a58ebf9792aa8a08adf00b6fd3e0015 (patch) | |
tree | b22b3e23c2343a1b3e165b4faee5b38d9c3f5a0b /gcc/configure.ac | |
parent | 6496ae5c9651206c9de43f63018a549a2ef2244e (diff) | |
download | gcc-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.ac | 108 |
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], |