diff mbox series

fix memory leaks

Message ID nycvar.YFH.7.76.2102021929140.12216@elmra.sevgm.obk
State New
Headers show
Series fix memory leaks | expand

Commit Message

Richard Biener Feb. 2, 2021, 6:29 p.m. UTC
This fixes various vec<> memory leaks as discovered compiling 521.wrf_r.

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

2021-02-02  Richard Biener  <rguenther@suse.de>

	* gimple-loop-interchange.cc (prepare_data_references):
	Release vectors.
	* gimple-loop-jam.c (tree_loop_unroll_and_jam): Likewise.
	* tree-ssa-loop-im.c (hoist_memory_references): Likewise.
	* tree-vect-stmts.c (vectorizable_condition): Do not
	allocate vectors.
	(vectorizable_comparison): Likewise.
---
 gcc/gimple-loop-interchange.cc | 10 ++++++++--
 gcc/gimple-loop-jam.c          |  6 ++----
 gcc/tree-ssa-loop-im.c         |  1 +
 gcc/tree-vect-stmts.c          | 13 -------------
 4 files changed, 11 insertions(+), 19 deletions(-)
diff mbox series

Patch

diff --git a/gcc/gimple-loop-interchange.cc b/gcc/gimple-loop-interchange.cc
index a1dadd8e5d4..f45b9364644 100644
--- a/gcc/gimple-loop-interchange.cc
+++ b/gcc/gimple-loop-interchange.cc
@@ -1940,7 +1940,10 @@  prepare_data_references (class loop *loop, vec<data_reference_p> *datarefs)
           delete bb_refs;
         }
       else if (bb_refs->is_empty ())
-	delete bb_refs;
+	{
+	  bb_refs->release ();
+	  delete bb_refs;
+	}
       else
 	bb->aux = bb_refs;
     }
@@ -1954,7 +1957,10 @@  prepare_data_references (class loop *loop, vec<data_reference_p> *datarefs)
 
       bb_refs = (vec<data_reference_p> *) bb->aux;
       if (loop_nest && flow_bb_inside_loop_p (loop_nest, bb))
-	datarefs->safe_splice (*bb_refs);
+	{
+	  datarefs->safe_splice (*bb_refs);
+	  bb_refs->release ();
+	}
       else
 	free_data_refs (*bb_refs);
 
diff --git a/gcc/gimple-loop-jam.c b/gcc/gimple-loop-jam.c
index 485f5a9bf61..69dbaeb6cb9 100644
--- a/gcc/gimple-loop-jam.c
+++ b/gcc/gimple-loop-jam.c
@@ -505,15 +505,13 @@  tree_loop_unroll_and_jam (void)
       if (!unroll_jam_possible_p (outer, loop))
 	continue;
 
-      vec<data_reference_p> datarefs;
-      vec<ddr_p> dependences;
+      vec<data_reference_p> datarefs = vNULL;
+      vec<ddr_p> dependences = vNULL;
       unsigned unroll_factor, profit_unroll, removed;
       class tree_niter_desc desc;
       bool unroll = false;
 
       auto_vec<loop_p, 3> loop_nest;
-      dependences.create (10);
-      datarefs.create (10);
       if (!compute_data_dependences_for_loop (outer, true, &loop_nest,
 					      &datarefs, &dependences))
 	{
diff --git a/gcc/tree-ssa-loop-im.c b/gcc/tree-ssa-loop-im.c
index 445b93f7979..8034cf68d27 100644
--- a/gcc/tree-ssa-loop-im.c
+++ b/gcc/tree-ssa-loop-im.c
@@ -2508,6 +2508,7 @@  hoist_memory_references (class loop *loop, bitmap mem_refs,
       if (res != 1)
 	{
 	  bitmap_copy (refs_not_supported, mem_refs);
+	  seq.release ();
 	  break;
 	}
       sms.safe_push (std::make_pair (e, seq));
diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c
index f180ced3124..5eb7b2d1d6e 100644
--- a/gcc/tree-vect-stmts.c
+++ b/gcc/tree-vect-stmts.c
@@ -10085,14 +10085,6 @@  vectorizable_condition (vec_info *vinfo,
 
   /* Transform.  */
 
-  if (!slp_node)
-    {
-      vec_oprnds0.create (1);
-      vec_oprnds1.create (1);
-      vec_oprnds2.create (1);
-      vec_oprnds3.create (1);
-    }
-
   /* Handle def.  */
   scalar_dest = gimple_assign_lhs (stmt);
   if (reduction_type != EXTRACT_LAST_REDUCTION)
@@ -10480,11 +10472,6 @@  vectorizable_comparison (vec_info *vinfo,
     }
 
   /* Transform.  */
-  if (!slp_node)
-    {
-      vec_oprnds0.create (1);
-      vec_oprnds1.create (1);
-    }
 
   /* Handle def.  */
   lhs = gimple_assign_lhs (stmt);