On Wed, May 12, 2021 at 11:10 AM Martin Liška <mli...@suse.cz> wrote:
>
> May I please ping this Richi?

OK.

Thanks,
Richard.



> Thanks,
> Martin
>
> On 4/22/21 4:30 PM, Martin Liška wrote:
> > On 4/22/21 2:47 PM, Richard Biener wrote:
> >> On Thu, Apr 22, 2021 at 2:21 PM Martin Liška <mli...@suse.cz> wrote:
> >>>
> >>> On 4/22/21 1:19 PM, Richard Biener wrote:
> >>>> On Thu, Apr 22, 2021 at 11:02 AM Martin Liška <mli...@suse.cz> wrote:
> >>>>>
> >>>>> On 4/22/21 10:04 AM, Richard Biener wrote:
> >>>>>> On Wed, Apr 21, 2021 at 3:08 PM Martin Liška <mli...@suse.cz> wrote:
> >>>>>>>
> >>>>>>> When -flto=jobserver is used and we cannot detect job server, then we 
> >>>>>>> can
> >>>>>>> still fallbackto -flto=N mode.
> >>>>>>>
> >>>>>>> Patch can bootstrap on x86_64-linux-gnu and survives regression tests.
> >>>>>>>
> >>>>>>> Ready to be installed?
> >>>>>>
> >>>>>> I think this behavior needs to be documented - it falls back to a less
> >>>>>> conservative (possibly system overloading) mode - which IMHO is
> >>>>>> non-obvious and IMHO we shouldn't do.
> >>>>>
> >>>>> Sure, I'm sending corresponding patch. Note that it's quite common 
> >>>>> mistake
> >>>>> that '+' is missing in Makefile rule. That was motivation for my change.
> >>>>
> >>>> Sure, but that change won't get this fixed.
> >>>
> >>> It will as linker command line will contain (-flto=jobserver) and LTO 
> >>> will fallback to -flto=N.
> >>>
> >>>> IMHO we should eventually
> >>>> emit diagnostic like
> >>>>
> >>>> warning: could not find jobserver, compiling N jobs serially
> >>>>
> >>>> once N > 1 (or 2?).
> >>>
> >>> We do that now (for all N):
> >>> lto-wrapper: warning: jobserver is not available: ‘MAKEFLAGS’ environment 
> >>> variable is unset
> >>>
> >>>
> >>>> Likewise if people just use -flto and auto-detection
> >>>> finds nothing:
> >>>
> >>> -flto != -flto=auto
> >>>
> >>> Yes, -flto is a serial linking and we can emit a warning.
> >>
> >> I'd avoid warning if there's just a single ltrans unit.
> >
> > That's doable and I've just done that in the attached patch.
> > Two disadvantages:
> > - one needs waiting for the warning after WPA
> > - source change (>1 LTRANS) can trigger the warning
> >
> >>
> >>>> warning: using serial compilation of N LTRANS jobs
> >>>> note: refer to http://.... for how to use parallel compile
> >>>>
> >>>> using the URL diagnostics to point to -flto=... documentation.
> >>>
> >>> What about making that a proper warning (-Wlto)? We have diagnostics 
> >>> infrastructure
> >>> that prints URL links.
> >>
> >> Note that drivers like lto-wrapper do not have fully initialized diagnostic
> >> machinery and use a "different" set of overloads (likewise gen* programs).
> >
> > I managed printing the warning:
> >
> > lto-wrapper: warning: jobserver is not available: ‘MAKEFLAGS’ environment 
> > variable is unset
> >
> > lto-wrapper: note: see the ‘-flto’ option documentation for more information
> >
> >
> > and
> >
> > lto-wrapper: warning: using serial compilation of 128 LTRANS jobs
> >
> > lto-wrapper: note: see the ‘-flto’ option documentation for more information
> >
> >
> >>
> >>>>
> >>>> That is, teach users rather than second-guessing and eventually
> >>>> blowing things up.  IMHO only the jobserver mode is safe to
> >>>> automatically use.
> >>>
> >>> Well, -flto=auto is also fine and document. I think there is no 
> >>> possibility
> >>> auto CPU deduction can fail. So -flto=jobserver (with missing make job 
> >>> server)
> >>> and -flto (equal to -flto=1) worth emitting a warning.
> >>>
> >>> What do you think?
> >>
> >> Yes, that sounds reasonable.  I suspect that people might want to see
> >> -flto default to -flto=auto but then I don't think that's good because 
> >> there's
> >> no system wide job scheduler limiting things (systemd-jobserver anyone?)
> >
> > Done that.
> >
> > Thoughts?
> > Martin
> >
> >>
> >> Richard.
> >>
> >>> Martin
> >>>
> >>>>
> >>>> Richard.
> >>>>
> >>>>> Martin
> >>>>>
> >>>>>>
> >>>>>> Richard.
> >>>>>>
> >>>>>>> Thanks,
> >>>>>>> Martin
> >>>>>>>
> >>>>>>> gcc/ChangeLog:
> >>>>>>>
> >>>>>>>          * lto-wrapper.c (run_gcc): When -flto=jobserver is used, but 
> >>>>>>> the
> >>>>>>>          makeserver cannot be detected, then use -flto=N fallback.
> >>>>>>> ---
> >>>>>>>   gcc/lto-wrapper.c | 3 ++-
> >>>>>>>   1 file changed, 2 insertions(+), 1 deletion(-)
> >>>>>>>
> >>>>>>> diff --git a/gcc/lto-wrapper.c b/gcc/lto-wrapper.c
> >>>>>>> index 03a5922f8ea..0b626d7c811 100644
> >>>>>>> --- a/gcc/lto-wrapper.c
> >>>>>>> +++ b/gcc/lto-wrapper.c
> >>>>>>> @@ -1585,8 +1585,9 @@ run_gcc (unsigned argc, char *argv[])
> >>>>>>>         if (jobserver && jobserver_error != NULL)
> >>>>>>>          {
> >>>>>>>            warning (0, jobserver_error);
> >>>>>>> -         parallel = 0;
> >>>>>>> +         /* Fall back to auto parallelism.  */
> >>>>>>>            jobserver = 0;
> >>>>>>> +         auto_parallel = 1;
> >>>>>>>          }
> >>>>>>>         else if (!jobserver && jobserver_error == NULL)
> >>>>>>>          {
> >>>>>>> --
> >>>>>>> 2.31.1
> >>>>>>>
> >>>>>
> >>>
> >
>

Reply via email to