public inbox for gcc-cvs@sourceware.org help / color / mirror / Atom feed
From: Richard Biener <rguenth@gcc.gnu.org> To: gcc-cvs@gcc.gnu.org Subject: [gcc r13-2263] Use reachability analysis to improve uninit diagnostic Date: Tue, 30 Aug 2022 08:37:10 +0000 (GMT) [thread overview] Message-ID: <20220830083710.516B73AA8008@sourceware.org> (raw) https://gcc.gnu.org/g:f71abacfed170852ab25485e5c52f8d5aad7c2a0 commit r13-2263-gf71abacfed170852ab25485e5c52f8d5aad7c2a0 Author: Richard Biener <rguenther@suse.de> Date: Fri Aug 19 15:11:14 2022 +0200 Use reachability analysis to improve uninit diagnostic This patch does what the comment in uninit diagnostic suggests. When the value-numbering run done without optimizing figures there's a fallthru path, consider blocks on it as always executed. * tree-ssa-uninit.cc (warn_uninitialized_vars): Pre-compute the set of fallthru reachable blocks from function entry and use that to determine wlims.always_executed. Diff: --- gcc/tree-ssa-uninit.cc | 47 ++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 38 insertions(+), 9 deletions(-) diff --git a/gcc/tree-ssa-uninit.cc b/gcc/tree-ssa-uninit.cc index 0bd567f237c..c25fbe6381e 100644 --- a/gcc/tree-ssa-uninit.cc +++ b/gcc/tree-ssa-uninit.cc @@ -988,10 +988,43 @@ warn_uninitialized_vars (bool wmaybe_uninit) wlimits wlims = { }; wlims.wmaybe_uninit = wmaybe_uninit; - gimple_stmt_iterator gsi; - basic_block bb; + auto_bb_flag ft_reachable (cfun); + + /* Mark blocks that are always executed when we ignore provably + not executed edges. */ + basic_block bb = single_succ (ENTRY_BLOCK_PTR_FOR_FN (cfun)); + while (!(bb->flags & ft_reachable)) + { + bb->flags |= ft_reachable; + /* Find a single executable edge. */ + edge_iterator ei; + edge e, ee = NULL; + FOR_EACH_EDGE (e, ei, bb->succs) + if (e->flags & EDGE_EXECUTABLE) + { + if (!ee) + ee = e; + else + { + ee = NULL; + break; + } + } + if (ee) + bb = ee->dest; + else + { + bb = get_immediate_dominator (CDI_POST_DOMINATORS, bb); + if (!bb || bb->index == EXIT_BLOCK) + break; + } + } + FOR_EACH_BB_FN (bb, cfun) { + wlims.always_executed = (bb->flags & ft_reachable); + bb->flags &= ~ft_reachable; + edge_iterator ei; edge e; FOR_EACH_EDGE (e, ei, bb->preds) @@ -1002,14 +1035,10 @@ warn_uninitialized_vars (bool wmaybe_uninit) if (!e) continue; - basic_block succ = single_succ (ENTRY_BLOCK_PTR_FOR_FN (cfun)); - /* ??? This could be improved when we use a greedy walk and have - some edges marked as not executable. */ - wlims.always_executed = dominated_by_p (CDI_POST_DOMINATORS, succ, bb); - if (wlims.always_executed) warn_uninit_phi_uses (bb); + gimple_stmt_iterator gsi; for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi)) { gimple *stmt = gsi_stmt (gsi); @@ -1030,7 +1059,7 @@ warn_uninitialized_vars (bool wmaybe_uninit) FOR_EACH_SSA_USE_OPERAND (use_p, stmt, op_iter, SSA_OP_USE) { /* BIT_INSERT_EXPR first operand should not be considered - a use for the purpose of uninit warnings. */ + a use for the purpose of uninit warnings. */ if (gassign *ass = dyn_cast <gassign *> (stmt)) { if (gimple_assign_rhs_code (ass) == BIT_INSERT_EXPR @@ -1041,7 +1070,7 @@ warn_uninitialized_vars (bool wmaybe_uninit) if (wlims.always_executed) warn_uninit (OPT_Wuninitialized, use, SSA_NAME_VAR (use), stmt); - else if (wmaybe_uninit) + else if (wlims.wmaybe_uninit) warn_uninit (OPT_Wmaybe_uninitialized, use, SSA_NAME_VAR (use), stmt); }
reply other threads:[~2022-08-30 8:37 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20220830083710.516B73AA8008@sourceware.org \ --to=rguenth@gcc.gnu.org \ --cc=gcc-cvs@gcc.gnu.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).