diff options
author | spop <spop@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-12-23 16:25:52 +0000 |
---|---|---|
committer | spop <spop@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-12-23 16:25:52 +0000 |
commit | a8af2e868d6e2eb08b40066e4fc888d8ca2424ab (patch) | |
tree | 560661198b65a199d12abbb757c1a4560e199292 /gcc/tree-if-conv.c | |
parent | 12319e0aa5f1770ecf35d6064037d8da8e1a3460 (diff) | |
download | gcc-a8af2e868d6e2eb08b40066e4fc888d8ca2424ab.tar.gz |
Fix PR47002: memory leaks.
2010-12-23 Sebastian Pop <sebastian.pop@amd.com>
PR tree-optimization/47002
* tree-data-ref.c (compute_data_dependences_for_loop): Pass in a
pointer to the loop_nest.
(analyze_all_data_dependences): Initialize and free the loop_nest.
(free_dependence_relations): Do not free loop_nest.
(build_rdg): Pass in the loop_nest, datarefs, and dependence_relations.
(free_rdg): Also free the data on edges.
* tree-data-ref.h (build_rdg): Update declaration.
(compute_data_dependences_for_loop): Same.
* tree-if-conv.c (if_convertible_loop_p_1): Pass in the loop_nest.
(if_convertible_loop_p): Allocate and free loop_nest.
* tree-loop-distribution.c (rdg_flag_loop_exits): Free conds.
(free_rdg_components): VEC_free components.
(distribute_loop): Update call to build_rdg. Allocate and free
loop_nest, datarefs, and dependence_relations.
* tree-loop-linear.c (linear_transform_loops): Allocate and free
loop_nest.
* tree-parloops.c (loop_parallel_p): Same.
* tree-predcom.c (tree_predictive_commoning_loop): Same.
* tree-vect-data-refs.c (vect_analyze_data_refs): Pass to
compute_data_dependences_for_loop a pointer to LOOP_VINFO_LOOP_NEST.
* tree-vect-loop.c (new_loop_vec_info): Initialize LOOP_VINFO_LOOP_NEST.
(destroy_loop_vec_info): Free LOOP_VINFO_MAY_ALIAS_DDRS and
LOOP_VINFO_LOOP_NEST.
* tree-vect-slp.c (destroy_bb_vec_info): Call free_data_refs and
free_dependence_relations.
* tree-vectorizer.h (struct _loop_vec_info): Add a field loop_nest.
(LOOP_VINFO_LOOP_NEST): New.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@168210 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-if-conv.c')
-rw-r--r-- | gcc/tree-if-conv.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/gcc/tree-if-conv.c b/gcc/tree-if-conv.c index fc6584584c1..46b20c26c19 100644 --- a/gcc/tree-if-conv.c +++ b/gcc/tree-if-conv.c @@ -977,6 +977,7 @@ predicate_bbs (loop_p loop) static bool if_convertible_loop_p_1 (struct loop *loop, + VEC (loop_p, heap) **loop_nest, VEC (data_reference_p, heap) **refs, VEC (ddr_p, heap) **ddrs) { @@ -986,7 +987,7 @@ if_convertible_loop_p_1 (struct loop *loop, /* Don't if-convert the loop when the data dependences cannot be computed: the loop won't be vectorized in that case. */ - res = compute_data_dependences_for_loop (loop, true, refs, ddrs); + res = compute_data_dependences_for_loop (loop, true, loop_nest, refs, ddrs); if (!res) return false; @@ -1066,6 +1067,7 @@ if_convertible_loop_p (struct loop *loop) bool res = false; VEC (data_reference_p, heap) *refs; VEC (ddr_p, heap) *ddrs; + VEC (loop_p, heap) *loop_nest; /* Handle only innermost loop. */ if (!loop || loop->inner) @@ -1099,7 +1101,8 @@ if_convertible_loop_p (struct loop *loop) refs = VEC_alloc (data_reference_p, heap, 5); ddrs = VEC_alloc (ddr_p, heap, 25); - res = if_convertible_loop_p_1 (loop, &refs, &ddrs); + loop_nest = VEC_alloc (loop_p, heap, 3); + res = if_convertible_loop_p_1 (loop, &loop_nest, &refs, &ddrs); if (flag_tree_loop_if_convert_stores) { @@ -1110,6 +1113,7 @@ if_convertible_loop_p (struct loop *loop) free (dr->aux); } + VEC_free (loop_p, heap, loop_nest); free_data_refs (refs); free_dependence_relations (ddrs); return res; |