[llvm-dev] (Thin)LTO llvm build

Mehdi Amini via llvm-dev llvm-dev at lists.llvm.org
Sat Sep 10 09:25:05 PDT 2016

> On Sep 10, 2016, at 3:03 AM, Carsten Mattner via llvm-dev <llvm-dev at lists.llvm.org> wrote:
> I tried building llvm, clang, lld, lldb from the 3.9 svn release
> branch with LTO, and some of the results were unexpected.
> I first tried to rebuild llvm with llvm-3.9, which has ThinLTO, by
> providing -DLLVM_ENABLE_LTO=Thin, but that failed very quickly, so I
> fell back to building with -DLLVM_ENABLE_LTO=On and using the system
> CC/CXX (gcc 6.1).
> The resulting installed build is many times bigger than the non-LTO
> version. Is this to be expected? I thought LTO would reduce size by
> detecting more unused code.

LTO also inline more, thus increasing the size. But usually it is quite slight.
If you’re concerned about binary size, disabling clang plugin may help:


> The bindist .tar.xz archives are as follows:
> LTO=Off: 195MB
> LTO=On : 953MB
> Now, I am of course aware that falling back to gcc's lto support is
> not the same as llvm's lto or thinlto, but I only fell back after it
> failed to build that way, and I wasn't aware of gcc6 providing almost
> 5x large code than without lto.

GCC may be using “fat” intermediate objects by default, i.e. it generates both the binary and the IR in the intermediates files and the static archives.

What is the size of the final clang binary itself?

> Also, given a fresh 3.9 install, on an otherwise gcc/libstdc++ system,
> how can I configure and build with -DLLVM_ENABLE_LTO=Thin? Is this
> supported, or does it require the use of some libXX too?

You need to have Gold installed, but that is the same requirement as for LTO I believe.
Then if you’re using 3.9 as a host compiler, it should “just work”.


More information about the llvm-dev mailing list