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

Duncan P. N. Exon Smith dexonsmith at apple.com
Wed Dec 17 12:13:41 PST 2014


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.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-LTO-Lazy-load-LTOModule-in-local-contexts.patch
Type: application/octet-stream
Size: 3008 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20141217/3ac8c057/attachment.obj>


More information about the llvm-commits mailing list