On Sat, Oct 21, 2023 at 9:17 AM Alexandre Oliva <ol...@adacore.com> wrote: > > On Oct 20, 2023, Richard Biener <richard.guent...@gmail.com> wrote: > > >> * tree-eh.h (make_eh_edges): Rename to... > >> (make_eh_edge): ... this. > >> * tree-eh.cc: Likewise. Adjust all callers. > > Once the above goes in (it depends on the strub monster patch), the > following one should apply as well. Regstrapped on x86_64-linux-gnu. > Ok to install?
OK. > Set execution count of EH blocks, and probability of EH edges. > > > for gcc/ChangeLog > > PR tree-optimization/111520 > * gimple-harden-conditionals.cc > (pass_harden_compares::execute): Set EH edge probability and > EH block execution count. > > for gcc/testsuite/ChangeLog > > PR tree-optimization/111520 > * g++.dg/torture/harden-comp-pr111520.cc: New. > --- > gcc/gimple-harden-conditionals.cc | 12 +++++++++++- > .../g++.dg/torture/harden-comp-pr111520.cc | 17 +++++++++++++++++ > 2 files changed, 28 insertions(+), 1 deletion(-) > create mode 100644 gcc/testsuite/g++.dg/torture/harden-comp-pr111520.cc > > diff --git a/gcc/gimple-harden-conditionals.cc > b/gcc/gimple-harden-conditionals.cc > index 1999e827a04ca..bded288985063 100644 > --- a/gcc/gimple-harden-conditionals.cc > +++ b/gcc/gimple-harden-conditionals.cc > @@ -580,11 +580,21 @@ pass_harden_compares::execute (function *fun) > if (throwing_compare_p) > { > add_stmt_to_eh_lp (asgnck, lookup_stmt_eh_lp (asgn)); > - make_eh_edge (asgnck); > + edge eh = make_eh_edge (asgnck); > + /* This compare looks like it could raise an exception, > + but it's dominated by the original compare, that > + would raise an exception first, so the EH edge from > + this one is never really taken. */ > + eh->probability = profile_probability::never (); > + if (eh->dest->count.initialized_p ()) > + eh->dest->count += eh->count (); > + else > + eh->dest->count = eh->count (); > > edge ckeh; > basic_block nbb = split_edge (non_eh_succ_edge > (gimple_bb (asgnck), &ckeh)); > + gcc_checking_assert (eh == ckeh); > gsi_split = gsi_start_bb (nbb); > > if (dump_file) > diff --git a/gcc/testsuite/g++.dg/torture/harden-comp-pr111520.cc > b/gcc/testsuite/g++.dg/torture/harden-comp-pr111520.cc > new file mode 100644 > index 0000000000000..b4381b4d84ec4 > --- /dev/null > +++ b/gcc/testsuite/g++.dg/torture/harden-comp-pr111520.cc > @@ -0,0 +1,17 @@ > +/* { dg-do compile } */ > +/* { dg-options "-fharden-compares -fsignaling-nans -fnon-call-exceptions" } > */ > + > +struct S > +{ > + S (bool); > + ~S (); > +}; > + > +float f; > + > +void > +foo () > +{ > + S a = 0; > + S b = f; > +} > > > -- > Alexandre Oliva, happy hacker https://FSFLA.org/blogs/lxo/ > Free Software Activist GNU Toolchain Engineer > More tolerance and less prejudice are key for inclusion and diversity > Excluding neuro-others for not behaving ""normal"" is *not* inclusive