On Tue, Nov 3, 2020 at 2:35 PM Jakub Jelinek <ja...@redhat.com> wrote:
>
> On Tue, Nov 03, 2020 at 02:27:52PM +0100, Richard Biener wrote:
> > On Fri, Oct 23, 2020 at 1:47 PM Martin Liška <mli...@suse.cz> wrote:
> > > This is a follow-up of the discussion that happened in thread about 
> > > no_stack_protector
> > > attribute: https://gcc.gnu.org/pipermail/gcc-patches/2020-May/545916.html
> > >
> > > The current optimize attribute works in the following way:
> > > - 1) we take current global_options as base
> > > - 2) maybe_default_options is called for the currently selected 
> > > optimization level, which
> > >       means all rules in default_options_table are executed
> > > - 3) attribute values are applied (via decode_options)
> > >
> > > So the step 2) is problematic: in case of -O2 -fno-omit-frame-pointer and 
> > > __attribute__((optimize("-fno-stack-protector")))
> > > ends basically with -O2 -fno-stack-protector because 
> > > -fno-omit-frame-pointer is default:
> > >      /* -O1 and -Og optimizations.  */
> > >      { OPT_LEVELS_1_PLUS, OPT_fomit_frame_pointer, NULL, 1 },
> > >
> > > My patch handled and the current optimize attribute really behaves that 
> > > same as appending attribute value
> > > to the command line. So far so good. We should also reflect that in 
> > > documentation entry which is quite
> > > vague right now:
> > >
> > > """
> > > The optimize attribute is used to specify that a function is to be 
> > > compiled with different optimization options than specified on the 
> > > command line.
> > > """
> > >
> > > and we may want to handle -Ox in the attribute in a special way. I guess 
> > > many macro/pragma users expect that
> > >
> > > -O2 -ftree-vectorize and __attribute__((optimize(1))) will end with -O1 
> > > and not
> > > with -ftree-vectorize -O1 ?
> >
> > Hmm.  I guess the only two reasonable options are to append to the active 
> > set
> > and thus end up with -ftree-vectorize -O1 or to start from an empty set and 
> > thus
> > end up with -O1.
>
> I'd say we always want to append, but only take into account explicit
> options.
> So basically get the effect of
> take the command line, append to that options from the optimize/target
> pragmas in effect and append to that options from optimize/target
> attributes and only from that figure out the implicit options.

OK, so minus target options that is what martins patch does, right?

Richard.

>         Jakub
>

Reply via email to