https://gcc.gnu.org/g:bd45d4f9955022e688e75756b0cd8b8e54b33d4b
commit r15-5090-gbd45d4f9955022e688e75756b0cd8b8e54b33d4b Author: Richard Sandiford <richard.sandif...@arm.com> Date: Mon Nov 11 12:32:16 2024 +0000 aarch64: Add an abstraction for scatter store type inference Until now, all data arguments to a scatter store needed to have 32-bit or 64-bit elements. This isn't true for the upcoming SVE2.1 svst1q scatter intrinsic, so this patch adds an abstraction around the restriction. gcc/ * config/aarch64/aarch64-sve-builtins-shapes.cc (store_scatter_base::infer_vector_type): New virtual member function. (store_scatter_base::resolve): Use it. Diff: --- gcc/config/aarch64/aarch64-sve-builtins-shapes.cc | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/gcc/config/aarch64/aarch64-sve-builtins-shapes.cc b/gcc/config/aarch64/aarch64-sve-builtins-shapes.cc index f190770250fe..e1204c283b6d 100644 --- a/gcc/config/aarch64/aarch64-sve-builtins-shapes.cc +++ b/gcc/config/aarch64/aarch64-sve-builtins-shapes.cc @@ -994,12 +994,18 @@ struct store_scatter_base : public overloaded_base<0> mode_suffix_index mode; type_suffix_index type; if (!r.check_gp_argument (has_displacement_p ? 3 : 2, i, nargs) - || (type = r.infer_sd_vector_type (nargs - 1)) == NUM_TYPE_SUFFIXES + || (type = infer_vector_type (r, nargs - 1)) == NUM_TYPE_SUFFIXES || (mode = r.resolve_gather_address (i, type, false)) == MODE_none) return error_mark_node; return r.resolve_to (mode, type); } + + virtual type_suffix_index + infer_vector_type (function_resolver &r, unsigned int argno) const + { + return r.infer_sd_vector_type (argno); + } }; /* Base class for ternary operations in which the final argument is an