OSDN Git Service

2006-06-20 Richard Guenther <rguenther@suse.de>
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 20 Jun 2006 16:19:29 +0000 (16:19 +0000)
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 20 Jun 2006 16:19:29 +0000 (16:19 +0000)
Michael Matz  <matz@suse.de>

* alloc-pool.h (free_alloc_pool_if_empty): Prototype new
function.
* alloc-pool.c (free_alloc_pool_if_empty): New function.
* et-forest.h (et_free_pools): Prototype new function.
* et-forest.c (et_free_tree_force): Free parent occurrence.
(et_free_pools): New function.
* dominance.c (free_dominance_info): Free et-forest alloc
pools.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@114817 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/alloc-pool.c
gcc/alloc-pool.h
gcc/dominance.c
gcc/et-forest.c
gcc/et-forest.h

index 0a56b81..f0e8292 100644 (file)
@@ -1,3 +1,15 @@
+2006-06-20  Richard Guenther  <rguenther@suse.de>
+       Michael Matz  <matz@suse.de>
+
+       * alloc-pool.h (free_alloc_pool_if_empty): Prototype new
+       function.
+       * alloc-pool.c (free_alloc_pool_if_empty): New function.
+       * et-forest.h (et_free_pools): Prototype new function.
+       * et-forest.c (et_free_tree_force): Free parent occurrence. 
+       (et_free_pools): New function.
+       * dominance.c (free_dominance_info): Free et-forest alloc
+       pools.
+
 2006-06-20  Roger Sayle  <roger@eyesopen.com>
 
        * expr.c (expand_expr_real_1) <VECTOR_CST>: For vector constants with
index 17d4073..d85cd9e 100644 (file)
@@ -207,6 +207,17 @@ free_alloc_pool (alloc_pool pool)
   free (pool);
 }
 
+/* Frees the alloc_pool, if it is empty and zero *POOL in this case.  */
+void
+free_alloc_pool_if_empty (alloc_pool *pool)
+{
+  if ((*pool)->elts_free == (*pool)->elts_allocated)
+    {
+      free_alloc_pool (*pool);
+      *pool = NULL;
+    }
+}
+
 /* Allocates one element from the pool specified.  */
 void *
 pool_alloc (alloc_pool pool)
index 5152f9e..82188f4 100644 (file)
@@ -49,6 +49,7 @@ typedef struct alloc_pool_def
 
 extern alloc_pool create_alloc_pool (const char *, size_t, size_t);
 extern void free_alloc_pool (alloc_pool);
+extern void free_alloc_pool_if_empty (alloc_pool *);
 extern void *pool_alloc (alloc_pool);
 extern void pool_free (alloc_pool, void *);
 extern void dump_alloc_pool_statistics (void);
index 92496b7..ca6d154 100644 (file)
@@ -663,6 +663,7 @@ free_dominance_info (enum cdi_direction dir)
       et_free_tree_force (bb->dom[dir]);
       bb->dom[dir] = NULL;
     }
+  et_free_pools ();
 
   n_bbs_in_dom_tree[dir] = 0;
 
index f193afd..b8e5527 100644 (file)
@@ -505,9 +505,20 @@ void
 et_free_tree_force (struct et_node *t)
 {
   pool_free (et_occurrences, t->rightmost_occ);
+  if (t->parent_occ)
+    pool_free (et_occurrences, t->parent_occ);
   pool_free (et_nodes, t);
 }
 
+/* Release the alloc pools, if they are empty.  */
+
+void
+et_free_pools (void)
+{
+  free_alloc_pool_if_empty (&et_occurrences);
+  free_alloc_pool_if_empty (&et_nodes);
+}
+
 /* Sets father of et tree T to FATHER.  */
 
 void
index ccf5aff..1de715f 100644 (file)
@@ -74,6 +74,7 @@ struct et_node
 struct et_node *et_new_tree (void *data);
 void et_free_tree (struct et_node *);
 void et_free_tree_force (struct et_node *);
+void et_free_pools (void);
 void et_set_father (struct et_node *, struct et_node *);
 void et_split (struct et_node *);
 struct et_node *et_nca (struct et_node *, struct et_node *);