https://gcc.gnu.org/g:bedf26c201894d340a4eb61927879fd0d82e3102
commit r15-6830-gbedf26c201894d340a4eb61927879fd0d82e3102 Author: Richard Biener <rguent...@suse.de> Date: Fri Jan 10 16:25:35 2025 +0100 More memory leak fixes The following were found compiling SPEC CPU 2017 with valgrind. * tree-vect-slp.cc (vect_analyze_slp): Release saved_stmts vector. (vect_build_slp_tree_2): Release new_oprnds_info when not used. (vect_analyze_slp): Release root_stmts when gcond SLP build fails. Diff: --- gcc/tree-vect-slp.cc | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/gcc/tree-vect-slp.cc b/gcc/tree-vect-slp.cc index 337506419d92..02e7f5c4d587 100644 --- a/gcc/tree-vect-slp.cc +++ b/gcc/tree-vect-slp.cc @@ -2678,6 +2678,8 @@ out: nops = 1; has_two_operators_perm = true; } + else + vect_free_oprnd_info (new_oprnds_info); } auto_vec<slp_tree, 4> children; @@ -4951,8 +4953,8 @@ vect_analyze_slp (vec_info *vinfo, unsigned max_tree_size, max_tree_size, &limit, bst_map, NULL, force_single_lane); } - saved_stmts.release (); } + saved_stmts.release (); } /* Make sure to vectorize only-live stmts, usually inductions. */ @@ -5013,10 +5015,11 @@ vect_analyze_slp (vec_info *vinfo, unsigned max_tree_size, stmts.create (1); stmts.quick_push (vect_stmt_to_vectorize (varg)); - vect_build_slp_instance (vinfo, slp_inst_kind_gcond, - stmts, roots, remain, - max_tree_size, &limit, - bst_map, NULL, force_single_lane); + if (! vect_build_slp_instance (vinfo, slp_inst_kind_gcond, + stmts, roots, remain, + max_tree_size, &limit, + bst_map, NULL, force_single_lane)) + roots.release (); } /* Find and create slp instances for inductions that have been forced