aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/MC/MCDisassembler/Disassembler.cpp
diff options
context:
space:
mode:
authorDuncan P. N. Exon Smith <dexonsmith@apple.com>2014-11-11 23:19:23 +0000
committerDuncan P. N. Exon Smith <dexonsmith@apple.com>2014-11-11 23:19:23 +0000
commitc5800f68bd821a0b10f9ef9b640ac23ca58a212f (patch)
tree83438f065d70452213cf0d928554911d43285be1 /llvm/lib/MC/MCDisassembler/Disassembler.cpp
parent7fe6f03c3a536e54c3d7818cbf693834a610965a (diff)
downloadllvm-c5800f68bd821a0b10f9ef9b640ac23ca58a212f.zip
llvm-c5800f68bd821a0b10f9ef9b640ac23ca58a212f.tar.gz
llvm-c5800f68bd821a0b10f9ef9b640ac23ca58a212f.tar.bz2
libLTO: Allow linker to choose context of modules and codegen
Add API for specifying which `LLVMContext` each `lto_module_t` and `lto_code_gen_t` is in. In particular, this enables the following flow: for (auto &File : Files) { lto_module_t M = lto_module_create_in_local_context(File...); querySymbols(M); lto_module_dispose(M); } lto_code_gen_t CG = lto_codegen_create_in_local_context(); for (auto &File : FilesToLink) { lto_module_t M = lto_module_create_in_codegen_context(File..., CG); lto_codegen_add_module(CG, M); lto_module_dispose(M); } lto_codegen_compile(CG); lto_codegen_write_merged_modules(CG, ...); lto_codegen_dispose(CG); This flow has a few benefits. - Only one module (two if you count the combined module in the code generator) is in memory at a time. - Metadata (and constants) from files that are parsed to query symbols but not linked into the code generator don't pollute the global context. - The first for loop can be parallelized, since each module is in its own context. - When the code generator is disposed, the memory from LTO gets freed. rdar://problem/18767512 llvm-svn: 221733
Diffstat (limited to 'llvm/lib/MC/MCDisassembler/Disassembler.cpp')
0 files changed, 0 insertions, 0 deletions