diff options
author | Jan Hubicka <jh@suse.cz> | 2007-01-14 11:50:43 +0100 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2007-01-14 10:50:43 +0000 |
commit | 326648f1bd78bfa613ff589bbc28797f3c86b464 (patch) | |
tree | 70f455bf8ee62a2401f9271eecfe9aa1c4a8dac9 /gcc/tree-dfa.c | |
parent | 4437b50d212393791a10cf46c45fabebe199ece2 (diff) | |
download | gcc-326648f1bd78bfa613ff589bbc28797f3c86b464.zip gcc-326648f1bd78bfa613ff589bbc28797f3c86b464.tar.gz gcc-326648f1bd78bfa613ff589bbc28797f3c86b464.tar.bz2 |
tree-dfa.c (remove_referenced_var): New function.
* tree-dfa.c (remove_referenced_var): New function.
* tree-ssa-live.c (remove_unused_locals): Walk referenced vars and
prune referenced vars list too.
* tree-flow.h (remove_referenced_var): Declare.
From-SVN: r120767
Diffstat (limited to 'gcc/tree-dfa.c')
-rw-r--r-- | gcc/tree-dfa.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/gcc/tree-dfa.c b/gcc/tree-dfa.c index 59899f1..93c58f78 100644 --- a/gcc/tree-dfa.c +++ b/gcc/tree-dfa.c @@ -752,6 +752,29 @@ add_referenced_var (tree var) } } +/* Remove VAR from the list. */ + +void +remove_referenced_var (tree var) +{ + var_ann_t v_ann; + struct int_tree_map in; + void **loc; + unsigned int uid = DECL_UID (var); + + clear_call_clobbered (var); + v_ann = get_var_ann (var); + ggc_free (v_ann); + var->base.ann = NULL; + gcc_assert (DECL_P (var)); + in.uid = uid; + in.to = var; + loc = htab_find_slot_with_hash (gimple_referenced_vars (cfun), &in, uid, + NO_INSERT); + ggc_free (*loc); + htab_clear_slot (gimple_referenced_vars (cfun), loc); +} + /* Return the virtual variable associated to the non-scalar variable VAR. */ |