[PATCH] LTO: Lazily load modules that are used for parsing symbols
Duncan P. N. Exon Smith
dexonsmith at apple.com
Wed Dec 17 14:14:14 PST 2014
r224466.
> On 2014-Dec-17, at 14:02, Rafael EspĂndola <rafael.espindola at gmail.com> wrote:
>
> This needs a comment close to
>
> ErrorOr<Module *> MOrErr = parseBitcodeFileImpl(
>
> + Buffer, *Context, /* ShouldBeLazy */ static_cast<bool>(OwnedContext));
>
> Along the lines of: If we own a context, we know this is being used
> only for symbol extraction, not linking.
>
> LGTM with that.
>
>
>
>
> On 17 December 2014 at 15:13, Duncan P. N. Exon Smith
> <dexonsmith at apple.com> wrote:
>> Start lazy-loading `LTOModule`s that own their contexts. These can only
>> really be used for parsing symbols, so its unnecessary to ever
>> materialize their functions.
>>
>> I looked into using `IRObjectFile::create()` and optionally calling
>> `materializAllPermanently()` afterwards, but this turned out to be
>> awkward.
>>
>> - The default target triple and data layout logic needs to happen
>> *before* the call to `IRObjectFile::IRObjectFile()`, but after
>> `Module` was created.
>>
>> - I tried passing a lambda in to do the module initialization, but
>> this seemed to require threading the error message from
>> `TargetRegistry::lookupTarget()` through `std::error_code`.
>>
>> - I also looked at setting `errMsg` directly from within the lambda,
>> but this didn't look any better.
>>
>> (I guess there's a reason we weren't already using that function.)
>>
>> Note that I added a test in r224408 to ensure that parsing symbols
>> actually works in this flow.
>>
More information about the llvm-commits
mailing list