]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
tree-optimization/121256 - re-instantiate check on SLP node
authorRichard Biener <rguenther@suse.de>
Thu, 31 Jul 2025 10:20:34 +0000 (12:20 +0200)
committerRichard Biener <rguenther@suse.de>
Thu, 31 Jul 2025 11:47:39 +0000 (13:47 +0200)
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.

gcc/tree-vect-loop.cc

index f22cf2ec894a58ce560c425fd13bacc30cb55bc6..5ccd64adbf22da8599c25d9e494848124568e057 100644 (file)
@@ -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 ())