https://gcc.gnu.org/g:aa4c55b13049cbd282cc0e043cc3e45423fdd6de
commit r15-4248-gaa4c55b13049cbd282cc0e043cc3e45423fdd6de Author: Richard Biener <rguent...@suse.de> Date: Thu Oct 10 11:02:47 2024 +0200 tree-optimization/117050 - fix ICE with non-grouped .MASK_LOAD SLP The following temporarily reverts the support of permuted .MASK_LOAD for the case of non-grouped accesses. PR tree-optimization/117050 * tree-vect-slp.cc (vect_build_slp_tree_2): Do not support permutes of non-grouped .MASK_LOAD. * gcc.dg/vect/pr117050.c: New testcase. Diff: --- gcc/testsuite/gcc.dg/vect/pr117050.c | 18 ++++++++++++++++++ gcc/tree-vect-slp.cc | 3 ++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/gcc/testsuite/gcc.dg/vect/pr117050.c b/gcc/testsuite/gcc.dg/vect/pr117050.c new file mode 100644 index 000000000000..7b12cbc9ef43 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr117050.c @@ -0,0 +1,18 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-mavx2" { target { x86_64-*-* i?86-*-* } } } */ + +typedef struct { + char *data; +} song_sample_t; +typedef struct { + int right_ramp; + int left_ramp; +} song_voice_t; +song_sample_t *csf_stop_sample_smp, *csf_stop_sample_v_3; +song_voice_t *csf_stop_sample_v; +void csf_stop_sample() +{ + for (int i; i; i++, csf_stop_sample_v++) + if (csf_stop_sample_v_3 || csf_stop_sample_smp->data) + csf_stop_sample_v->left_ramp = csf_stop_sample_v->right_ramp = 0; +} diff --git a/gcc/tree-vect-slp.cc b/gcc/tree-vect-slp.cc index 3024b87a1f83..914b0b61b4d5 100644 --- a/gcc/tree-vect-slp.cc +++ b/gcc/tree-vect-slp.cc @@ -2031,7 +2031,8 @@ vect_build_slp_tree_2 (vec_info *vinfo, slp_tree node, loads with gaps. */ if ((STMT_VINFO_GROUPED_ACCESS (stmt_info) && (DR_GROUP_GAP (first_stmt_info) != 0 || has_gaps)) - || STMT_VINFO_STRIDED_P (stmt_info)) + || STMT_VINFO_STRIDED_P (stmt_info) + || (!STMT_VINFO_GROUPED_ACCESS (stmt_info) && any_permute)) { load_permutation.release (); matches[0] = false;