From patchwork Wed Nov 24 01:24:49 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [PR,debug/46258] tree cfgcleanup BB marking vs debug stmts From: Alexandre Oliva X-Patchwork-Id: 72784 Message-Id: To: gcc-patches@gcc.gnu.org Date: Tue, 23 Nov 2010 23:24:49 -0200 When cleaning up the tree^Wtuples CFG, we will sometimes replace uses of SSA names with other values. Problem is, if the only tuples modified in a dominated block are debug stmts, there may be divergence between -g and -g0 compilations, as there was with the given testcase in the PR (from the GCC testsuite, so not included in the patch): a block visited containing a modified debug stmt was successfully simplified in the cfgcleanup loop that visits only blocks marked before. I suppose this may be exposing a weakness in our block marking strategy, for the block could have been cleaned up in both cases, and after this change, it isn't before a subsequence full cfgcleanup run. However, in this patch, I'm only addressing the -g/-g0 divergence. Regstrapped on x86_64-linux-gnu and i686-pc-linux-gnu. Ok to install? for gcc/ChangeLog from Alexandre Oliva PR debug/46258 * tree-cfg.c (replace_uses_by): Don't mark BBs as altered on debug stmts. Index: gcc/tree-cfg.c =================================================================== --- gcc/tree-cfg.c.orig 2010-11-18 10:37:23.716685868 -0200 +++ gcc/tree-cfg.c 2010-11-18 10:37:31.701412567 -0200 @@ -1570,7 +1570,7 @@ replace_uses_by (tree name, tree val) size_t i; fold_stmt_inplace (stmt); - if (cfgcleanup_altered_bbs) + if (cfgcleanup_altered_bbs && !is_gimple_debug (stmt)) bitmap_set_bit (cfgcleanup_altered_bbs, gimple_bb (stmt)->index); /* FIXME. This should go in update_stmt. */