[PATCH] LTO: Lazily load modules that are used for parsing symbols

Rafael EspĂ­ndola rafael.espindola at gmail.com
Wed Dec 17 14:02:15 PST 2014


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