aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@arm.com>2024-11-11 12:32:16 +0000
committerRichard Sandiford <richard.sandiford@arm.com>2024-11-11 12:32:16 +0000
commitbd45d4f9955022e688e75756b0cd8b8e54b33d4b (patch)
treeb3ec1ad5896829187f2bffea33031caa8b56d293 /gcc
parent67ba352ce13f13b9a8f4296a850b491adf025d59 (diff)
downloadgcc-bd45d4f9955022e688e75756b0cd8b8e54b33d4b.zip
gcc-bd45d4f9955022e688e75756b0cd8b8e54b33d4b.tar.gz
gcc-bd45d4f9955022e688e75756b0cd8b8e54b33d4b.tar.bz2
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.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/aarch64/aarch64-sve-builtins-shapes.cc8
1 files changed, 7 insertions, 1 deletions
diff --git a/gcc/config/aarch64/aarch64-sve-builtins-shapes.cc b/gcc/config/aarch64/aarch64-sve-builtins-shapes.cc
index f190770..e1204c2 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