On Wed, Jan 29, 2025 at 8:54 AM Andrew Pinski <quic_apin...@quicinc.com> wrote:
>
> After r15-3436-gb2b20b277988ab, poor_ifcvt_pred returns false for
> the case where the statement could trap but in this case trapping
> instructions cannot be made unconditional so it is a poor ifcvt.
>
> This fixes a small preformance regression with TSVC s258 at
> `-O3 -ftrapping-math` on aarch64 where ifcvt would not happen
> and we would still have a branch.
>
> On a specific aarch64, we go from 0.145s down to 0.118s.
>
> Bootstrapped and tested on x86_64-linux-gnu.


OK.

Thanks,
Richard.

> gcc/ChangeLog:
>
>         PR tree-optimization/118505
>         * gimple-ssa-split-paths.cc (poor_ifcvt_pred): Return
>         true for trapping statements.
>
> Signed-off-by: Andrew Pinski <quic_apin...@quicinc.com>
> ---
>  gcc/gimple-ssa-split-paths.cc | 5 +++++
>  1 file changed, 5 insertions(+)
>
> diff --git a/gcc/gimple-ssa-split-paths.cc b/gcc/gimple-ssa-split-paths.cc
> index 7c5bc1d842c..9db73fdcc6d 100644
> --- a/gcc/gimple-ssa-split-paths.cc
> +++ b/gcc/gimple-ssa-split-paths.cc
> @@ -160,6 +160,11 @@ poor_ifcvt_pred (basic_block pred, basic_block bb)
>    gimple *stmt = last_and_only_stmt (pred);
>    if (!stmt || gimple_code (stmt) != GIMPLE_ASSIGN)
>      return true;
> +
> +  /* If the statement could trap, then this is a poor ifcvt candidate. */
> +  if (gimple_could_trap_p (stmt))
> +    return true;
> +
>    tree_code code = gimple_assign_rhs_code (stmt);
>    if (poor_ifcvt_candidate_code (code))
>      return true;
> --
> 2.43.0
>

Reply via email to