From 29e4e4bdb674118b898d50ce7751c183aa0a44ee Mon Sep 17 00:00:00 2001 From: Tamar Christina Date: Fri, 26 Jul 2024 13:02:53 +0100 Subject: middle-end: check for vector mode before calling get_mask_mode [PR116074] For historical reasons AArch64 has TI mode vector types but does not consider TImode a vector mode. What's happening in the PR is that get_vectype_for_scalar_type is returning vector(1) TImode for a TImode scalar. This then fails when we call targetm.vectorize.get_mask_mode (vecmode).exists (&) on the TYPE_MODE. This checks for vector mode before using the results of get_vectype_for_scalar_type. gcc/ChangeLog: PR target/116074 * tree-vect-patterns.cc (vect_recog_cond_store_pattern): Check vector mode. gcc/testsuite/ChangeLog: PR target/116074 * g++.target/aarch64/pr116074.C: New test. --- gcc/tree-vect-patterns.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'gcc/tree-vect-patterns.cc') diff --git a/gcc/tree-vect-patterns.cc b/gcc/tree-vect-patterns.cc index b0821c7..5fbd1a4 100644 --- a/gcc/tree-vect-patterns.cc +++ b/gcc/tree-vect-patterns.cc @@ -6624,7 +6624,8 @@ vect_recog_cond_store_pattern (vec_info *vinfo, machine_mode mask_mode; machine_mode vecmode = TYPE_MODE (vectype); - if (targetm.vectorize.conditional_operation_is_expensive (IFN_MASK_STORE) + if (!VECTOR_MODE_P (vecmode) + || targetm.vectorize.conditional_operation_is_expensive (IFN_MASK_STORE) || !targetm.vectorize.get_mask_mode (vecmode).exists (&mask_mode) || !can_vec_mask_load_store_p (vecmode, mask_mode, false)) return NULL; -- cgit v1.1