diff options
author | marxin <marxin@138bc75d-0d04-0410-961f-82ee72b054a4> | 2015-11-09 15:45:59 +0000 |
---|---|---|
committer | marxin <marxin@138bc75d-0d04-0410-961f-82ee72b054a4> | 2015-11-09 15:45:59 +0000 |
commit | b7cbf36d16bd2ea5194da0ced12a2421f213aa6b (patch) | |
tree | a60b2807573bbeab492c0ef1ec1bb75bcd6b8efa /gcc/lra-lives.c | |
parent | 7758d60897a73c70ff41838698b6fcfdb1346873 (diff) | |
download | gcc-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.c | 14 |
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); |