On Sun, Nov 16, 2025 at 6:24 AM Andrew Pinski
<[email protected]> wrote:
>
> This just adds a simple stats recording. Main reason is that I want to find
> out if we can remove one of the mergephi now.
>
> Bootstrapped and tested on x86_64-linux-gnu.

OK.

> gcc/ChangeLog:
>
>         * tree-cfgcleanup.cc (pass_merge_phi::execute): Add stats for the 
> removed
>         blocks.
>
> Signed-off-by: Andrew Pinski <[email protected]>
> ---
>  gcc/tree-cfgcleanup.cc | 8 +++++---
>  1 file changed, 5 insertions(+), 3 deletions(-)
>
> diff --git a/gcc/tree-cfgcleanup.cc b/gcc/tree-cfgcleanup.cc
> index ac1394ac1d4..9397031b225 100644
> --- a/gcc/tree-cfgcleanup.cc
> +++ b/gcc/tree-cfgcleanup.cc
> @@ -1369,10 +1369,10 @@ public:
>  unsigned int
>  pass_merge_phi::execute (function *fun)
>  {
> +  int forwarder_removed = 0;
>    calculate_dominance_info (CDI_DOMINATORS);
>
>    /* Find all PHI nodes that we may be able to merge.  */
> -  bool changed = false;
>    unsigned n = last_basic_block_for_fn (fun);
>    for (unsigned i = NUM_FIXED_BLOCKS; i < n; i++)
>      {
> @@ -1383,15 +1383,17 @@ pass_merge_phi::execute (function *fun)
>        /* Look for a forwarder block with PHI nodes.  */
>        if (tree_forwarder_block_p (bb)
>           && remove_forwarder_block (bb, true))
> -       changed = true;
> +       forwarder_removed++;
>      }
>
>    /* Removing forwarder blocks can cause formerly irreducible loops
>       to become reducible if we merged two entry blocks.  */
> -  if (changed
> +  if (forwarder_removed != 0
>        && current_loops)
>      loops_state_set (LOOPS_NEED_FIXUP);
>
> +  statistics_counter_event (fun, "Forwarder blocks removed",
> +                           forwarder_removed);
>    return 0;
>  }
>
> --
> 2.43.0
>

Reply via email to