[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