Vector alignment hints are fully supported since z14.  On z13 alignment
hints have no effect, however, instructions with alignment hints are
still legal.  Thus, emit alignment hints also for z13 targets so that if
the binary is actually run on a z14 or later it benefits from such
hints.

Note, this requires gas including commit f687f5f563 of the binutils
repository.

gcc/ChangeLog:

        * config/s390/s390.c (print_operand): Emit vector alignment
        hints for z13.

gcc/testsuite/ChangeLog:

        * gcc.target/s390/vector/align-1.c: Change target architecture
        to z13.
        * gcc.target/s390/vector/align-2.c: Change target architecture
        to z13.
---
 gcc/config/s390/s390.c                         | 7 ++++++-
 gcc/testsuite/gcc.target/s390/vector/align-1.c | 2 +-
 gcc/testsuite/gcc.target/s390/vector/align-2.c | 2 +-
 3 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c
index 4de3129f88e..b5fd5a2f3ed 100644
--- a/gcc/config/s390/s390.c
+++ b/gcc/config/s390/s390.c
@@ -7854,7 +7854,12 @@ print_operand (FILE *file, rtx x, int code)
     {
     case 'A':
 #ifdef HAVE_AS_VECTOR_LOADSTORE_ALIGNMENT_HINTS
-      if (TARGET_Z14 && MEM_P (x))
+      /* Vector alignment hints are fully supported since z14.  On z13
+        alignment hints have no effect, however, instructions with alignment
+        hints are still legal.  Thus, emit alignment hints also for z13
+        targets so that if the binary is actually run on a z14 or later it
+        benefits from such hints.  */
+      if (TARGET_Z13 && MEM_P (x))
        {
          if (MEM_ALIGN (x) >= 128)
            fprintf (file, ",4");
diff --git a/gcc/testsuite/gcc.target/s390/vector/align-1.c 
b/gcc/testsuite/gcc.target/s390/vector/align-1.c
index cc7777ad22a..6997af2ddcd 100644
--- a/gcc/testsuite/gcc.target/s390/vector/align-1.c
+++ b/gcc/testsuite/gcc.target/s390/vector/align-1.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O3 -mzarch -march=z14" } */
+/* { dg-options "-O3 -mzarch -march=z13" } */
 
 /* The user alignment ends up in DECL_ALIGN of the VAR_DECL and is
    currently ignored if it is smaller than the alignment of the type.
diff --git a/gcc/testsuite/gcc.target/s390/vector/align-2.c 
b/gcc/testsuite/gcc.target/s390/vector/align-2.c
index e4e2fba6a58..00e09d3eadb 100644
--- a/gcc/testsuite/gcc.target/s390/vector/align-2.c
+++ b/gcc/testsuite/gcc.target/s390/vector/align-2.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O3 -mzarch -march=z14" } */
+/* { dg-options "-O3 -mzarch -march=z13" } */
 
 /* The user alignment ends up in TYPE_ALIGN of the type of the
    VAR_DECL.  */
-- 
2.25.3

Reply via email to