Hi, On Fri, Nov 12 2021, Martin Jambor wrote: > Hi, > > using -fno-semantic-interposition has been reported by various people > to bring about considerable speed up at the cost of strict compliance > to the ELF symbol interposition rules See for example > https://fedoraproject.org/wiki/Changes/PythonNoSemanticInterpositionSpeedup > > As such I believe it should be implied by our -Ofast optimization > level, not only so that benchmarks that can benefit run faster, but > also so that people looking at -Ofast documentation for options that > could speed their programs find it. > > I have verified that with the following patch IPA-CP sees > flag_semantic_interposition set to zero at Ofast and that info and pdf > manual builds fine with the documentation change. I am bootstrapping > and testing it now in order to comply with submission criteria but I > don't think an Ofast change gets much tested. > > Assuming it passes, is the patch OK? (If it is, I will also add a note > about it in the "Caveats" section in gcc-12/changes.html of wwwdocs > after I commit the patch.) >
Unfortunately, I was wrong, there are testcases which use the optimize attribute to switch a function to Ofast and those ICE because -fsemantic-interposition is not an optimization flag and only optimization flags can change in an optimize attribute (AFAIK, I only had a quick glance at the results). I am not sure what is the right way to tackle this, whether to set the flag at Ofast in some nonstandard way or make the flag an optimization flag - probably affecting function definitions, having it affect call-sites seems too fine-grained. I will try to discuss this on IRC on Monday (and hope such change is still doable early stage3). Sorry for posting this a bit prematurely, Martin > > > gcc/ChangeLog: > > 2021-11-12 Martin Jambor <mjam...@suse.cz> > > * opts.c (default_options_table): Switch off > flag_semantic_interposition at Ofast. > * doc/invoke.texi (Optimize Options): Document that Ofast switches off > -fsemantic-interposition. > --- > gcc/doc/invoke.texi | 1 + > gcc/opts.c | 1 + > 2 files changed, 2 insertions(+) > > diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi > index 2ea23d07c4c..fd16c91aec8 100644 > --- a/gcc/doc/invoke.texi > +++ b/gcc/doc/invoke.texi > @@ -10551,6 +10551,7 @@ valid for all standard-compliant programs. > It turns on @option{-ffast-math}, @option{-fallow-store-data-races} > and the Fortran-specific @option{-fstack-arrays}, unless > @option{-fmax-stack-var-size} is specified, and @option{-fno-protect-parens}. > +It turns off @option {-fsemantic-interposition}. > > @item -Og > @opindex Og > diff --git a/gcc/opts.c b/gcc/opts.c > index caed6255500..3da53d8f890 100644 > --- a/gcc/opts.c > +++ b/gcc/opts.c > @@ -682,6 +682,7 @@ static const struct default_options > default_options_table[] = > /* -Ofast adds optimizations to -O3. */ > { OPT_LEVELS_FAST, OPT_ffast_math, NULL, 1 }, > { OPT_LEVELS_FAST, OPT_fallow_store_data_races, NULL, 1 }, > + { OPT_LEVELS_FAST, OPT_fsemantic_interposition, NULL, 0 }, > > { OPT_LEVELS_NONE, 0, NULL, 0 } > }; > -- > 2.33.0