From 40c037adb367f9ab8ead1be2e4142a8447f22d13 Mon Sep 17 00:00:00 2001 From: Andrew Pinski Date: Tue, 11 Nov 2025 16:47:04 -0800 Subject: [PATCH] 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 --- gcc/tree-cfgcleanup.cc | 7 +++++++ 1 file changed, 7 insertions(+) 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, -- 2.47.3