diff mbox series

Fix leak of SLP nodes when building store interleaving

Message ID 20240828104314.5DCA9385EC11@sourceware.org
State New
Headers show
Series Fix leak of SLP nodes when building store interleaving | expand

Commit Message

Richard Biener Aug. 28, 2024, 10:42 a.m. UTC
The following fixes a leak of the discovered single-lane store
SLP nodes from which we only use their children.  This uncovers
a latent reference counting issue in the interleaving build where
we fail to increment their reference count.

Bootstrapped and tested on x86_64-unknown-linux-gnu, pushed.

	* tree-vect-slp.cc (vect_build_slp_store_interleaving):
	Fix reference counting.
	(vect_build_slp_instance): Release rhs_nodes.
---
 gcc/tree-vect-slp.cc | 4 ++++
 1 file changed, 4 insertions(+)
diff mbox series

Patch

diff --git a/gcc/tree-vect-slp.cc b/gcc/tree-vect-slp.cc
index 79d83efb015..d110c992b04 100644
--- a/gcc/tree-vect-slp.cc
+++ b/gcc/tree-vect-slp.cc
@@ -3486,6 +3486,7 @@  vect_build_slp_store_interleaving (vec<slp_tree> &rhs_nodes,
 	{
 	  SLP_TREE_CHILDREN (perm)
 	    .quick_push (SLP_TREE_CHILDREN (rhs_nodes[j])[l]);
+	  SLP_TREE_CHILDREN (rhs_nodes[j])[l]->refcnt++;
 	  for (unsigned k = 0;
 	       k < SLP_TREE_SCALAR_STMTS (rhs_nodes[j]).length (); ++k)
 	    {
@@ -3949,6 +3950,9 @@  vect_build_slp_instance (vec_info *vinfo,
 	  /* Now we assume we can build the root SLP node from all stores.  */
 	  node = vect_build_slp_store_interleaving (rhs_nodes, scalar_stmts);
 
+	  while (!rhs_nodes.is_empty ())
+	    vect_free_slp_tree (rhs_nodes.pop ());
+
 	  /* Create a new SLP instance.  */
 	  slp_instance new_instance = XNEW (class _slp_instance);
 	  SLP_INSTANCE_TREE (new_instance) = node;