https://gcc.gnu.org/g:05284f73cff1685e2513b415e8da644193acf8cd

commit r16-3282-g05284f73cff1685e2513b415e8da644193acf8cd
Author: Richard Biener <rguent...@suse.de>
Date:   Tue Aug 19 12:31:53 2025 +0200

    tree-optimization/121592 - failed reduction SLP discovery
    
    The testcase in the PR shows that when we have a reduction chain
    with a wrapped conversion we fail to properly fall back to a
    regular reduction, resulting in wrong-code.  The following fixes
    this by failing discovery.  The testcase has other issues, so
    I'm not including it here.
    
            PR tree-optimization/121592
            * tree-vect-slp.cc (vect_analyze_slp): When SLP reduction chain
            discovery fails, fail overall when the tail of the chain
            isn't also the entry for the non-SLP reduction.

Diff:
---
 gcc/tree-vect-slp.cc | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/gcc/tree-vect-slp.cc b/gcc/tree-vect-slp.cc
index 05363f89cf46..d5adb8baf876 100644
--- a/gcc/tree-vect-slp.cc
+++ b/gcc/tree-vect-slp.cc
@@ -5005,6 +5005,11 @@ vect_analyze_slp (vec_info *vinfo, unsigned 
max_tree_size,
                vinfo = next;
              }
            STMT_VINFO_DEF_TYPE (first_element) = vect_internal_def;
+           /* ???  When there's a conversion around the reduction
+              chain 'last' isn't the entry of the reduction.  */
+           if (STMT_VINFO_DEF_TYPE (last) != vect_reduction_def)
+             return opt_result::failure_at (vect_location,
+                                            "SLP build failed.\n");
            /* It can be still vectorized as part of an SLP reduction.  */
            loop_vinfo->reductions.safe_push (last);
          }

Reply via email to