summaryrefslogtreecommitdiff
path: root/gcc/lra-lives.c
diff options
context:
space:
mode:
authormarxin <marxin@138bc75d-0d04-0410-961f-82ee72b054a4>2015-11-09 15:45:59 +0000
committermarxin <marxin@138bc75d-0d04-0410-961f-82ee72b054a4>2015-11-09 15:45:59 +0000
commitb7cbf36d16bd2ea5194da0ced12a2421f213aa6b (patch)
treea60b2807573bbeab492c0ef1ec1bb75bcd6b8efa /gcc/lra-lives.c
parent7758d60897a73c70ff41838698b6fcfdb1346873 (diff)
downloadgcc-b7cbf36d16bd2ea5194da0ced12a2421f213aa6b.tar.gz
Fix memory leaks and use a pool_allocator
* gcc.c (record_temp_file): Release name string. * ifcvt.c (noce_convert_multiple_sets): Use auto_vec instead of vec. * lra-lives.c (free_live_range_list): Utilize lra_live_range_pool for allocation and deallocation. (create_live_range): Likewise. (copy_live_range): Likewise. (lra_merge_live_ranges): Likewise. (remove_some_program_points_and_update_live_ranges): Likewise. (lra_create_live_ranges_1): Release point_freq_vec that can be not freed from previous iteration of the function. * tree-eh.c (lower_try_finally_switch): Use auto_vec instead of vec. * tree-sra.c (sra_deinitialize): Release all vectors in base_access_vec. * tree-ssa-dom.c (free_dom_edge_info): Make the function extern. * tree-ssa-threadupdate.c (remove_ctrl_stmt_and_useless_edges): Release edge_info for a removed edge. (thread_through_all_blocks): Free region vector. * tree-ssa.h (free_dom_edge_info): Declare function extern. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@230027 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/lra-lives.c')
-rw-r--r--gcc/lra-lives.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/gcc/lra-lives.c b/gcc/lra-lives.c
index 1655c4768c3..9453759a521 100644
--- a/gcc/lra-lives.c
+++ b/gcc/lra-lives.c
@@ -103,7 +103,7 @@ free_live_range_list (lra_live_range_t lr)
while (lr != NULL)
{
next = lr->next;
- delete lr;
+ lra_live_range_pool.remove (lr);
lr = next;
}
}
@@ -112,7 +112,7 @@ free_live_range_list (lra_live_range_t lr)
static lra_live_range_t
create_live_range (int regno, int start, int finish, lra_live_range_t next)
{
- lra_live_range_t p = new lra_live_range;
+ lra_live_range_t p = lra_live_range_pool.allocate ();
p->regno = regno;
p->start = start;
p->finish = finish;
@@ -124,7 +124,7 @@ create_live_range (int regno, int start, int finish, lra_live_range_t next)
static lra_live_range_t
copy_live_range (lra_live_range_t r)
{
- return new lra_live_range (*r);
+ return new (lra_live_range_pool) lra_live_range (*r);
}
/* Copy live range list given by its head R and return the result. */
@@ -167,7 +167,7 @@ lra_merge_live_ranges (lra_live_range_t r1, lra_live_range_t r2)
r1->start = r2->start;
lra_live_range_t temp = r2;
r2 = r2->next;
- delete temp;
+ lra_live_range_pool.remove (temp);
}
else
{
@@ -1081,7 +1081,7 @@ remove_some_program_points_and_update_live_ranges (void)
}
prev_r->start = r->start;
prev_r->next = next_r;
- delete r;
+ lra_live_range_pool.remove (r);
}
}
}
@@ -1240,7 +1240,9 @@ lra_create_live_ranges_1 (bool all_p, bool dead_insn_p)
dead_set = sparseset_alloc (max_regno);
unused_set = sparseset_alloc (max_regno);
curr_point = 0;
- point_freq_vec.create (get_max_uid () * 2);
+ unsigned new_length = get_max_uid () * 2;
+ if (point_freq_vec.length () < new_length)
+ point_freq_vec.safe_grow (new_length);
lra_point_freq = point_freq_vec.address ();
int *post_order_rev_cfg = XNEWVEC (int, last_basic_block_for_fn (cfun));
int n_blocks_inverted = inverted_post_order_compute (post_order_rev_cfg);