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-dfa.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-dfa.c')
-rw-r--r-- | gcc/tree-dfa.c | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/gcc/tree-dfa.c b/gcc/tree-dfa.c index 0aabc80..5b9c724 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; } |