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.
This commit is contained in:
Andrew Stubbs 2022-02-15 15:33:53 +00:00
parent 2c5c645663
commit 8086230e7a
7 changed files with 74 additions and 822 deletions

View File

@ -1331,13 +1331,6 @@
#endif
/* Define if your Arm assembler permits context-specific feature extensions.
*/
#ifndef USED_FOR_TARGET
#undef HAVE_GAS_ARM_EXTENDED_ARCH
#endif
/* Define if your assembler supports .balign and .p2align. */
#ifndef USED_FOR_TARGET
#undef HAVE_GAS_BALIGN_AND_P2ALIGN
@ -1457,72 +1450,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
@ -2208,6 +2135,12 @@
#endif
/* Define which stat syscall is able to handle 64bit indodes. */
#ifndef USED_FOR_TARGET
#undef HOST_STAT_FOR_64BIT_INODES
#endif
/* Define as const if the declaration of iconv() needs const. */
#ifndef USED_FOR_TARGET
#undef ICONV_CONST

View File

@ -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
#define NO_XNACK "!march=*:;march=fiji:;"
#define NO_SRAM_ECC "!march=*:;march=fiji:;march=gfx900:;march=gfx906:;"
/* 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
#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"

View File

@ -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 ();

View File

@ -5216,49 +5216,6 @@ gcn_shared_mem_layout (unsigned HOST_WIDE_INT *lo,
static void
output_file_start (void)
{
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;
break;
case PROCESSOR_VEGA10:
cpu = "gfx900";
#ifndef HAVE_GCN_XNACK_GFX900
use_xnack_attr = false;
#endif
use_sram_attr = false;
break;
case PROCESSOR_VEGA20:
cpu = "gfx906";
#ifndef HAVE_GCN_XNACK_GFX906
use_xnack_attr = false;
#endif
use_sram_attr = false;
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. */
@ -5266,21 +5223,31 @@ output_file_start (void)
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 = "";
const char *cpu;
switch (gcn_arch)
{
case PROCESSOR_FIJI:
cpu = "gfx803";
xnack = "";
sram_ecc = "";
break;
case PROCESSOR_VEGA10:
cpu = "gfx900";
sram_ecc = "";
break;
case PROCESSOR_VEGA20:
cpu = "gfx906";
sram_ecc = "";
break;
case PROCESSOR_GFX908:
cpu = "gfx908";
break;
default: gcc_unreachable ();
}
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.
@ -5724,23 +5691,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");
}

View File

@ -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)
{

427
gcc/configure vendored
View File

@ -29015,423 +29015,30 @@ 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
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
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; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_version, ok" >&5
$as_echo "$gcc_cv_as_version, ok" >&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
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
;;
arm*)
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for assembler for arm accepts context-specific architecture extensions" >&5
$as_echo_n "checking assembler for assembler for arm accepts context-specific architecture extensions... " >&6; }
if ${gcc_cv_as_arm_option_extensions+:} false; then :
$as_echo_n "(cached) " >&6
else
gcc_cv_as_arm_option_extensions=no
if test x$gcc_cv_as != x; then
$as_echo '.text
.thumb
.syntax unified
vmov.f32 s0, s1' > conftest.s
if { ac_try='$gcc_cv_as $gcc_cv_as_flags -march=armv8.1-m.main+mve -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_arm_option_extensions=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_arm_option_extensions" >&5
$as_echo "$gcc_cv_as_arm_option_extensions" >&6; }
if test $gcc_cv_as_arm_option_extensions = yes; then
$as_echo "#define HAVE_GAS_ARM_EXTENDED_ARCH 1" >>confdefs.h
fi
esac
# ??? Not all targets support dwarf2 debug_line, even within a version
# of gas. Moreover, we need to emit a valid instruction to trigger any
# info to the output file. So, as supported targets are added to gas 2.11,

View File

@ -5375,143 +5375,28 @@ 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
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
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)
AC_MSG_RESULT([$gcc_cv_as_version, ok])
;;
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])
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
;;
arm*)
gcc_GAS_CHECK_FEATURE([assembler for arm accepts context-specific architecture extensions],
gcc_cv_as_arm_option_extensions,
[-march=armv8.1-m.main+mve],
[.text
.thumb
.syntax unified
vmov.f32 s0, s1],,
[AC_DEFINE(HAVE_GAS_ARM_EXTENDED_ARCH, 1,
[Define if your Arm assembler permits context-specific feature extensions.])])
esac
# ??? Not all targets support dwarf2 debug_line, even within a version
# of gas. Moreover, we need to emit a valid instruction to trigger any
# info to the output file. So, as supported targets are added to gas 2.11,