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
This commit is contained in:
Jakub Jelinek 2013-03-01 23:55:26 +01:00 committed by Jakub Jelinek
parent b6b9227d52
commit caff7edf99
2 changed files with 13 additions and 7 deletions

View File

@ -1,5 +1,10 @@
2013-03-01 Jakub Jelinek <jakub@redhat.com>
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.
PR middle-end/56461
* tree-vect-data-refs.c (vect_permute_store_chain): Avoid using copy
method on dr_chain and result_chain.

View File

@ -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++)
{