diff options
author | Jakub Jelinek <jakub@redhat.com> | 2013-03-01 23:55:26 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2013-03-01 23:55:26 +0100 |
commit | caff7edf99996cbf552d1f76308f7fc103d51f47 (patch) | |
tree | 890b5e0f3346d2d526e143f398661f7d0627dffc /gcc/ira-build.c | |
parent | b6b9227d52396910e9dd81f4de4e90a80103fb8d (diff) | |
download | gcc-caff7edf99996cbf552d1f76308f7fc103d51f47.zip gcc-caff7edf99996cbf552d1f76308f7fc103d51f47.tar.gz gcc-caff7edf99996cbf552d1f76308f7fc103d51f47.tar.bz2 |
re PR middle-end/56461 (GCC is leaking lots of memory)
PR middle-end/56461
* ira-build.c (ira_loop_nodes_count): New variable.
(create_loop_tree_nodes): Initialize it.
(finish_loop_tree_nodes): Use it instead of looking at current_loops.
From-SVN: r196397
Diffstat (limited to 'gcc/ira-build.c')
-rw-r--r-- | gcc/ira-build.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/gcc/ira-build.c b/gcc/ira-build.c index dd66091..b1e481b 100644 --- a/gcc/ira-build.c +++ b/gcc/ira-build.c @@ -57,6 +57,9 @@ ira_loop_tree_node_t ira_bb_nodes; array. */ ira_loop_tree_node_t ira_loop_nodes; +/* And size of the ira_loop_nodes array. */ +unsigned int ira_loop_nodes_count; + /* Map regno -> allocnos with given regno (see comments for allocno member `next_regno_allocno'). */ ira_allocno_t *ira_regno_allocno_map; @@ -142,14 +145,16 @@ create_loop_tree_nodes (void) } if (current_loops == NULL) { + ira_loop_nodes_count = 1; ira_loop_nodes = ((struct ira_loop_tree_node *) ira_allocate (sizeof (struct ira_loop_tree_node))); init_loop_tree_node (ira_loop_nodes, 0); return; } + ira_loop_nodes_count = number_of_loops (); ira_loop_nodes = ((struct ira_loop_tree_node *) ira_allocate (sizeof (struct ira_loop_tree_node) - * number_of_loops ())); + * ira_loop_nodes_count)); FOR_EACH_VEC_SAFE_ELT (get_loops (), i, loop) { if (loop_outer (loop) != NULL) @@ -217,13 +222,9 @@ static void finish_loop_tree_nodes (void) { unsigned int i; - loop_p loop; - if (current_loops == NULL) - finish_loop_tree_node (&ira_loop_nodes[0]); - else - FOR_EACH_VEC_SAFE_ELT (get_loops (), i, loop) - finish_loop_tree_node (&ira_loop_nodes[i]); + for (i = 0; i < ira_loop_nodes_count; i++) + finish_loop_tree_node (&ira_loop_nodes[i]); ira_free (ira_loop_nodes); for (i = 0; i < (unsigned int) last_basic_block_before_change; i++) { |