Commit 1431ce01 by Richard Guenther Committed by Richard Biener

re PR bootstrap/53466 (Bootstrap failure)

2012-05-24  Richard Guenther  <rguenther@suse.de>

	PR bootstrap/53466
	* tree-ssa-live.c (remove_unused_scope_block_p): Properly
	handle globals.
	(remove_unused_locals): Pass global_unused_vars to
	remove_unused_scope_block_p.  Restore code walking all
	referenced vars and pruning them.

From-SVN: r187824
parent 07250f0e
2012-05-24 Richard Guenther <rguenther@suse.de>
PR bootstrap/53466
* tree-ssa-live.c (remove_unused_scope_block_p): Properly
handle globals.
(remove_unused_locals): Pass global_unused_vars to
remove_unused_scope_block_p. Restore code walking all
referenced vars and pruning them.
2012-05-23 Jan Hubicka <jh@suse.cz> 2012-05-23 Jan Hubicka <jh@suse.cz>
* tree.h (alias_diag_flags): Remove. * tree.h (alias_diag_flags): Remove.
......
...@@ -429,7 +429,7 @@ mark_scope_block_unused (tree scope) ...@@ -429,7 +429,7 @@ mark_scope_block_unused (tree scope)
done by the inliner. */ done by the inliner. */
static bool static bool
remove_unused_scope_block_p (tree scope) remove_unused_scope_block_p (tree scope, bitmap global_unused_vars)
{ {
tree *t, *next; tree *t, *next;
bool unused = !TREE_USED (scope); bool unused = !TREE_USED (scope);
...@@ -472,7 +472,9 @@ remove_unused_scope_block_p (tree scope) ...@@ -472,7 +472,9 @@ remove_unused_scope_block_p (tree scope)
info about optimized-out variables in the scope blocks. info about optimized-out variables in the scope blocks.
Exception are the scope blocks not containing any instructions Exception are the scope blocks not containing any instructions
at all so user can't get into the scopes at first place. */ at all so user can't get into the scopes at first place. */
else if (var_ann (*t) != NULL && is_used_p (*t)) else if ((is_global_var (*t)
&& !bitmap_bit_p (global_unused_vars, DECL_UID (*t)))
|| (var_ann (*t) != NULL && is_used_p (*t)))
unused = false; unused = false;
else if (TREE_CODE (*t) == LABEL_DECL && TREE_USED (*t)) else if (TREE_CODE (*t) == LABEL_DECL && TREE_USED (*t))
/* For labels that are still used in the IL, the decision to /* For labels that are still used in the IL, the decision to
...@@ -517,7 +519,7 @@ remove_unused_scope_block_p (tree scope) ...@@ -517,7 +519,7 @@ remove_unused_scope_block_p (tree scope)
} }
for (t = &BLOCK_SUBBLOCKS (scope); *t ;) for (t = &BLOCK_SUBBLOCKS (scope); *t ;)
if (remove_unused_scope_block_p (*t)) if (remove_unused_scope_block_p (*t, global_unused_vars))
{ {
if (BLOCK_SUBBLOCKS (*t)) if (BLOCK_SUBBLOCKS (*t))
{ {
...@@ -847,9 +849,20 @@ remove_unused_locals (void) ...@@ -847,9 +849,20 @@ remove_unused_locals (void)
} }
if (dstidx != num) if (dstidx != num)
VEC_truncate (tree, cfun->local_decls, dstidx); VEC_truncate (tree, cfun->local_decls, dstidx);
/* ??? We end up with decls in referenced-vars that are not in
local-decls. */
FOR_EACH_REFERENCED_VAR (cfun, t, rvi)
if (TREE_CODE (t) == VAR_DECL
&& !VAR_DECL_IS_VIRTUAL_OPERAND (t)
&& !is_used_p (t))
remove_referenced_var (t);
remove_unused_scope_block_p (DECL_INITIAL (current_function_decl),
global_unused_vars);
BITMAP_FREE (global_unused_vars); BITMAP_FREE (global_unused_vars);
remove_unused_scope_block_p (DECL_INITIAL (current_function_decl));
if (dump_file && (dump_flags & TDF_DETAILS)) if (dump_file && (dump_flags & TDF_DETAILS))
{ {
fprintf (dump_file, "Scope blocks after cleanups:\n"); fprintf (dump_file, "Scope blocks after cleanups:\n");
......
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