[PATCH] D11908: Clang support for -fthinlto.
Duncan P. N. Exon Smith via cfe-commits
cfe-commits at lists.llvm.org
Wed Sep 30 14:33:29 PDT 2015
+echristo, +espindola, +pcc
> On 2015-Sep-30, at 12:39, Teresa Johnson <tejohnson at google.com> wrote:
>
> On Wed, Sep 30, 2015 at 11:11 AM, Duncan P. N. Exon Smith
> <dexonsmith at apple.com> wrote:
>>
>>> On 2015-Sep-30, at 10:40, Teresa Johnson <tejohnson at google.com> wrote:
>>>
>>> On Wed, Sep 30, 2015 at 10:19 AM, Duncan P. N. Exon Smith
>>> <dexonsmith at apple.com> wrote:
>>>>
>>>>> On 2015-Sep-23, at 10:28, Teresa Johnson <tejohnson at google.com> wrote:
>>>>>
>>>>> Index: include/clang/Driver/Options.td
>>>>> ===================================================================
>>>>> --- include/clang/Driver/Options.td
>>>>> +++ include/clang/Driver/Options.td
>>>>> @@ -686,6 +686,9 @@
>>>>> def flto_EQ : Joined<["-"], "flto=">, Group<clang_ignored_gcc_optimization_f_Group>;
>>>>> def flto : Flag<["-"], "flto">, Flags<[CC1Option]>, Group<f_Group>;
>>>>> def fno_lto : Flag<["-"], "fno-lto">, Group<f_Group>;
>>>>> +def fthinlto : Flag<["-"], "fthinlto">, Flags<[CC1Option]>, Group<f_Group>;
>>>>
>>>> I wonder whether this is the right way to add new variants of LTO.
>>>> I.e., maybe this should be "-flto=thin"? Do you happen to know how this
>>>> would conflict with GCC options? (I see we ignore "-flto="...)
>>>
>>> I looked at GCC docs and sources. It does have a -flto= variant. From
>>> https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html:
>>> -----------------
>>> If you specify the optional n, the optimization and code generation
>>> done at link time is executed in parallel using n parallel jobs by
>>> utilizing an installed make program. The environment variable MAKE may
>>> be used to override the program used. The default value for n is 1.
>>>
>>> You can also specify -flto=jobserver to use GNU make's job server mode
>>> to determine the number of parallel jobs. This is useful when the
>>> Makefile calling GCC is already executing in parallel. You must
>>> prepend a ‘+’ to the command recipe in the parent Makefile for this to
>>> work. This option likely only works if MAKE is GNU make.
>>> ----------------
>>>
>>> I would anticipate that we may want to support something like this for
>>> ThinLTO eventually to specify the number of parallel jobs for the
>>> ThinLTO backend processes. So it might be confusing to overload
>>> -flto=.
>>
>> Hmm. You're right that the GCC usage seems pretty different.
>>
>> I guess you're envisioning -fthinlto=jobserver?
>
> Or -fthinlto=n.
>
>> I wonder if we could
>> do this as -flto=thin,jobserver or something similar?
>
> I am ok with -flto=thin and then later extending to -flto=thin,n etc.
>
> This simplifies the interaction with -fno-lto.
>
> I think a -flto=thin followed by -flto should probably revert to
> normal LTO, WDYT?
>
> Another thing to consider is to add -flto=full or something like that
> which is currently an alias for -flto. So we would have:
>
> -flto=<type> where type could be "full" or "thin"
> -flto means -flto=full
> -fno-lto disables all types of flto
> and last option of the above 3 wins.
This SGTM. "monolithic" might be more descriptive than "full", or
maybe someone has a better name.
Eric/Rafael/Peter: any thoughts about driver options?
>>
>> It's pretty hard to remove driver options, so I think it's important to
>> get the interface right. I anticipate that we'll add more LTO variants
>> in the future, so we should take care that this scales reasonably.
>>
>> (This may be a good discussion for cfe-dev, not sure.)
>>
>>>> E.g., as a user I'd expect -fno-lto to turn off whatever LTO was turned
>>>> on. And I might expect -flto to override -fthinlto, or vice versa.
>>>
>>> Good point, I think the last one should win. Looks like right now
>>> -fthinlto is effectively always winning. I will fix that.
>>>
>>> Not sure about -fno-lto behavior if we leave -fthinlto as a separate
>>> option. Let me know what you think based on the GCC usage of -flto=.
>>
>> Right, if they're totally separate, then either behaviour for -fno-lto
>> is confusing.
More information about the cfe-commits
mailing list