From c47987fa5b5a3b1b72ef9047ebc48c0041479656 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Fri, 22 Jan 2010 20:20:51 +0100 Subject: [PATCH] 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. * 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. From-SVN: r156177 --- gcc/ChangeLog | 5 +++++ gcc/tree-into-ssa.c | 24 ++++++++++++++++++++++-- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 10a3626dedb..5c375309f8c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2010-01-22 Jakub Jelinek + + * 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. + 2010-01-22 Richard Henderson PR tree-opt/42833 diff --git a/gcc/tree-into-ssa.c b/gcc/tree-into-ssa.c index 243fe770e17..c90049ed337 100644 --- a/gcc/tree-into-ssa.c +++ b/gcc/tree-into-ssa.c @@ -1,5 +1,5 @@ /* Rewrite a program in Normal form into SSA. - Copyright (C) 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009 + Copyright (C) 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. Contributed by Diego Novillo @@ -1858,7 +1858,27 @@ maybe_register_def (def_operand_p def_p, gimple stmt, if (tracked_var) { gimple note = gimple_build_debug_bind (tracked_var, def, stmt); - gsi_insert_after (&gsi, note, GSI_SAME_STMT); + /* If stmt ends the bb, insert the debug stmt on the single + non-EH edge from the 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)) + { + gcc_assert (!ef); + ef = e; + } + gcc_assert (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); } } -- 2.30.2