On Mon, May 25, 2020 at 11:27 AM Martin Liška <mli...@suse.cz> wrote:
>
> On 5/22/20 12:51 PM, Richard Biener wrote:
> > On Thu, May 21, 2020 at 12:09 PM Martin Liška <mli...@suse.cz> wrote:
> >>
> >> On 5/18/20 1:49 PM, Richard Biener wrote:
> >>> On Mon, May 18, 2020 at 1:10 PM Jakub Jelinek via Gcc-patches
> >>> <gcc-patches@gcc.gnu.org> wrote:
> >>>>
> >>>> On Mon, May 18, 2020 at 01:03:40PM +0200, Jakub Jelinek wrote:
> >>>>>> The optimize attribute is used to specify that a function is to be 
> >>>>>> compiled
> >>>>>> with different optimization options than specified on the command line.
> >>>>>> ```
> >>>>>>
> >>>>>> It's pretty clear about the command line arguments (that are ignored).
> >>>>>
> >>>>> That is not clear at all.  The difference is primarily in what the 
> >>>>> option
> >>>>> string says in there.
> >>>>
> >>>> And if we decide we want to keep existing behavior (haven't checked if we
> >>>> actually behave that way yet), we should add some syntax that will allow
> >>>> ammending command line options rather than replacing it.
> >>
> >> Hello.
> >>
> >> Back to this, I must say that option handling is a complex thing in the 
> >> GCC.
> >>
> >>>
> >>> We do behave this way - while we're running against the current
> >>> gcc_options we call decode_options which first does
> >>> default_options_optimization.  So it behaves inconsistently with
> >>> respect to options not explicitly listed in default_options_table.
> >>
> >> Yes, we basically build on top of the currently selection flags.
> >> We use default_options_table because any optimization level selection
> >> in an optimization attribute should efficiently enforce call of 
> >> default_options_table.
> >>
> >> What about using them only in case one changes optimization level (patch)?
> >
> > I'm not sure if that works, no -On means -O0, so one might interpret
> > optimize("omit-frame-pointer") as -O0 -fomit-frame-pointer.   Also -On
> > are not treated in position dependent way, thus -fno-tree-pre -O2 is
> > the same as -O2 -fno-tree-pre rather than re-enabling PRE over 
> > -fno-tree-pre.
> > So your patch would turn a -O2 -fno-tree-pre invocation, when
> > optimize("O3") is encountered, to one with PRE enabled, not matching
> > behavior of -O2 -fno-tree-pre -O3.
> >
> > I think the only sensible way is to save the original decoded options
> > from the gcc invocation (and have #pragma optimize push/pop append
> > accordingly) and append the current attribute/pragmas optimization
> > string to them and run that whole thing on a default option state.
>
> That should work. Anyway, that's a task with unclear finish.
> Would it be possible to add the no_stack_protect attribute for the time being?

I think it's a reasonable request, yes.

Richard.

> The limitation is there for ages and we have another "optimize" attributes
> that can be theoretically replaced with proper optimize handling.
>
> >
> > That makes semantics equivalent to appending more options to the
> > command-line.  Well, hopefully.  Interaction with the target attribute
> > might be interesting (that likely also needs to append to that
> > "current decoded options" set).
>
> I fear from the interaction of optimization and target attribute.
>
> >
> > As you say, option handling is difficult.
>
> Anyway, I'm planning to work on the options in stage1. It's quite close
> relative to PR92860.
>
> Martin
>
> >
> > Richard.
> >
> >> Martin
> >>
> >>>
> >>> But I also think doing the whole processing as in decode_options
> >>> is the only thing that's really tested.  And a fix would be to not
> >>> start from the current set of options but from a clean slate...
> >>>
> >>> The code clearly thinks we're doing incremental changes:
> >>>
> >>>         /* Save current options.  */
> >>>         cl_optimization_save (&cur_opts, &global_options);
> >>>
> >>>         /* If we previously had some optimization options, use them as the
> >>>            default.  */
> >>>         if (old_opts)
> >>>           cl_optimization_restore (&global_options,
> >>>                                    TREE_OPTIMIZATION (old_opts));
> >>>
> >>>         /* Parse options, and update the vector.  */
> >>>         parse_optimize_options (args, true);
> >>>         DECL_FUNCTION_SPECIFIC_OPTIMIZATION (*node)
> >>>           = build_optimization_node (&global_options);
> >>>
> >>>         /* Restore current options.  */
> >>>         cl_optimization_restore (&global_options, &cur_opts);
> >>>
> >>> so for example you should see -fipa-pta preserved from the
> >>> command-line while -fno-tree-pta would be overridden even
> >>> if not mentioned explicitely in the optimize attribute.
> >>>
> >>> IMHO the current situation is far from useful...
> >>>
> >>> Richard.
> >>>
> >>>> Could be say start the optimize attribute string with + or something
> >>>> similar.
> >>>> Does target attribute behave that way too?
> >>>>
> >>>>           Jakub
> >>>>
> >>
>

Reply via email to