From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx2.suse.de (mx2.suse.de [195.135.220.15]) by sourceware.org (Postfix) with ESMTPS id 924DA385800F for ; Thu, 22 Apr 2021 12:21:50 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 924DA385800F Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=suse.cz Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mliska@suse.cz X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.221.27]) by mx2.suse.de (Postfix) with ESMTP id 86C08B14D; Thu, 22 Apr 2021 12:21:49 +0000 (UTC) Subject: Re: [PATCH] LTO: fallback to -flto=N if -flto=jobserver does not work. To: Richard Biener Cc: GCC Patches References: <11a45856-44b3-754d-5a42-19a348d0d59d@suse.cz> <8cc12cd9-fe88-f97b-eec2-d47f5342496d@suse.cz> From: =?UTF-8?Q?Martin_Li=c5=a1ka?= Message-ID: Date: Thu, 22 Apr 2021 14:21:48 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.9.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-11.3 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, NICE_REPLY_A, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 22 Apr 2021 12:21:52 -0000 On 4/22/21 1:19 PM, Richard Biener wrote: > On Thu, Apr 22, 2021 at 11:02 AM Martin Liška wrote: >> >> On 4/22/21 10:04 AM, Richard Biener wrote: >>> On Wed, Apr 21, 2021 at 3:08 PM Martin Liška 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. > > 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. > > 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? 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 >>>> >>