https://gcc.gnu.org/g:295dd134318068d253f09786b523718fd6951967

commit r15-10171-g295dd134318068d253f09786b523718fd6951967
Author: Richard Biener <rguent...@suse.de>
Date:   Thu Jul 31 12:20:34 2025 +0200

    tree-optimization/121256 - re-instantiate check on SLP node
    
    On the gcc-15 branch we can have no SLP node.  We have to be
    careful with cherry-picks from trunk.
    
            PR tree-optimization/121256
            * tree-vect-loop.cc (vectorizable_recurr): Handle the case
            of a NULL SLP node.

Diff:
---
 gcc/tree-vect-loop.cc | 27 +++++++++++++++------------
 1 file changed, 15 insertions(+), 12 deletions(-)

diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc
index f22cf2ec894a..5ccd64adbf22 100644
--- a/gcc/tree-vect-loop.cc
+++ b/gcc/tree-vect-loop.cc
@@ -9649,18 +9649,21 @@ vectorizable_recurr (loop_vec_info loop_vinfo, 
stmt_vec_info stmt_info,
      are uniform.  */
   tree uniform_initval = NULL_TREE;
   edge pe = loop_preheader_edge (LOOP_VINFO_LOOP (loop_vinfo));
-  for (stmt_vec_info s : SLP_TREE_SCALAR_STMTS (slp_node))
-    {
-      gphi *phi = as_a <gphi *> (s->stmt);
-      if (! uniform_initval)
-       uniform_initval = PHI_ARG_DEF_FROM_EDGE (phi, pe);
-      else if (! operand_equal_p (uniform_initval,
-                                 PHI_ARG_DEF_FROM_EDGE (phi, pe)))
-       {
-         uniform_initval = NULL_TREE;
-         break;
-       }
-    }
+  if (slp_node)
+    for (stmt_vec_info s : SLP_TREE_SCALAR_STMTS (slp_node))
+      {
+       gphi *phi = as_a <gphi *> (s->stmt);
+       if (! uniform_initval)
+         uniform_initval = PHI_ARG_DEF_FROM_EDGE (phi, pe);
+       else if (! operand_equal_p (uniform_initval,
+                                   PHI_ARG_DEF_FROM_EDGE (phi, pe)))
+         {
+           uniform_initval = NULL_TREE;
+           break;
+         }
+      }
+  else
+    uniform_initval = PHI_ARG_DEF_FROM_EDGE (phi, pe);
   if (!uniform_initval && !nunits.is_constant ())
     {
       if (dump_enabled_p ())

Reply via email to