39 lines
1.1 KiB
Diff
39 lines
1.1 KiB
Diff
2010-01-21 Jakub Jelinek <jakub@redhat.com>
|
|
|
|
* tree-into-ssa.c (maybe_register_def): If stmt ends the bb,
|
|
insert the debug stmt on the single non-EH edge from the stmt.
|
|
|
|
--- gcc/tree-into-ssa.c.jj 2010-01-21 09:58:38.000000000 +0100
|
|
+++ gcc/tree-into-ssa.c 2010-01-21 12:25:22.000000000 +0100
|
|
@@ -1968,7 +1968,29 @@ maybe_register_def (def_operand_p def_p,
|
|
if (tracked_var)
|
|
{
|
|
gimple note = gimple_build_debug_bind (tracked_var, def, stmt);
|
|
- gsi_insert_after (&gsi, note, GSI_SAME_STMT);
|
|
+ if (gsi_one_before_end_p (gsi) && stmt_ends_bb_p (stmt))
|
|
+ {
|
|
+ basic_block bb = gsi_bb (gsi);
|
|
+ edge_iterator ei;
|
|
+ edge e, ef = NULL;
|
|
+ FOR_EACH_EDGE (e, ei, bb->succs)
|
|
+ if (!(e->flags & EDGE_EH))
|
|
+ {
|
|
+ if (ef)
|
|
+ {
|
|
+ ef = NULL;
|
|
+ break;
|
|
+ }
|
|
+ ef = e;
|
|
+ }
|
|
+ if (ef
|
|
+ && single_pred_p (ef->dest)
|
|
+ && !phi_nodes (ef->dest)
|
|
+ && ef->dest != EXIT_BLOCK_PTR)
|
|
+ gsi_insert_on_edge_immediate (ef, note);
|
|
+ }
|
|
+ else
|
|
+ gsi_insert_after (&gsi, note, GSI_SAME_STMT);
|
|
}
|
|
}
|
|
|