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 >