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;

Reply via email to