]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
2007-07-28 Daniel Berlin <dberlin@dberlin.org>
authordberlin <dberlin@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 29 Jul 2007 20:53:29 +0000 (20:53 +0000)
committerdberlin <dberlin@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 29 Jul 2007 20:53:29 +0000 (20:53 +0000)
* Makefile.in (tree-ssa-alias.o): Add alloc-pool.h

* tree-ssa-alias.c: Add alloc-pool.h.
(init_alias_info): Free alias_bitmap_obstack.
(delete_alias_info): Call delete_mem_ref_stats.
(get_mem_sym_stats_for): Use alloc_pool.
(init_mem_ref_stats): Do not delete mem_ref_stats here.
(delete_mem_sym_stats): Removed.

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

gcc/ChangeLog
gcc/Makefile.in
gcc/tree-ssa-alias.c

index 3900bf75d86839b5c359cbadc47cbe3ef7595b6f..715e42314c8056337900da43c0526ebc44ae7062 100644 (file)
@@ -1,3 +1,14 @@
+2007-07-28  Daniel Berlin  <dberlin@dberlin.org>
+
+       * Makefile.in (tree-ssa-alias.o): Add alloc-pool.h
+
+       * tree-ssa-alias.c: Add alloc-pool.h.
+       (init_alias_info): Free alias_bitmap_obstack.
+       (delete_alias_info): Call delete_mem_ref_stats.
+       (get_mem_sym_stats_for): Use alloc_pool.
+       (init_mem_ref_stats): Do not delete mem_ref_stats here.
+       (delete_mem_sym_stats): Removed.
+       
 2007-07-29  Sebastian Pop  <sebpop@gmail.com>
 
        * tree-data-ref.c (add_multivariate_self_dist): Parametric access
index acd52f705be45eced75078b8fddaeaf318591944..baf50d73ab8dccc4e6923d6fdebafade83ec4e91 100644 (file)
@@ -2172,7 +2172,7 @@ tree-ssa-alias.o : tree-ssa-alias.c $(TREE_FLOW_H) $(CONFIG_H) $(SYSTEM_H) \
    $(FUNCTION_H) $(TIMEVAR_H) convert.h $(TM_H) coretypes.h langhooks.h \
    $(TREE_DUMP_H) tree-pass.h $(PARAMS_H) $(BASIC_BLOCK_H) $(DIAGNOSTIC_H) \
    hard-reg-set.h $(TREE_GIMPLE_H) vec.h tree-ssa-structalias.h \
-   $(IPA_TYPE_ESCAPE_H) vecprim.h pointer-set.h
+   $(IPA_TYPE_ESCAPE_H) vecprim.h pointer-set.h alloc-pool.h
 tree-ssa-reassoc.o : tree-ssa-reassoc.c $(TREE_FLOW_H) $(CONFIG_H) \
    $(SYSTEM_H) $(TREE_H) $(GGC_H) $(DIAGNOSTIC_H) errors.h $(TIMEVAR_H) \
    $(TM_H) coretypes.h $(TREE_DUMP_H) tree-pass.h $(FLAGS_H) tree-iterator.h\
index 31130ac0dd01ab3325ef87af10e87751e2ebd7af..0f3351e563c8ef0ac44be4b28a2f659b09f3a3ef 100644 (file)
@@ -47,6 +47,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "bitmap.h"
 #include "vecprim.h"
 #include "pointer-set.h"
+#include "alloc-pool.h"
 
 /* Broad overview of how aliasing works:
    
@@ -212,7 +213,7 @@ static void set_pt_anything (tree);
 
 void debug_mp_info (VEC(mem_sym_stats_t,heap) *);
 
-
+static alloc_pool mem_sym_stats_pool;
 
 /* Return memory reference stats for symbol VAR.  Create a new slot in
    cfun->gimple_df->mem_sym_stats if needed.  */
@@ -229,7 +230,8 @@ get_mem_sym_stats_for (tree var)
   slot = pointer_map_insert (map, var);
   if (*slot == NULL)
     {
-      stats = XCNEW (struct mem_sym_stats_d);
+      stats = pool_alloc (mem_sym_stats_pool);
+      memset (stats, 0, sizeof (*stats));
       stats->var = var;
       *slot = (void *) stats;
     }
@@ -1876,20 +1878,6 @@ count_uses_and_derefs (tree ptr, tree stmt, unsigned *num_uses_p,
   gcc_assert (*num_uses_p >= *num_loads_p + *num_stores_p);
 }
 
-
-/* Helper for delete_mem_ref_stats.  Free all the slots in the
-   mem_sym_stats map.  */
-
-static bool
-delete_mem_sym_stats (void *key ATTRIBUTE_UNUSED, void **value,
-                      void *data ATTRIBUTE_UNUSED)
-{
-  XDELETE (*value);
-  *value = NULL;
-  return false;
-}
-
-
 /* Remove memory references stats for function FN.  */
 
 void
@@ -1897,11 +1885,9 @@ delete_mem_ref_stats (struct function *fn)
 {
   if (gimple_mem_ref_stats (fn)->mem_sym_stats)
     {
-      pointer_map_traverse (gimple_mem_ref_stats (fn)->mem_sym_stats,
-                           delete_mem_sym_stats, NULL);
+      free_alloc_pool (mem_sym_stats_pool);
       pointer_map_destroy (gimple_mem_ref_stats (fn)->mem_sym_stats);
     }
-
   gimple_mem_ref_stats (fn)->mem_sym_stats = NULL;
 }
 
@@ -1913,9 +1899,9 @@ init_mem_ref_stats (void)
 {
   struct mem_ref_stats_d *mem_ref_stats = gimple_mem_ref_stats (cfun);
 
-  if (mem_ref_stats->mem_sym_stats)
-    delete_mem_ref_stats (cfun);
-
+  mem_sym_stats_pool = create_alloc_pool ("Mem sym stats",
+                                         sizeof (struct mem_sym_stats_d),
+                                         100);
   memset (mem_ref_stats, 0, sizeof (struct mem_ref_stats_d));
   mem_ref_stats->mem_sym_stats = pointer_map_create ();
 }
@@ -1946,8 +1932,6 @@ init_alias_info (void)
     {
       unsigned i;
       
-      bitmap_obstack_release (&alias_bitmap_obstack);
-      
       /* Similarly, clear the set of addressable variables.  In this
         case, we can just clear the set because addressability is
         only computed here.  */
@@ -2021,6 +2005,8 @@ init_alias_info (void)
 
   /* Next time, we will need to reset alias information.  */
   cfun->gimple_df->aliases_computed_p = true;
+  if (alias_bitmap_obstack.elements != NULL)
+    bitmap_obstack_release (&alias_bitmap_obstack);    
   bitmap_obstack_initialize (&alias_bitmap_obstack);
 
   return ai;
@@ -2051,6 +2037,7 @@ delete_alias_info (struct alias_info *ai)
   pointer_set_destroy (ai->dereferenced_ptrs_load);
   free (ai);
 
+  delete_mem_ref_stats (cfun);
   delete_points_to_sets ();
 }