ThinLTO In LLVM

This page tracks the development of ThinLTO in LLVM.

ThinLTO is an infrastructure for fine-grained demand-driven cross-module optimization that is more scalable than traditional LTO.

New: LLVM blog post with build and runtime performance data published at: http://blog.llvm.org/2016/06/thinlto-scalable-and-incremental-lto.html

The original background and motivation can be found in the slides from EuroLLVM 2015:

Current Status (9/22/2016):

It is now possible to run an end-to-end ThinLTO compilation using llvm/clang built from head and the gold-plugin. Initial performance results (see blog post) show similar performance to monolithic LTO, and build times close to non-LTO, including incremental.

Full usage information is available at http://clang.llvm.org/docs/ThinLTO.html

To run, use either clang 3.9 or (for the best performance and latest fixes) using a clang/llvm built from a recent HEAD, and the gold linker configured with plugins enabled:

% clang -O2 files*.c -flto=thin

or

% clang -O2 files*.c -flto=thin -c
% clang -O2 files*.o -flto=thin

The link step will invoke the gold plugin with ThinLTO options and will launch the ThinLTO threads in parallel to create the real .o files that are passed back to the linker.

RFCs

Here are links to several RFCs that were posted to the llvm-dev mailing list:

Some older RFCs that are currently obsolete: