The attached patch contains 3 minor tweaks:
1. Jeff moved a dump message in cfg_layout_redirect_edge_and_branch up to
before the call to redirect_edge_succ_nodup. So the "redirected" is not fully
true anymore and can be confusing since the call to redirect_edge_succ_nodup
can dump messages too. Changed to "redirecting" like a few lines above.
2. regcprop.c tests MAY_HAVE_DEBUG_STMTS. Now this is a RTL pass so the most
correct incantation is MAY_HAVE_DEBUG_INSNS.
3. remove_forwarder_block attempts to move debug statements. There is no
need to do it when !MAY_HAVE_DEBUG_STMTS.
Tested on i586-suse-linux, applied on the mainline as obvious.
2011-05-13 Eric Botcazou <[email protected]>
* cfgrtl.c (cfg_layout_redirect_edge_and_branch): Adjust dump message.
* regcprop.c (copyprop_hardreg_forward): Test MAY_HAVE_DEBUG_INSNS in
lieu of MAY_HAVE_DEBUG_STMTS.
* tree-cfgcleanup.c (remove_forwarder_block): Do not attempt to move
debug statements if !MAY_HAVE_DEBUG_STMTS.
--
Eric Botcazou
Index: cfgrtl.c
===================================================================
--- cfgrtl.c (revision 173693)
+++ cfgrtl.c (working copy)
@@ -2608,7 +2608,7 @@ cfg_layout_redirect_edge_and_branch (edg
delete_insn (BB_END (src));
}
if (dump_file)
- fprintf (dump_file, "Fallthru edge %i->%i redirected to %i\n",
+ fprintf (dump_file, "Redirecting fallthru edge %i->%i to %i\n",
e->src->index, e->dest->index, dest->index);
ret = redirect_edge_succ_nodup (e, dest);
}
Index: regcprop.c
===================================================================
--- regcprop.c (revision 173693)
+++ regcprop.c (working copy)
@@ -990,7 +990,7 @@ copyprop_hardreg_forward (void)
visited = sbitmap_alloc (last_basic_block);
sbitmap_zero (visited);
- if (MAY_HAVE_DEBUG_STMTS)
+ if (MAY_HAVE_DEBUG_INSNS)
debug_insn_changes_pool
= create_alloc_pool ("debug insn changes pool",
sizeof (struct queued_debug_insn_change), 256);
@@ -1029,7 +1029,7 @@ copyprop_hardreg_forward (void)
copyprop_hardreg_forward_1 (bb, all_vd + bb->index);
}
- if (MAY_HAVE_DEBUG_STMTS)
+ if (MAY_HAVE_DEBUG_INSNS)
{
FOR_EACH_BB (bb)
if (TEST_BIT (visited, bb->index)
Index: tree-cfgcleanup.c
===================================================================
--- tree-cfgcleanup.c (revision 173693)
+++ tree-cfgcleanup.c (working copy)
@@ -420,7 +420,7 @@ remove_forwarder_block (basic_block bb)
}
}
- can_move_debug_stmts = single_pred_p (dest);
+ can_move_debug_stmts = MAY_HAVE_DEBUG_STMTS && single_pred_p (dest);
/* Redirect the edges. */
for (ei = ei_start (bb->preds); (e = ei_safe_edge (ei)); )
@@ -476,8 +476,7 @@ remove_forwarder_block (basic_block bb)
gsi_next (&gsi);
}
- /* Move debug statements if the destination has just a single
- predecessor. */
+ /* Move debug statements if the destination has a single predecessor. */
if (can_move_debug_stmts)
{
gsi_to = gsi_after_labels (dest);