aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa.c
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2008-05-28 13:54:05 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2008-05-28 13:54:05 +0000
commit540f6bda9926d60d7691fc4a21fe78338b450952 (patch)
treebbf97b3fc675101df94246164a86835ad4504952 /gcc/tree-ssa.c
parent00ea95170b661191fffee460554c33f075bcc733 (diff)
downloadgcc-540f6bda9926d60d7691fc4a21fe78338b450952.zip
gcc-540f6bda9926d60d7691fc4a21fe78338b450952.tar.gz
gcc-540f6bda9926d60d7691fc4a21fe78338b450952.tar.bz2
re PR tree-optimization/36291 (GCC is slow and memory-hungry building sipQtGuipart.cpp)
2008-05-28 Richard Guenther <rguenther@suse.de> PR tree-optimization/36291 * tree-flow. h (struct gimple_df): Remove var_anns member. * tree-flow-inline.h (gimple_var_anns): Remove. (var_ann): Simplify. * tree-dfa.c (create_var_ann): Simplify. (remove_referenced_var): Clear alias info from var_anns of globals. * tree-ssa.c (init_tree_ssa): Do not allocate var_anns. (delete_tree_ssa): Clear alias info from var_anns of globals. Do not free var_anns. (var_ann_eq): Remove. (var_ann_hash): Likewise. From-SVN: r136095
Diffstat (limited to 'gcc/tree-ssa.c')
-rw-r--r--gcc/tree-ssa.c31
1 files changed, 8 insertions, 23 deletions
diff --git a/gcc/tree-ssa.c b/gcc/tree-ssa.c
index 150074f..1c01d71 100644
--- a/gcc/tree-ssa.c
+++ b/gcc/tree-ssa.c
@@ -904,24 +904,6 @@ uid_decl_map_hash (const void *item)
return ((const_tree)item)->decl_minimal.uid;
}
-/* Return true if the uid in both int tree maps are equal. */
-
-static int
-var_ann_eq (const void *va, const void *vb)
-{
- const struct static_var_ann_d *a = (const struct static_var_ann_d *) va;
- const_tree const b = (const_tree) vb;
- return (a->uid == DECL_UID (b));
-}
-
-/* Hash a UID in a int_tree_map. */
-
-static unsigned int
-var_ann_hash (const void *item)
-{
- return ((const struct static_var_ann_d *)item)->uid;
-}
-
/* Return true if the DECL_UID in both trees are equal. */
static int
@@ -951,8 +933,6 @@ init_tree_ssa (struct function *fn)
uid_decl_map_eq, NULL);
fn->gimple_df->default_defs = htab_create_ggc (20, uid_ssaname_map_hash,
uid_ssaname_map_eq, NULL);
- fn->gimple_df->var_anns = htab_create_ggc (20, var_ann_hash,
- var_ann_eq, NULL);
fn->gimple_df->call_clobbered_vars = BITMAP_GGC_ALLOC ();
fn->gimple_df->addressable_vars = BITMAP_GGC_ALLOC ();
init_ssanames (fn, 0);
@@ -998,9 +978,16 @@ delete_tree_ssa (void)
set_phi_nodes (bb, NULL);
}
- /* Remove annotations from every referenced variable. */
+ /* Remove annotations from every referenced local variable. */
FOR_EACH_REFERENCED_VAR (var, rvi)
{
+ if (!MTAG_P (var)
+ && (TREE_STATIC (var) || DECL_EXTERNAL (var)))
+ {
+ var_ann (var)->mpt = NULL_TREE;
+ var_ann (var)->symbol_mem_tag = NULL_TREE;
+ continue;
+ }
if (var->base.ann)
ggc_free (var->base.ann);
var->base.ann = NULL;
@@ -1018,8 +1005,6 @@ delete_tree_ssa (void)
htab_delete (cfun->gimple_df->default_defs);
cfun->gimple_df->default_defs = NULL;
- htab_delete (cfun->gimple_df->var_anns);
- cfun->gimple_df->var_anns = NULL;
cfun->gimple_df->call_clobbered_vars = NULL;
cfun->gimple_df->addressable_vars = NULL;
cfun->gimple_df->modified_noreturn_calls = NULL;