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)
commit140d41b791825eb29dcfcb81744ef7a87c554bba
tree3ab5aac030f255b9a29f822922ae0967aea36eaf
parent6c93b3e29c56d14eab570ce62cd646a95f0c1403
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.)

llvm-svn: 224466
llvm/lib/LTO/LTOModule.cpp