diff options
author | Richard Biener <rguenther@suse.de> | 2024-10-10 11:02:47 +0200 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2024-10-11 09:14:22 +0200 |
commit | aa4c55b13049cbd282cc0e043cc3e45423fdd6de (patch) | |
tree | 266e0346837e14faf00b573c54e68b8bcdee4437 | |
parent | cb0988a659cef6324887018b9066c5f81b558832 (diff) | |
download | gcc-aa4c55b13049cbd282cc0e043cc3e45423fdd6de.zip gcc-aa4c55b13049cbd282cc0e043cc3e45423fdd6de.tar.gz gcc-aa4c55b13049cbd282cc0e043cc3e45423fdd6de.tar.bz2 |
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.
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/pr117050.c | 18 | ||||
-rw-r--r-- | gcc/tree-vect-slp.cc | 3 |
2 files changed, 20 insertions, 1 deletions
diff --git a/gcc/testsuite/gcc.dg/vect/pr117050.c b/gcc/testsuite/gcc.dg/vect/pr117050.c new file mode 100644 index 0000000..7b12cbc --- /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 3024b87..914b0b6 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; |