]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
aarch64: Fix up printing of ldp/stp with -msve-vector-bits=128
authorAlex Coplan <alex.coplan@arm.com>
Tue, 7 Nov 2023 21:25:02 +0000 (21:25 +0000)
committerAlex Coplan <alex.coplan@arm.com>
Fri, 15 Dec 2023 19:59:59 +0000 (19:59 +0000)
Later patches allow using SVE modes in ldp/stp with -msve-vector-bits=128,
so we need to make sure that we don't use SVE addressing modes when
printing the address for the ldp/stp.

This patch does that.

gcc/ChangeLog:

* config/aarch64/aarch64.cc (aarch64_print_address_internal): Handle SVE
modes when printing ldp/stp addresses.

gcc/config/aarch64/aarch64.cc

index 6d973b3901c77d23c58afb9438e33ed4cf845a99..b8eb8d62952757a64b9fd963e9e6b8a69a10d6d9 100644 (file)
@@ -12345,6 +12345,9 @@ aarch64_print_address_internal (FILE *f, machine_mode mode, rtx x,
       return false;
     }
 
+  const bool load_store_pair_p = (type == ADDR_QUERY_LDP_STP
+                                 || type == ADDR_QUERY_LDP_STP_N);
+
   if (aarch64_classify_address (&addr, x, mode, true, type))
     switch (addr.type)
       {
@@ -12356,7 +12359,7 @@ aarch64_print_address_internal (FILE *f, machine_mode mode, rtx x,
          }
 
        vec_flags = aarch64_classify_vector_mode (mode);
-       if (vec_flags & VEC_ANY_SVE)
+       if ((vec_flags & VEC_ANY_SVE) && !load_store_pair_p)
          {
            HOST_WIDE_INT vnum
              = exact_div (addr.const_offset,
@@ -12366,6 +12369,9 @@ aarch64_print_address_internal (FILE *f, machine_mode mode, rtx x,
            return true;
          }
 
+       if (!CONST_INT_P (addr.offset))
+         return false;
+
        asm_fprintf (f, "[%s, %wd]", reg_names[REGNO (addr.base)],
                     INTVAL (addr.offset));
        return true;