aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-dfa.c
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2007-01-14 11:50:43 +0100
committerJan Hubicka <hubicka@gcc.gnu.org>2007-01-14 10:50:43 +0000
commit326648f1bd78bfa613ff589bbc28797f3c86b464 (patch)
tree70f455bf8ee62a2401f9271eecfe9aa1c4a8dac9 /gcc/tree-dfa.c
parent4437b50d212393791a10cf46c45fabebe199ece2 (diff)
downloadgcc-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.c23
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. */