]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
tree-optimization/114057 - handle BB reduction remain defs as LIVE
authorRichard Biener <rguenther@suse.de>
Wed, 27 Mar 2024 10:37:16 +0000 (11:37 +0100)
committerRichard Biener <rguenther@suse.de>
Wed, 27 Mar 2024 11:49:44 +0000 (12:49 +0100)
The following makes sure to record the scalars we add to the BB
reduction vectorization result as scalar uses for the purpose of
computing live lanes.  This restores vectorization in the
bondfree.c TU of 435.gromacs.

PR tree-optimization/114057
* tree-vect-slp.cc (vect_bb_slp_mark_live_stmts): Mark
BB reduction remain defs as scalar uses.

gcc/tree-vect-slp.cc

index 23f9593191ada302a80f77d6deb448f3893aaf56..f57684ca6856c1bc1d38aec67b51247b2362aa48 100644 (file)
@@ -6646,8 +6646,14 @@ vect_bb_slp_mark_live_stmts (bb_vec_info bb_vinfo)
   auto_vec<slp_tree> worklist;
 
   for (slp_instance instance : bb_vinfo->slp_instances)
-    if (!visited.add (SLP_INSTANCE_TREE (instance)))
-      worklist.safe_push (SLP_INSTANCE_TREE (instance));
+    {
+      if (SLP_INSTANCE_KIND (instance) == slp_inst_kind_bb_reduc)
+       for (tree op : SLP_INSTANCE_REMAIN_DEFS (instance))
+         if (TREE_CODE (op) == SSA_NAME)
+           scalar_use_map.put (op, 1);
+      if (!visited.add (SLP_INSTANCE_TREE (instance)))
+       worklist.safe_push (SLP_INSTANCE_TREE (instance));
+    }
 
   do
     {
@@ -6665,7 +6671,8 @@ vect_bb_slp_mark_live_stmts (bb_vec_info bb_vinfo)
            if (child && !visited.add (child))
              worklist.safe_push (child);
        }
-    } while (!worklist.is_empty ());
+    }
+  while (!worklist.is_empty ());
 
   visited.empty ();