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.
--- /dev/null
+/* { 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;
+}
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;