summaryrefslogtreecommitdiff
path: root/gcc/tree-dfa.c
diff options
context:
space:
mode:
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2006-12-20 22:40:48 +0000
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2006-12-20 22:40:48 +0000
commitf5ab006bf3e5e6f8e8036e036d8bd1b151c82f60 (patch)
tree43db620bf4a68210816d01661abe142a49165b70 /gcc/tree-dfa.c
parent44753b5af6138f98260a844f11f88969abc33c05 (diff)
downloadgcc-f5ab006bf3e5e6f8e8036e036d8bd1b151c82f60.tar.gz
* 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@120089 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-dfa.c')
-rw-r--r--gcc/tree-dfa.c21
1 files changed, 19 insertions, 2 deletions
diff --git a/gcc/tree-dfa.c b/gcc/tree-dfa.c
index 0aabc80b7a7..5b9c72418b5 100644
--- a/gcc/tree-dfa.c
+++ b/gcc/tree-dfa.c
@@ -124,16 +124,33 @@ var_ann_t
create_var_ann (tree t)
{
var_ann_t ann;
+ struct static_var_ann_d *sann = NULL;
gcc_assert (t);
gcc_assert (DECL_P (t));
gcc_assert (!t->base.ann || t->base.ann->common.type == VAR_ANN);
- ann = GGC_CNEW (struct var_ann_d);
+ if (TREE_STATIC (t))
+ {
+ sann = GGC_CNEW (struct static_var_ann_d);
+ ann = &sann->ann;
+ }
+ else
+ ann = GGC_CNEW (struct var_ann_d);
ann->common.type = VAR_ANN;
- t->base.ann = (tree_ann_t) ann;
+ if (TREE_STATIC (t))
+ {
+ void **slot;
+ sann->uid = DECL_UID (t);
+ slot = htab_find_slot_with_hash (gimple_var_anns (cfun),
+ t, DECL_UID (t), INSERT);
+ gcc_assert (!*slot);
+ *slot = sann;
+ }
+ else
+ t->base.ann = (tree_ann_t) ann;
return ann;
}