[llvm] r292420 - [ThinLTO] Add a recursive step in Metadata lazy-loading
Mehdi Amini via llvm-commits
llvm-commits at lists.llvm.org
Thu Jan 19 11:00:25 PST 2017
r292505.
> On Jan 19, 2017, at 10:48 AM, Hans Wennborg <hans at chromium.org> wrote:
>
> Sounds good to me. Mehdi, go ahead and merge or let me know if you'd
> like me to do it.
>
> Thanks,
> Hans
>
> On Wed, Jan 18, 2017 at 12:19 PM, Peter Collingbourne <peter at pcc.me.uk> wrote:
>> Approved.
>>
>> Peter
>>
>> On Wed, Jan 18, 2017 at 10:51 AM, Mehdi Amini <mehdi.amini at apple.com> wrote:
>>>
>>> Hi Peter,
>>>
>>> I’d like to cherry-pick this into the 4.0 release. This is a follow-up to
>>> r291027, it achieve what was originally promised.
>>>
>>> It will only affect ThinLTO, as lazy-loading happens only there.
>>>
>>> Thanks,
>>>
>>> —
>>> Mehdi
>>>
>>>> On Jan 18, 2017, at 10:36 AM, Mehdi Amini via llvm-commits
>>>> <llvm-commits at lists.llvm.org> wrote:
>>>>
>>>> Author: mehdi_amini
>>>> Date: Wed Jan 18 12:36:21 2017
>>>> New Revision: 292420
>>>>
>>>> URL: http://llvm.org/viewvc/llvm-project?rev=292420&view=rev
>>>> Log:
>>>> [ThinLTO] Add a recursive step in Metadata lazy-loading
>>>>
>>>> Summary:
>>>> Without this, we're stressing the RAUW of unique nodes,
>>>> which is a costly operation. This is intended to limit
>>>> the number of RAUW, and is very effective on the total
>>>> link-time of opt with ThinLTO, before:
>>>>
>>>> real 4m4.587s user 15m3.401s sys 0m23.616s
>>>>
>>>> after:
>>>>
>>>> real 3m25.261s user 12m22.132s sys 0m24.152s
>>>>
>>>> Reviewers: tejohnson, pcc
>>>>
>>>> Subscribers: llvm-commits
>>>>
>>>> Differential Revision: https://reviews.llvm.org/D28751
>>>>
>>>> Modified:
>>>> llvm/trunk/lib/Bitcode/Reader/MetadataLoader.cpp
>>>> llvm/trunk/test/ThinLTO/X86/lazyload_metadata.ll
>>>>
>>>> Modified: llvm/trunk/lib/Bitcode/Reader/MetadataLoader.cpp
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Bitcode/Reader/MetadataLoader.cpp?rev=292420&r1=292419&r2=292420&view=diff
>>>>
>>>> ==============================================================================
>>>> --- llvm/trunk/lib/Bitcode/Reader/MetadataLoader.cpp (original)
>>>> +++ llvm/trunk/lib/Bitcode/Reader/MetadataLoader.cpp Wed Jan 18 12:36:21
>>>> 2017
>>>> @@ -768,13 +768,12 @@ void MetadataLoader::MetadataLoaderImpl:
>>>> unsigned ID, PlaceholderQueue &Placeholders) {
>>>> assert(ID < (MDStringRef.size()) + GlobalMetadataBitPosIndex.size());
>>>> assert(ID >= MDStringRef.size() && "Unexpected lazy-loading of
>>>> MDString");
>>>> -#ifndef NDEBUG
>>>> // Lookup first if the metadata hasn't already been loaded.
>>>> if (auto *MD = MetadataList.lookup(ID)) {
>>>> auto *N = dyn_cast_or_null<MDNode>(MD);
>>>> - assert(N && N->isTemporary() && "Lazy loading an already loaded
>>>> metadata");
>>>> + if (!N->isTemporary())
>>>> + return;
>>>> }
>>>> -#endif
>>>> SmallVector<uint64_t, 64> Record;
>>>> StringRef Blob;
>>>> IndexCursor.JumpToBit(GlobalMetadataBitPosIndex[ID -
>>>> MDStringRef.size()]);
>>>> @@ -827,8 +826,22 @@ Error MetadataLoader::MetadataLoaderImpl
>>>> auto getMD = [&](unsigned ID) -> Metadata * {
>>>> if (ID < MDStringRef.size())
>>>> return lazyLoadOneMDString(ID);
>>>> - if (!IsDistinct)
>>>> + if (!IsDistinct) {
>>>> + if (auto *MD = MetadataList.lookup(ID))
>>>> + return MD;
>>>> + // If lazy-loading is enabled, we try recursively to load the
>>>> operand
>>>> + // instead of creating a temporary.
>>>> + if (ID < (MDStringRef.size() + GlobalMetadataBitPosIndex.size()))
>>>> {
>>>> + // Create a temporary for the node that is referencing the
>>>> operand we
>>>> + // will lazy-load. It is needed before recursing in case there
>>>> are
>>>> + // uniquing cycles.
>>>> + MetadataList.getMetadataFwdRef(NextMetadataNo);
>>>> + lazyLoadOneMetadata(ID, Placeholders);
>>>> + return MetadataList.lookup(ID);
>>>> + }
>>>> + // Return a temporary.
>>>> return MetadataList.getMetadataFwdRef(ID);
>>>> + }
>>>> if (auto *MD = MetadataList.getMetadataIfResolved(ID))
>>>> return MD;
>>>> return &Placeholders.getPlaceholderOp(ID);
>>>>
>>>> Modified: llvm/trunk/test/ThinLTO/X86/lazyload_metadata.ll
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/ThinLTO/X86/lazyload_metadata.ll?rev=292420&r1=292419&r2=292420&view=diff
>>>>
>>>> ==============================================================================
>>>> --- llvm/trunk/test/ThinLTO/X86/lazyload_metadata.ll (original)
>>>> +++ llvm/trunk/test/ThinLTO/X86/lazyload_metadata.ll Wed Jan 18 12:36:21
>>>> 2017
>>>> @@ -17,7 +17,7 @@
>>>> ; RUN: -o /dev/null -disable-ondemand-mds-loading -stats \
>>>> ; RUN: 2>&1 | FileCheck %s -check-prefix=NOTLAZY
>>>> ; NOTLAZY: 58 bitcode-reader - Number of Metadata records loaded
>>>> -; NOTLAZY: 8 bitcode-reader - Number of MDStrings loaded
>>>> +; NOTLAZY: 6 bitcode-reader - Number of MDStrings loaded
>>>>
>>>>
>>>> target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
>>>> @@ -48,7 +48,7 @@ define void @globalfunc3(i32 %arg) {
>>>> !3 = !{!"3"}
>>>> !4 = !{!"4"}
>>>> !5 = !{!"5"}
>>>> -!6 = !{!"6"}
>>>> +!6 = !{!9}
>>>> !7 = !{!"7"}
>>>> !8 = !{!"8"}
>>>> -!9 = !{!"9"}
>>>> +!9 = !{!6}
>>>>
>>>>
>>>> _______________________________________________
>>>> llvm-commits mailing list
>>>> llvm-commits at lists.llvm.org
>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>>
>>
>>
>>
>> --
>> --
>> Peter
More information about the llvm-commits
mailing list