[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