]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gcc/configure.ac: fix register issue for global_load assembler functions
authorMarcel Vollweiler <marcel@codesourcery.com>
Fri, 18 Jun 2021 11:50:36 +0000 (04:50 -0700)
committerTobias Burnus <tobias@codesourcery.com>
Mon, 18 Oct 2021 06:10:43 +0000 (08:10 +0200)
gcc/ChangeLog:

* config.in: Regenerate.
* config/gcn/gcn.c (print_operand_address): Fix for global_load assembler
functions.
* configure: Regenerate.
* configure.ac: Fix for global_load assembler functions.

(cherry picked from commit cfa1f8226f275447015e2cb3fb0d876133e6509b)

gcc/config.in
gcc/config/gcn/gcn.c
gcc/configure
gcc/configure.ac

index 4d5da7dab3a818c884260d7edc15b5876379b38d..69248fdcfaa1e3f8c4eb948bdbf5f7faa04374b6 100644 (file)
 #endif
 
 
+/* Define if your assembler has fixed global_load functions. */
+#ifndef USED_FOR_TARGET
+#undef HAVE_GCN_ASM_GLOBAL_LOAD_FIXED
+#endif
+
+
 /* Define to 1 if you have the `getchar_unlocked' function. */
 #ifndef USED_FOR_TARGET
 #undef HAVE_GETCHAR_UNLOCKED
index 9660ca6eaa4104faecc420ac9f236609c45b82f4..3453cb70d3c9384f352177240088da1497da6d17 100644 (file)
@@ -5481,13 +5481,22 @@ 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.  */
-               fprintf (file, "v[1:2]");
+               {
+                 if (HAVE_GCN_ASM_GLOBAL_LOAD_FIXED)
+                   fprintf (file, "v1");
+                 else
+                   fprintf (file, "v[1:2]");
+               }
              else if (REG_P (vgpr_offset)
                       && VGPR_REGNO_P (REGNO (vgpr_offset)))
                {
-                 fprintf (file, "v[%d:%d]",
-                          REGNO (vgpr_offset) - FIRST_VGPR_REG,
-                          REGNO (vgpr_offset) - FIRST_VGPR_REG + 1);
+                 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);
                }
              else
                output_operand_lossage ("bad ADDR_SPACE_GLOBAL address");
index e84ec2e4a622848767f02d9f9f6cee7c020e8867..b1ae767629ba816a822fac4a322dcb245e7dc874 100755 (executable)
@@ -28891,6 +28891,33 @@ 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).
+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
+    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
+
 # ??? 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,
index bd37d47f4a1d04f82c6ee8771a8c484b0d431654..428f136d3ba71bf80e50bfd0151e54b887a46ed8 100644 (file)
@@ -5348,6 +5348,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).
+case "$target" in
+  amdgcn-* | gcn-*)
+    AC_MSG_CHECKING(assembler fix for global_load functions)
+    gcc_cv_as_gcn_global_load_fixed=yes
+    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
+
 # ??? 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,