LTO: Reduce memory consumption by creating an in-memory symbol table for InputFiles...
authorPeter Collingbourne <peter@pcc.me.uk>
Fri, 31 Mar 2017 02:28:30 +0000 (02:28 +0000)
committerPeter Collingbourne <peter@pcc.me.uk>
Fri, 31 Mar 2017 02:28:30 +0000 (02:28 +0000)
commitd9717aa0e420e931d79d85867e06afe3c3e625b0
tree6648122a58c2dd38990d2bfa45930d66e4a2585e
parentaf2dfce6834f6bb4ea829cdc1c1bf6ee72bc6623
LTO: Reduce memory consumption by creating an in-memory symbol table for InputFiles. NFCI.

Introduce symbol table data structures that can be potentially written to
disk, have the LTO library build those data structures using temporarily
constructed modules and redirect the LTO library implementation to go through
those data structures. This allows us to remove the LLVMContext and Modules
owned by InputFile.

With this change I measured a peak memory consumption decrease from 5.4GB to
2.8GB in a no-op incremental ThinLTO link of Chromium on Linux. The impact on
memory consumption is larger in COFF linkers where we are currently forced
to materialize all metadata in order to read linker options. Peak memory
consumption linking a large piece of Chromium for Windows with full LTO and
debug info decreases from >64GB (OOM) to 15GB.

Part of PR27551.

Differential Revision: https://reviews.llvm.org/D31364

llvm-svn: 299168
lld/COFF/InputFiles.cpp
lld/ELF/InputFiles.cpp
llvm/include/llvm/LTO/LTO.h
llvm/include/llvm/Object/IRSymtab.h [new file with mode: 0644]
llvm/lib/LTO/LTO.cpp
llvm/lib/Object/CMakeLists.txt
llvm/lib/Object/IRSymtab.cpp [new file with mode: 0644]
llvm/tools/gold/gold-plugin.cpp