Commit 3f2930d8 by Richard Guenther Committed by Richard Biener

tree-flow.h (referenced_var): Move define ...

2010-07-21  Richard Guenther  <rguenther@suse.de>

	* 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
parent 370ae599
2010-07-21 Richard Guenther <rguenther@suse.de>
* 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 <jakub@redhat.com> 2010-07-21 Jakub Jelinek <jakub@redhat.com>
PR debug/45003 PR debug/45003
......
...@@ -534,11 +534,7 @@ pp_points_to_solution (pretty_printer *buffer, struct pt_solution *pt) ...@@ -534,11 +534,7 @@ pp_points_to_solution (pretty_printer *buffer, struct pt_solution *pt)
pp_string (buffer, "{ "); pp_string (buffer, "{ ");
EXECUTE_IF_SET_IN_BITMAP (pt->vars, 0, i, bi) EXECUTE_IF_SET_IN_BITMAP (pt->vars, 0, i, bi)
{ {
struct tree_decl_minimal in; tree var = referenced_var_lookup (i);
tree var;
in.uid = i;
var = (tree) htab_find_with_hash (gimple_referenced_vars (cfun),
&in, i);
if (var) if (var)
{ {
dump_generic_node (buffer, var, 0, dump_flags, false); dump_generic_node (buffer, var, 0, dump_flags, false);
......
...@@ -495,7 +495,6 @@ referenced_var_lookup (unsigned int uid) ...@@ -495,7 +495,6 @@ referenced_var_lookup (unsigned int uid)
struct tree_decl_minimal in; struct tree_decl_minimal in;
in.uid = uid; in.uid = uid;
h = (tree) htab_find_with_hash (gimple_referenced_vars (cfun), &in, uid); h = (tree) htab_find_with_hash (gimple_referenced_vars (cfun), &in, uid);
gcc_assert (h || uid == 0);
return h; return h;
} }
......
...@@ -98,6 +98,16 @@ next_htab_element (htab_iterator *hti) ...@@ -98,6 +98,16 @@ next_htab_element (htab_iterator *hti)
return NULL; 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 /* Initialize ITER to point to the first referenced variable in the
referenced_vars hashtable, and return that variable. */ referenced_vars hashtable, and return that variable. */
......
...@@ -321,7 +321,6 @@ typedef struct ...@@ -321,7 +321,6 @@ typedef struct
extern tree referenced_var_lookup (unsigned int); extern tree referenced_var_lookup (unsigned int);
extern bool referenced_var_check_and_insert (tree); extern bool referenced_var_check_and_insert (tree);
#define num_referenced_vars htab_elements (gimple_referenced_vars (cfun)) #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 num_ssa_names (VEC_length (tree, cfun->gimple_df->ssa_names))
#define ssa_name(i) (VEC_index (tree, cfun->gimple_df->ssa_names, (i))) #define ssa_name(i) (VEC_index (tree, cfun->gimple_df->ssa_names, (i)))
......
...@@ -1470,11 +1470,7 @@ dump_decl_set (FILE *file, bitmap set) ...@@ -1470,11 +1470,7 @@ dump_decl_set (FILE *file, bitmap set)
EXECUTE_IF_SET_IN_BITMAP (set, 0, i, bi) EXECUTE_IF_SET_IN_BITMAP (set, 0, i, bi)
{ {
struct tree_decl_minimal in; tree var = referenced_var_lookup (i);
tree var;
in.uid = i;
var = (tree) htab_find_with_hash (gimple_referenced_vars (cfun),
&in, i);
if (var) if (var)
print_generic_expr (file, var, 0); print_generic_expr (file, var, 0);
else else
......
...@@ -1881,6 +1881,11 @@ maybe_optimize_var (tree var, bitmap addresses_taken, bitmap not_reg_needs) ...@@ -1881,6 +1881,11 @@ maybe_optimize_var (tree var, bitmap addresses_taken, bitmap not_reg_needs)
|| bitmap_bit_p (addresses_taken, DECL_UID (var))) || bitmap_bit_p (addresses_taken, DECL_UID (var)))
return false; 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) if (TREE_ADDRESSABLE (var)
/* Do not change TREE_ADDRESSABLE if we need to preserve var as /* Do not change TREE_ADDRESSABLE if we need to preserve var as
a non-register. Otherwise we are confused and forget to a non-register. Otherwise we are confused and forget to
...@@ -2031,13 +2036,7 @@ execute_update_addresses_taken (bool do_optimize) ...@@ -2031,13 +2036,7 @@ execute_update_addresses_taken (bool do_optimize)
unused vars from BLOCK trees which cause code generation unused vars from BLOCK trees which cause code generation
differences for -g vs. -g0. */ differences for -g vs. -g0. */
for (var = DECL_ARGUMENTS (cfun->decl); var; var = DECL_CHAIN (var)) for (var = DECL_ARGUMENTS (cfun->decl); var; var = DECL_CHAIN (var))
{ update_vops |= maybe_optimize_var (var, addresses_taken, not_reg_needs);
/* ??? Not all arguments are in referenced vars. */
if (!var_ann (var))
continue;
update_vops
|= maybe_optimize_var (var, addresses_taken, not_reg_needs);
}
for (i = 0; VEC_iterate (tree, cfun->local_decls, i, var); ++i) for (i = 0; VEC_iterate (tree, cfun->local_decls, i, var); ++i)
update_vops |= maybe_optimize_var (var, addresses_taken, not_reg_needs); update_vops |= maybe_optimize_var (var, addresses_taken, not_reg_needs);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment