[PATCH] D31100: [LTO] Allow client to skip code gen

Teresa Johnson via llvm-commits llvm-commits at lists.llvm.org
Thu Mar 30 16:21:04 PDT 2017


On Thu, Mar 30, 2017 at 4:16 PM, Peter Collingbourne <peter at pcc.me.uk>
wrote:

> On Fri, Mar 17, 2017 at 2:09 PM, Teresa Johnson <tejohnson at google.com>
> wrote:
>
>>
>>
>> On Fri, Mar 17, 2017 at 2:05 PM, Peter Collingbourne <peter at pcc.me.uk>
>> wrote:
>>
>>> Can you achieve this by setting PreCodeGenModuleHook to a function that
>>> returns false?
>>>
>>
>> I thought about that, but it seemed clearer to be explicit about the
>> intent. I thought the intended purpose of returning when a hook returned
>> false was that it was to flag error conditions?
>>
>
> Sorry for dropping the ball on this thread.
>
> The purpose is to allow the client to interrupt the flow for any reason.
> See for example http://llvm-cs.pcc.me.uk/tools/gold/gold-plugin.cpp#757 for
> how this feature is used in the gold plugin. -emit-llvm is very similar to
> that use case.
>

Ah ok - this does look very similar to what I need to do now for the
-emit-llvm* cases. Will migrate to that, so there won't be any need for an
LLVM side patch.

Teresa


>
> Peter
>
>
>>
>> Teresa
>>
>>
>>> Peter
>>>
>>>
>>> On Mar 17, 2017 14:01, "Teresa Johnson via Phabricator" <
>>> reviews at reviews.llvm.org> wrote:
>>>
>>> tejohnson created this revision.
>>> Herald added a subscriber: mehdi_amini.
>>>
>>> This is useful when invoking the ThinLTO backend via clang, which
>>> already has handling (immediately after the existing early return
>>> when invoking the ThinLTO backend) for setting up the requested code
>>> generation.
>>>
>>> We noticed that when invoking the thinBackend via clang (for the
>>> distributed build case) that flags like -ffunction-sections and
>>> -emit-llvm were not having the intended effect. This could have been
>>> fixed by setting up the TargetOptions and the CodeGenFileType in the LTO
>>> Config, but since clang already has handling for all of this, it is
>>> straightforward to just let it do the handling.
>>>
>>>
>>> https://reviews.llvm.org/D31100
>>>
>>> Files:
>>>   include/llvm/LTO/Config.h
>>>   lib/LTO/LTOBackend.cpp
>>>
>>>
>>> Index: lib/LTO/LTOBackend.cpp
>>> ===================================================================
>>> --- lib/LTO/LTOBackend.cpp
>>> +++ lib/LTO/LTOBackend.cpp
>>> @@ -269,6 +269,9 @@
>>>    if (Conf.PreCodeGenModuleHook && !Conf.PreCodeGenModuleHook(Task,
>>> Mod))
>>>      return;
>>>
>>> +  if (Conf.SkipCodeGen)
>>> +    return;
>>> +
>>>    auto Stream = AddStream(Task);
>>>    legacy::PassManager CodeGenPasses;
>>>    if (TM->addPassesToEmitFile(CodeGenPasses, *Stream->OS,
>>> Conf.CGFileType))
>>> Index: include/llvm/LTO/Config.h
>>> ===================================================================
>>> --- include/llvm/LTO/Config.h
>>> +++ include/llvm/LTO/Config.h
>>> @@ -49,6 +49,9 @@
>>>    /// Disable entirely the optimizer, including importing for ThinLTO
>>>    bool CodeGenOnly = false;
>>>
>>> +  /// Skip code generation, the client is responsible for it.
>>> +  bool SkipCodeGen = false;
>>> +
>>>    /// If this field is set, the set of passes run in the middle-end
>>> optimizer
>>>    /// will be the one specified by the string. Only works with the new
>>> pass
>>>    /// manager as the old one doesn't have this ability.
>>>
>>>
>>>
>>>
>>
>>
>> --
>> Teresa Johnson |  Software Engineer |  tejohnson at google.com |
>> 408-460-2413 <(408)%20460-2413>
>>
>
>
>
> --
> --
> Peter
>



-- 
Teresa Johnson |  Software Engineer |  tejohnson at google.com |  408-460-2413
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170330/695dffd9/attachment.html>


More information about the llvm-commits mailing list