diff options
author | Jan Hubicka <jh@suse.cz> | 2006-12-20 23:40:48 +0100 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2006-12-20 22:40:48 +0000 |
commit | adb6509f4b75e929a237ded6d182f8524697fedf (patch) | |
tree | 43db620bf4a68210816d01661abe142a49165b70 /gcc/tree-ssa.c | |
parent | 0fd212e1bd1d3039be765ac7344c23b7b14e3585 (diff) | |
download | gcc-adb6509f4b75e929a237ded6d182f8524697fedf.zip gcc-adb6509f4b75e929a237ded6d182f8524697fedf.tar.gz gcc-adb6509f4b75e929a237ded6d182f8524697fedf.tar.bz2 |
tree-flow-inline.h (gimple_var_anns): New function.
* tree-flow-inline.h (gimple_var_anns): New function.
(var_ann): Use hashtable for static functions.
* tree-dfa.c (create_var_ann): Likewise.
* tree-ssa.c (var_ann_eq, var_ann_hash): New functions.
(init_tree_ssa): Initialize var anns.
(delete_tree_ssa): Delete var anns; also clear out gimple_df.
* tree-flow.h (struct static_var_ann_d): New structure.
(gimple_df): Add var_anns.
From-SVN: r120089
Diffstat (limited to 'gcc/tree-ssa.c')
-rw-r--r-- | gcc/tree-ssa.c | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/gcc/tree-ssa.c b/gcc/tree-ssa.c index 8f34ce2..2e4bcdb 100644 --- a/gcc/tree-ssa.c +++ b/gcc/tree-ssa.c @@ -745,6 +745,24 @@ int_tree_map_hash (const void *item) return ((const struct int_tree_map *)item)->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; + tree b = (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; +} + /* Initialize global DFA and SSA structures. */ @@ -756,6 +774,8 @@ init_tree_ssa (void) int_tree_map_eq, NULL); cfun->gimple_df->default_defs = htab_create_ggc (20, int_tree_map_hash, int_tree_map_eq, NULL); + cfun->gimple_df->var_anns = htab_create_ggc (20, var_ann_hash, + var_ann_eq, NULL); cfun->gimple_df->call_clobbered_vars = BITMAP_GGC_ALLOC (); cfun->gimple_df->addressable_vars = BITMAP_GGC_ALLOC (); init_alias_heapvars (); @@ -805,7 +825,8 @@ delete_tree_ssa (void) /* Remove annotations from every referenced variable. */ FOR_EACH_REFERENCED_VAR (var, rvi) { - ggc_free (var->base.ann); + if (var->base.ann) + ggc_free (var->base.ann); var->base.ann = NULL; } htab_delete (gimple_referenced_vars (cfun)); @@ -817,6 +838,9 @@ delete_tree_ssa (void) cfun->gimple_df->global_var = NULL_TREE; 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; @@ -824,6 +848,7 @@ delete_tree_ssa (void) delete_alias_heapvars (); gcc_assert (!need_ssa_update_p ()); + cfun->gimple_df = NULL; } |