Building with link time optimization requires cooperation with the system linker. To support LTO on Linux systems, we requires that you use gold which has support for LTO via plugins. This is the same system used by the upcoming GCC LTO support.
The LLVMgold plugin implements the gold plugin interface on top of libLTO. The same plugin can also be used by other tools such as ar and nm.
You need to build gold with plugin support and build the LLVMgold plugin.
mkdir binutils cd binutils cvs -z 9 -d :pserver:anoncvs@sourceware.org:/cvs/src login {enter "anoncvs" as the password} cvs -z 9 -d :pserver:anoncvs@sourceware.org:/cvs/src co src mkdir build cd build ../src/configure --enable-gold --enable-plugins make all-goldThat should leave you with binutils/build/gold/ld-new which supports the -plugin option.
The linker takes a -plugin option that points to the path of the plugin .so file. To find out what link command gcc would run in a given situation, run gcc -v [...] and look for the line where it runs collect2. Replace that with ld-new -plugin /path/to/LLVMgold.so to test it out. Once you're ready to switch to using gold, backup your existing /usr/bin/ld then replace it with ld-new.
You can produce bitcode files from llvm-gcc using -emit-llvm or -flto or -O4 which is equivalent to -O3 -flto.
llvm-gcc has a -use-gold-plugin option which looks for the gold plugin in the same directories as it looks for cc1. It will not look for an alternate linker, which is why you need gold to be the installed system linker in your path.