[llvm-dev] RFC: LTO should use -disable-llvm-verifier
Duncan P. N. Exon Smith via llvm-dev
llvm-dev at lists.llvm.org
Tue Sep 8 10:52:29 PDT 2015
> On 2015-Sep-04, at 15:53, Peter Collingbourne via llvm-dev <llvm-dev at lists.llvm.org> wrote:
>
> On Fri, Sep 04, 2015 at 03:11:39PM -0700, Mehdi Amini wrote:
>>
>>> On Sep 4, 2015, at 11:38 AM, Peter Collingbourne <peter at pcc.me.uk> wrote:
>>>
>>> On Fri, Sep 04, 2015 at 11:13:43AM -0700, Mehdi Amini wrote:
>>>>
>>>>> On Sep 4, 2015, at 11:03 AM, Eric Christopher <echristo at gmail.com> wrote:
>>>>>
>>>>>
>>>>>
>>>>> On Fri, Sep 4, 2015 at 12:48 AM Mehdi Amini <mehdi.amini at apple.com <mailto:mehdi.amini at apple.com>> wrote:
>>>>>> On Sep 4, 2015, at 12:22 AM, Eric Christopher <echristo at gmail.com <mailto:echristo at gmail.com>> wrote:
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Thu, Sep 3, 2015 at 11:45 PM Mehdi Amini <mehdi.amini at apple.com <mailto:mehdi.amini at apple.com>> wrote:
>>>>>> Hi,
>>>>>>
>>>>>>> On Sep 2, 2015, at 7:31 PM, Peter Collingbourne via llvm-dev <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>> wrote:
>>>>>>>
>>>>>>> On Thu, Sep 03, 2015 at 01:10:42AM +0000, Eric Christopher wrote:
>>>>>>>> On Tue, Sep 1, 2015 at 10:43 AM Duncan P. N. Exon Smith <
>>>>>>>> dexonsmith at apple.com <mailto:dexonsmith at apple.com>> wrote:
>>>>>>>>
>>>>>>>>>
>>>>>>>>>> On 2015-Aug-31, at 18:09, Eric Christopher <echristo at gmail.com <mailto:echristo at gmail.com>> wrote:
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Mon, Aug 31, 2015 at 5:50 PM Duncan P. N. Exon Smith <
>>>>>>>>> dexonsmith at apple.com <mailto:dexonsmith at apple.com>> wrote:
>>>>>>>>>>
>>>>>>>>>>> On 2015-Aug-31, at 12:21, Eric Christopher <echristo at gmail.com <mailto:echristo at gmail.com>> wrote:
>>>>>>>>>>> Yep. This is where I was going :)
>>>>>>>>>>
>>>>>>>>>> Glad I found consensus, but I want to double-check that this makes
>>>>>>>>>> sense to add to the driver. I didn't quite think through the
>>>>>>>>>> implications myself.
>>>>>>>>>>
>>>>>>>>>> Since the driver doesn't know if there's any bitcode, or if LTO is
>>>>>>>>>> going to be invoked, it seems like I'll have to change the noasserts
>>>>>>>>>> driver to *always* pass the option to the linker just in case we are
>>>>>>>>>> doing LTO. Is this reasonable?
>>>>>>>>>>
>>>>>>>>>> Also, I realized that passing `-mllvm -disable-llvm-verifier` to ld64
>>>>>>>>>> is redundant... so I'm thinking `-mllvm -disable-verify`. Make
>>>>>>>>>> sense?
>>>>>>>>>>
>>>>>>>>>> *sigh* Reasons to hate the driver interface again...
>>>>>>>>>>
>>>>>>>>>> I guess this is ok. Could possibly add it to the existing terrible
>>>>>>>>> "enable this pass" interface on liblto as well.
>>>>>>>>>
>>>>>>>>> The linker doesn't know whether clang was built with asserts, though.
>>>>>>>>>
>>>>>>>>> We could just make it implicit: move the decision to libLTO itself. Given
>>>>>>>>> that clang and libLTO.dylib are different executables anyway -- and you
>>>>>>>>> might be interposing an asserts libLTO.dylib to use with an installed clang
>>>>>>>>> -- maybe it's even better?
>>>>>>>>>
>>>>>>>>>
>>>>>>>> *nod* We could do that. Seems better than the alternative.
>>>>>>>
>>>>>>> +1
>>>>>>>
>>>>>>>>>> I don't suppose ld64 could move to a model like we're talking about with
>>>>>>>>> lld that pcc is working on?
>>>>>>>>>
>>>>>>>>> What specifically?
>>>>>>>>
>>>>>>>>
>>>>>>>> Ah, using the C++ interface to handle everything and not using libLTO at
>>>>>>>> all.
>>>>>>>>
>>>>>>>> He can speak more to this though.
>>>>>>>
>>>>>>> The C++ interface is much more convenient for a C++ program to use, but
>>>>>>> clients need to revlock themselves to LLVM in order to use it.
>>>>>>>
>>>>>>> In theory the same does not apply to libLTO, but we do end up changing it
>>>>>>> occasionally to add new APIs which ld64 promptly starts using, so it isn't
>>>>>>> clear how much ld64 gains by relying on libLTO,
>>>>>>
>>>>>> Backward/Forward compatibility?
>>>>>> Drop any version of clang/libLTO and still be able to use the system provided linker on any version of OS X?
>>>>>> Sounds like a valuable feature to me, which is what I believe was (is?) sought by the C API in general (but that’s another story).
>>>>>>
>>>>>>
>>>>>> Static linking against the parts of llvm you care about? There's nothing in the ld64 build system that means it can't do this :)
>>>>>
>>>>> I’m not sure how is that supposed to work?
>>>>> I drop a new clang/libLTO on the system, clang generates bitcode, and libLTO handles it.
>>>>>
>>>>> If ld64 was statically linked against LLVM, it couldn’t read the new bitcode right?
>>>>>
>>>>>
>>>>> Well sure, that's what Peter meant when he said revlocked. :)
>>>>
>>>> I’m not sure we’re talking about the same thing, I may have misunderstood his point (“In theory the same does not apply to libLTO, but we do end up changing it
>>>> occasionally to add new APIs which ld64 promptly starts using, so it isn’t clear how much ld64 gains by relying on libLTO”) ; my take from that was that since the new ld64 starts using the new libLTO interface, there is a revlock anyway and then there is no advantage in keeping the old libLTO entry points.
>>>> I just described a use case that shows how useful it can be.
>>>>
>>>> Apologize if I misunderstood the point.
>>>
>>> That seems like a potentially valid use case, but if it doesn't actually
>>> work right now it doesn't really buy you much.
>>
>> It is working right now AFAIK. At least my understand is that the current situation is that you can drop a clang/libLTO built today on a machine that has ld64 from a few years ago and it will work.
BTW, a brand new ld64 will work with an old libLTO.dylib, too. I'm
not aware of any revlock at all.
> Is there anyone who actually needs to do this? Why can't they upgrade
> their linker?
While it's fairly easy for external people (like you) to compile a
new version of clang/libLTO.dylib, without the ld64 sources it would
be hard to compile a new version of the linker. At the least, ld64's
use of the stable LTO C API enables compiler hackers to hack away.
We take advantage of this internally, since it gives us freedom to
stage ld64 and clang releases independently.
(Once we bring up lld, I think the story can be quite different.)
More information about the llvm-dev
mailing list