aarch64: Fix up printing of ldp/stp with -msve-vector-bits=128

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.
This commit is contained in:
Alex Coplan 2023-11-07 21:25:02 +00:00
parent 94415eb7a4
commit b73a685ebf

View 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;