From: Andrew Pinski Date: Wed, 12 Nov 2025 00:47:04 +0000 (-0800) Subject: cfgcleanup: forwarder block, ignore bbs which merge with the predecessor X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=40c037adb367f9ab8ead1be2e4142a8447f22d13;p=thirdparty%2Fgcc.git cfgcleanup: forwarder block, ignore bbs which merge with the predecessor While moving mergephi's forwarder block removal over to cfgcleanup, I noticed a few regressions due to removal of a forwarder block (correctly) but the counts were not updated, instead let these blocks be handled by the merge_blocks cleanup code. gcc/ChangeLog: * tree-cfgcleanup.cc (tree_forwarder_block_p): Reject bb which has a single predecessor which has a single successor. Signed-off-by: Andrew Pinski --- diff --git a/gcc/tree-cfgcleanup.cc b/gcc/tree-cfgcleanup.cc index 9f526492b72..cc0838d8c4c 100644 --- a/gcc/tree-cfgcleanup.cc +++ b/gcc/tree-cfgcleanup.cc @@ -425,6 +425,13 @@ tree_forwarder_block_p (basic_block bb, bool phi_wanted) return false; } + /* If this bb has a single predecessor and that predecssor + has a single successor, this bb will be merged with the + predecessor so ignore it for removing of the forwarder block. */ + if (single_pred_p (bb) + && single_succ_p (single_pred_edge (bb)->src)) + return false; + basic_block dest = single_succ_edge (bb)->dest; /* Now walk through the statements backward. We can ignore labels,