[PATCH] Support to lazily load Metadata
Manman Ren
mren at apple.com
Fri Mar 13 12:28:31 PDT 2015
> On Mar 13, 2015, at 9:49 AM, Rafael Espíndola <rafael.espindola at gmail.com> wrote:
>
> This is awesome. Sorry for taking so long to review it.
No problem.
>
> + // Delay parsing Metadata if WillMaterializeAll is false and
> + // ShouldLazyLoadMetadata is true.
> + if (std::error_code EC = R->ParseBitcodeInto(
> + M, !WillMaterializeAll && ShouldLazyLoadMetadata))
>
> Why the check for WillMaterializeAll? The nice thing about omitting it
> is that the lazy path will look a bit more like the non-lazy path.
I removed the check for WillMaterializeAll and committed as r232198.
>
> It looks like a materializeMetadata will be needed for the gold
> plugin, but I can add that as a second patch. LGTM!
> BTW, changing llvm-ar to use this makes producing lib64/libclangSema.a
> in a debug build go from 8.658015807 seconds to just 0.351036519
> seconds :-)
Great to know!
Thanks for reviewing!
Manman
>
>
>
> On 27 February 2015 at 14:11, Manman Ren <mren at apple.com> wrote:
>> Hi All,
>>
>> This patch defers loading of Metadata until we materialize a module, a function or explicitly the Metadata.
>>
>> In this patch, we only enable lazy loading of Metadata when creating LTOModule in local contexts.
>> These can only really be used for parsing symbols, so it's unnecessary to ever load the metadata blocks.
>>
>> Implementation —————
>> We add a parameter called ShouldLazyLoadMetadata to a few functions.
>>
>> We only defer loading metadata inside ParseModule when ShouldLazyLoadMetadata
>> is true and we have not loaded any Metadata block yet.
>>
>> This commit implements all-or-nothing loading of Metadata. If there is a
>> request to load any metadata block, we will load all deferred metadata blocks.
>>
>> We make sure the deferred metadata blocks are loaded before we materialize any
>> function or a module.
>>
>> The default value of the added parameter ShouldLazyLoadMetadata for
>> getLazyBitcodeModule is false, so the default behavior stays the same.
>>
>> Next Step —————
>> If we are going to enable lazy-loading of Metadata for other usages of
>> getLazyBitcodeModule, where deferred metadata blocks need to be loaded, we can
>> expose BitcodeReader::materializeMetadata to Module, similar to
>> Module::materialize.
>>
>> Thanks for reviewing!
>> Manman
>>
More information about the llvm-commits
mailing list