[LLVMdev] Current state-of-the-art in whole program optimization

Nick Lewycky nlewycky at google.com
Mon Feb 2 15:56:14 PST 2015


On 2 February 2015 at 14:01, Russell Wallace <russell.wallace at gmail.com>
wrote:

> As I understand it, clang currently has the -flto flag which activates
> some degree of whole program optimization. However, this requires clang to
> be presented with all the source files at the same time.
>

Not at all. The -flto flag causes clang to emit a half-compiled .o file
that is not at all a real object file. It contains no object code and is
not elf, mach-o nor pe/coff. It's an llvm bitcode file.

The second half of this story is that you're going to ask the linker to
compile a program with these non-object file .o files, and the linker needs
to handle it. On darwin "ld" is linked against libLTO [
http://llvm.org/docs/LinkTimeOptimization.html ]. On linux, you can use
"gold" (the newer ld in binutils) with a plugin [
http://llvm.org/docs/GoldPlugin.html ]. I'm told the plan is to make lld
support llvm lto when building windows/pecoff files, but this may not be
ready yet.

This is easy enough to arrange in a greenfield project, but may be trickier
> with an existing program.
>
> On Unix, C and C++ programs are usually compiled with makefiles (whether
> handwritten or auto generated), and these typically call the compiler on
> one source file at a time and then call the system linker only after
> compilation has proceeded to machine code object files. Thus, even with
> clang as a drop-in replacement for GCC, there is the challenge of obtaining
> exact compilation instructions from the makefile and then modifying these
> to allow clang to see all the files at once, no later than bitcode stage.
>

The gold plugin webpage covers exactly this case, including a section on
how to make llvm LTO work with autotools (configure+make) projects.

Nick

On Windows, it's common to have a Visual Studio project file that msbuild
> can use. This sometimes does call the compiler on multiple files at the
> same time; then there's the question of how to get clang-cl invoked with
> suitable options.
>
> At least that's my thinking on this aspect of the problem so far; there
> are doubtless things I'm missing. What's currently being done in this area?
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150202/d07b3944/attachment.html>


More information about the llvm-dev mailing list