]> granicus.if.org Git - llvm/commit
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)
commit9f482fc3fc4ccf546a0f92477154540121c74f87
tree3a181372a8a1f1469f2e2936e8b6641924c233e4
parentf43d588ee8d56876772bcca9fc4dfe22e9ba50d3
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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@299168 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/LTO/LTO.h
include/llvm/Object/IRSymtab.h [new file with mode: 0644]
lib/LTO/LTO.cpp
lib/Object/CMakeLists.txt
lib/Object/IRSymtab.cpp [new file with mode: 0644]
tools/gold/gold-plugin.cpp