From c32f25b88513490bdefa864117808f7cbc84c0a0 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Mon, 28 Nov 2011 22:04:45 +0100 Subject: [PATCH] re PR debug/50317 (missing DW_OP_GNU_implicit_pointer) PR debug/50317 * tree-ssa.c (execute_update_addresses_taken): Remove var ={v} {CLOBBER} stmts instead of rewriting them into var_N ={v} {CLOBBER}. From-SVN: r181788 --- gcc/ChangeLog | 5 +++++ gcc/tree-ssa.c | 16 +++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8b978c0364ef..2910e81128e8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,10 @@ 2011-11-28 Jakub Jelinek <jakub@redhat.com> + PR debug/50317 + * tree-ssa.c (execute_update_addresses_taken): Remove + var ={v} {CLOBBER} stmts instead of rewriting them into + var_N ={v} {CLOBBER}. + PR middle-end/50907 * function.c (convert_jumps_to_returns): When redirecting an edge succ to EXIT_BLOCK_PTR, clear EDGE_CROSSING flag. diff --git a/gcc/tree-ssa.c b/gcc/tree-ssa.c index 8f73d9176f2d..97857217ce7d 100644 --- a/gcc/tree-ssa.c +++ b/gcc/tree-ssa.c @@ -2118,7 +2118,7 @@ execute_update_addresses_taken (void) if (update_vops) { FOR_EACH_BB (bb) - for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi)) + for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi);) { gimple stmt = gsi_stmt (gsi); @@ -2159,6 +2159,18 @@ execute_update_addresses_taken (void) if (gimple_assign_lhs (stmt) != lhs) gimple_assign_set_lhs (stmt, lhs); + /* For var ={v} {CLOBBER}; where var lost + TREE_ADDRESSABLE just remove the stmt. */ + if (DECL_P (lhs) + && TREE_CLOBBER_P (rhs) + && symbol_marked_for_renaming (lhs)) + { + unlink_stmt_vdef (stmt); + gsi_remove (&gsi, true); + release_defs (stmt); + continue; + } + if (gimple_assign_rhs1 (stmt) != rhs) { gimple_stmt_iterator gsi = gsi_for_stmt (stmt); @@ -2205,6 +2217,8 @@ execute_update_addresses_taken (void) if (gimple_references_memory_p (stmt) || is_gimple_debug (stmt)) update_stmt (stmt); + + gsi_next (&gsi); } /* Update SSA form here, we are called as non-pass as well. */ -- GitLab