Commit ec8c1492 by Jakub Jelinek Committed by Jakub Jelinek

re PR debug/50317 (missing DW_OP_GNU_implicit_pointer)

	PR debug/50317
	* tree-ssa-dce.c (remove_dead_stmt): Add a debug stmt when removing
	as unnecessary a store to a variable with gimple reg type.
	* tree-ssa-live.c (remove_unused_locals): Clear TREE_ADDRESSABLE bit
	on local unreferenced variables.
	* cfgexpand.c (expand_gimple_basic_block): Don't emit DEBUG_INSNs
	for !target_for_debug_bind variables.

From-SVN: r181890
parent e4118500
2011-12-01 Jakub Jelinek <jakub@redhat.com>
PR debug/50317
* tree-ssa-dce.c (remove_dead_stmt): Add a debug stmt when removing
as unnecessary a store to a variable with gimple reg type.
* tree-ssa-live.c (remove_unused_locals): Clear TREE_ADDRESSABLE bit
on local unreferenced variables.
* cfgexpand.c (expand_gimple_basic_block): Don't emit DEBUG_INSNs
for !target_for_debug_bind variables.
2011-12-01 Patrick Marlier <patrick.marlier@gmail.com> 2011-12-01 Patrick Marlier <patrick.marlier@gmail.com>
PR middle-end/51273 PR middle-end/51273
...@@ -3903,6 +3903,11 @@ expand_gimple_basic_block (basic_block bb) ...@@ -3903,6 +3903,11 @@ expand_gimple_basic_block (basic_block bb)
rtx val; rtx val;
enum machine_mode mode; enum machine_mode mode;
if (TREE_CODE (var) != DEBUG_EXPR_DECL
&& TREE_CODE (var) != LABEL_DECL
&& !target_for_debug_bind (var))
goto delink_debug_stmt;
if (gimple_debug_bind_has_value_p (stmt)) if (gimple_debug_bind_has_value_p (stmt))
value = gimple_debug_bind_get_value (stmt); value = gimple_debug_bind_get_value (stmt);
else else
...@@ -3932,6 +3937,7 @@ expand_gimple_basic_block (basic_block bb) ...@@ -3932,6 +3937,7 @@ expand_gimple_basic_block (basic_block bb)
PAT_VAR_LOCATION_LOC (val) = (rtx)value; PAT_VAR_LOCATION_LOC (val) = (rtx)value;
} }
delink_debug_stmt:
/* In order not to generate too many debug temporaries, /* In order not to generate too many debug temporaries,
we delink all uses of debug statements we already expanded. we delink all uses of debug statements we already expanded.
Therefore debug statements between definition and real Therefore debug statements between definition and real
......
...@@ -1215,6 +1215,26 @@ remove_dead_stmt (gimple_stmt_iterator *i, basic_block bb) ...@@ -1215,6 +1215,26 @@ remove_dead_stmt (gimple_stmt_iterator *i, basic_block bb)
ei_next (&ei); ei_next (&ei);
} }
/* If this is a store into a variable that is being optimized away,
add a debug bind stmt if possible. */
if (MAY_HAVE_DEBUG_STMTS
&& gimple_assign_single_p (stmt)
&& is_gimple_val (gimple_assign_rhs1 (stmt)))
{
tree lhs = gimple_assign_lhs (stmt);
if ((TREE_CODE (lhs) == VAR_DECL || TREE_CODE (lhs) == PARM_DECL)
&& !DECL_IGNORED_P (lhs)
&& is_gimple_reg_type (TREE_TYPE (lhs))
&& !is_global_var (lhs)
&& !DECL_HAS_VALUE_EXPR_P (lhs))
{
tree rhs = gimple_assign_rhs1 (stmt);
gimple note
= gimple_build_debug_bind (lhs, unshare_expr (rhs), stmt);
gsi_insert_after (i, note, GSI_SAME_STMT);
}
}
unlink_stmt_vdef (stmt); unlink_stmt_vdef (stmt);
gsi_remove (i, true); gsi_remove (i, true);
release_defs (stmt); release_defs (stmt);
......
/* Liveness for SSA trees. /* Liveness for SSA trees.
Copyright (C) 2003, 2004, 2005, 2007, 2008, 2009, 2010 Copyright (C) 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011
Free Software Foundation, Inc. Free Software Foundation, Inc.
Contributed by Andrew MacLeod <amacleod@redhat.com> Contributed by Andrew MacLeod <amacleod@redhat.com>
...@@ -814,7 +814,15 @@ remove_unused_locals (void) ...@@ -814,7 +814,15 @@ remove_unused_locals (void)
bitmap_set_bit (global_unused_vars, DECL_UID (var)); bitmap_set_bit (global_unused_vars, DECL_UID (var));
} }
else else
continue; {
/* For unreferenced local vars drop TREE_ADDRESSABLE
bit in case it is referenced from debug stmts. */
if (DECL_CONTEXT (var) == current_function_decl
&& TREE_ADDRESSABLE (var)
&& is_gimple_reg_type (TREE_TYPE (var)))
TREE_ADDRESSABLE (var) = 0;
continue;
}
} }
else if (TREE_CODE (var) == VAR_DECL else if (TREE_CODE (var) == VAR_DECL
&& DECL_HARD_REGISTER (var) && DECL_HARD_REGISTER (var)
......
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