aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2024-10-10 11:02:47 +0200
committerRichard Biener <rguenth@gcc.gnu.org>2024-10-11 09:14:22 +0200
commitaa4c55b13049cbd282cc0e043cc3e45423fdd6de (patch)
tree266e0346837e14faf00b573c54e68b8bcdee4437 /gcc
parentcb0988a659cef6324887018b9066c5f81b558832 (diff)
downloadgcc-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.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr117050.c18
-rw-r--r--gcc/tree-vect-slp.cc3
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;