On Tue, May 13, 2025 at 7:23 PM Andrew Pinski <quic_apin...@quicinc.com> wrote: > > When moving the optimize_memcpy_to_memset optimization to forwprop from > fold_stmt, the marking > of the bb to purge for eh cleanup was not happening for the local > optimizations but only after > the fold_stmt, this causes g++.dg/torture/except-2.C to fail. > So this patch moves the marking of the bbs for cleanups after the local > forwprop optimizations > instead of before. > > There was already code to add to to_purge after > forward_propagate_into_comparison and removes > that as it is now redundant.
OK > gcc/ChangeLog: > > * tree-ssa-forwprop.cc (pass_forwprop::execute): Move marking of > to_purge bb > and marking of fixup statements to after the local optimizations. > > Signed-off-by: Andrew Pinski <quic_apin...@quicinc.com> > --- > gcc/tree-ssa-forwprop.cc | 24 ++++++++++++------------ > 1 file changed, 12 insertions(+), 12 deletions(-) > > diff --git a/gcc/tree-ssa-forwprop.cc b/gcc/tree-ssa-forwprop.cc > index bcdec1aadc3..4ec5b6a6ba1 100644 > --- a/gcc/tree-ssa-forwprop.cc > +++ b/gcc/tree-ssa-forwprop.cc > @@ -4497,6 +4497,8 @@ pass_forwprop::execute (function *fun) > } > } > } > + if (substituted_p) > + update_stmt (stmt); > if (substituted_p > && is_gimple_assign (stmt) > && gimple_assign_rhs_code (stmt) == ADDR_EXPR) > @@ -4536,17 +4538,7 @@ pass_forwprop::execute (function *fun) > && !SSA_NAME_IS_DEFAULT_DEF (use)) > bitmap_set_bit (simple_dce_worklist, > SSA_NAME_VERSION (use)); > - } > - > - if (changed || substituted_p) > - { > - if (maybe_clean_or_replace_eh_stmt (orig_stmt, stmt)) > - bitmap_set_bit (to_purge, bb->index); > - if (!was_noreturn > - && is_gimple_call (stmt) && gimple_call_noreturn_p > (stmt)) > - to_fixup.safe_push (stmt); > update_stmt (stmt); > - substituted_p = false; > } > > switch (gimple_code (stmt)) > @@ -4560,8 +4552,6 @@ pass_forwprop::execute (function *fun) > { > int did_something; > did_something = forward_propagate_into_comparison > (&gsi); > - if (maybe_clean_or_replace_eh_stmt (stmt, gsi_stmt > (gsi))) > - bitmap_set_bit (to_purge, bb->index); > if (did_something == 2) > cfg_changed = true; > changed |= did_something != 0; > @@ -4613,6 +4603,16 @@ pass_forwprop::execute (function *fun) > default:; > } > > + if (changed || substituted_p) > + { > + substituted_p = false; > + stmt = gsi_stmt (gsi); > + if (maybe_clean_or_replace_eh_stmt (orig_stmt, stmt)) > + bitmap_set_bit (to_purge, bb->index); > + if (!was_noreturn > + && is_gimple_call (stmt) && gimple_call_noreturn_p > (stmt)) > + to_fixup.safe_push (stmt); > + } > if (changed) > { > /* If the stmt changed then re-visit it and the statements > -- > 2.43.0 >