LTO: Lazy-load LTOModule in local contexts
authorDuncan P. N. Exon Smith <dexonsmith@apple.com>
Wed, 17 Dec 2014 22:05:42 +0000 (22:05 +0000)
committerDuncan P. N. Exon Smith <dexonsmith@apple.com>
Wed, 17 Dec 2014 22:05:42 +0000 (22:05 +0000)
commit657f8c831aabd1e3997fc79fa8f39ce89b30af4b
treee45546d5e610b946f0da11fe604847d667ff4a3b
parent1c97c5e8bddfcce56b890f26e56ce10293f8ce4e
LTO: Lazy-load LTOModule in local contexts

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.)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224466 91177308-0d34-0410-b5e6-96231b3b80d8
lib/LTO/LTOModule.cpp