Fix leak of SLP nodes when building store interleaving
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. * tree-vect-slp.cc (vect_build_slp_store_interleaving): Fix reference counting. (vect_build_slp_instance): Release rhs_nodes.
This commit is contained in:
parent
ad895a2890
commit
04065d8c30
1 changed files with 4 additions and 0 deletions
|
@ -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;
|
||||
|
|
Loading…
Add table
Reference in a new issue