From 3f2930d891ecaca678a3351e31354b6e618bddaa Mon Sep 17 00:00:00 2001 From: Richard Guenther Date: Wed, 21 Jul 2010 09:46:11 +0000 Subject: [PATCH] tree-flow.h (referenced_var): Move define ... 2010-07-21 Richard Guenther * tree-flow.h (referenced_var): Move define ... * tree-flow-inline.h (referenced_var): ... here as an inline function. Assert here ... * tree-dfa.c (referenced_var_lookup): ... instead of here. * tree-ssa.c (maybe_optimize_var): Check if the variable is in referenced vars. (execute_update_addresses_taken): Remove old broken check. * gimple-pretty-print.c (pp_points_to_solution): Use referenced_var_lookup. * tree-into-ssa.c (dump_decl_set): Likewise. From-SVN: r162368 --- gcc/ChangeLog | 13 +++++++++++++ gcc/gimple-pretty-print.c | 6 +----- gcc/tree-dfa.c | 1 - gcc/tree-flow-inline.h | 10 ++++++++++ gcc/tree-flow.h | 1 - gcc/tree-into-ssa.c | 6 +----- gcc/tree-ssa.c | 13 ++++++------- 7 files changed, 31 insertions(+), 19 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2d7023303760..313baf6c36d2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,16 @@ +2010-07-21 Richard Guenther + + * tree-flow.h (referenced_var): Move define ... + * tree-flow-inline.h (referenced_var): ... here as an inline + function. Assert here ... + * tree-dfa.c (referenced_var_lookup): ... instead of here. + * tree-ssa.c (maybe_optimize_var): Check if the variable + is in referenced vars. + (execute_update_addresses_taken): Remove old broken check. + * gimple-pretty-print.c (pp_points_to_solution): Use + referenced_var_lookup. + * tree-into-ssa.c (dump_decl_set): Likewise. + 2010-07-21 Jakub Jelinek PR debug/45003 diff --git a/gcc/gimple-pretty-print.c b/gcc/gimple-pretty-print.c index 0c613e4a8bbc..6e1f6b782c2a 100644 --- a/gcc/gimple-pretty-print.c +++ b/gcc/gimple-pretty-print.c @@ -534,11 +534,7 @@ pp_points_to_solution (pretty_printer *buffer, struct pt_solution *pt) pp_string (buffer, "{ "); EXECUTE_IF_SET_IN_BITMAP (pt->vars, 0, i, bi) { - struct tree_decl_minimal in; - tree var; - in.uid = i; - var = (tree) htab_find_with_hash (gimple_referenced_vars (cfun), - &in, i); + tree var = referenced_var_lookup (i); if (var) { dump_generic_node (buffer, var, 0, dump_flags, false); diff --git a/gcc/tree-dfa.c b/gcc/tree-dfa.c index 37e15bf7ee23..461e2cf22772 100644 --- a/gcc/tree-dfa.c +++ b/gcc/tree-dfa.c @@ -495,7 +495,6 @@ referenced_var_lookup (unsigned int uid) struct tree_decl_minimal in; in.uid = uid; h = (tree) htab_find_with_hash (gimple_referenced_vars (cfun), &in, uid); - gcc_assert (h || uid == 0); return h; } diff --git a/gcc/tree-flow-inline.h b/gcc/tree-flow-inline.h index 7e935378c811..7103d238b095 100644 --- a/gcc/tree-flow-inline.h +++ b/gcc/tree-flow-inline.h @@ -98,6 +98,16 @@ next_htab_element (htab_iterator *hti) return NULL; } +/* Get the variable with uid UID from the list of referenced vars. */ + +static inline tree +referenced_var (unsigned int uid) +{ + tree var = referenced_var_lookup (uid); + gcc_assert (var || uid == 0); + return var; +} + /* Initialize ITER to point to the first referenced variable in the referenced_vars hashtable, and return that variable. */ diff --git a/gcc/tree-flow.h b/gcc/tree-flow.h index 6b12d086a9f1..6209a844df34 100644 --- a/gcc/tree-flow.h +++ b/gcc/tree-flow.h @@ -321,7 +321,6 @@ typedef struct extern tree referenced_var_lookup (unsigned int); extern bool referenced_var_check_and_insert (tree); #define num_referenced_vars htab_elements (gimple_referenced_vars (cfun)) -#define referenced_var(i) referenced_var_lookup (i) #define num_ssa_names (VEC_length (tree, cfun->gimple_df->ssa_names)) #define ssa_name(i) (VEC_index (tree, cfun->gimple_df->ssa_names, (i))) diff --git a/gcc/tree-into-ssa.c b/gcc/tree-into-ssa.c index e49fb035bc12..e7c4eca1bb9e 100644 --- a/gcc/tree-into-ssa.c +++ b/gcc/tree-into-ssa.c @@ -1470,11 +1470,7 @@ dump_decl_set (FILE *file, bitmap set) EXECUTE_IF_SET_IN_BITMAP (set, 0, i, bi) { - struct tree_decl_minimal in; - tree var; - in.uid = i; - var = (tree) htab_find_with_hash (gimple_referenced_vars (cfun), - &in, i); + tree var = referenced_var_lookup (i); if (var) print_generic_expr (file, var, 0); else diff --git a/gcc/tree-ssa.c b/gcc/tree-ssa.c index d4c519fdfe28..0be459118e5a 100644 --- a/gcc/tree-ssa.c +++ b/gcc/tree-ssa.c @@ -1881,6 +1881,11 @@ maybe_optimize_var (tree var, bitmap addresses_taken, bitmap not_reg_needs) || bitmap_bit_p (addresses_taken, DECL_UID (var))) return false; + /* If the variable is not in the list of referenced vars then we + do not need to touch it nor can we rename it. */ + if (!referenced_var_lookup (DECL_UID (var))) + return false; + if (TREE_ADDRESSABLE (var) /* Do not change TREE_ADDRESSABLE if we need to preserve var as a non-register. Otherwise we are confused and forget to @@ -2031,13 +2036,7 @@ execute_update_addresses_taken (bool do_optimize) unused vars from BLOCK trees which cause code generation differences for -g vs. -g0. */ for (var = DECL_ARGUMENTS (cfun->decl); var; var = DECL_CHAIN (var)) - { - /* ??? Not all arguments are in referenced vars. */ - if (!var_ann (var)) - continue; - update_vops - |= maybe_optimize_var (var, addresses_taken, not_reg_needs); - } + update_vops |= maybe_optimize_var (var, addresses_taken, not_reg_needs); for (i = 0; VEC_iterate (tree, cfun->local_decls, i, var); ++i) update_vops |= maybe_optimize_var (var, addresses_taken, not_reg_needs); }