From aa4c55b13049cbd282cc0e043cc3e45423fdd6de Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Thu, 10 Oct 2024 11:02:47 +0200 Subject: [PATCH] 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. --- gcc/testsuite/gcc.dg/vect/pr117050.c | 18 ++++++++++++++++++ gcc/tree-vect-slp.cc | 3 ++- 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/vect/pr117050.c diff --git a/gcc/testsuite/gcc.dg/vect/pr117050.c b/gcc/testsuite/gcc.dg/vect/pr117050.c new file mode 100644 index 00000000000..7b12cbc9ef4 --- /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 3024b87a1f8..914b0b61b4d 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; -- 2.11.4.GIT