diff options
author | Richard Guenther <rguenther@suse.de> | 2008-05-28 13:54:05 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2008-05-28 13:54:05 +0000 |
commit | 540f6bda9926d60d7691fc4a21fe78338b450952 (patch) | |
tree | bbf97b3fc675101df94246164a86835ad4504952 /gcc/tree-ssa.c | |
parent | 00ea95170b661191fffee460554c33f075bcc733 (diff) | |
download | gcc-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.c | 31 |
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; |