#1691: Look into GCC -flto and -fwhole-program link options
--------------------------+-------------------------------------------------
 Reporter:  petdance      |       Owner:       
     Type:  experimental  |      Status:  new  
 Priority:  normal        |   Milestone:       
Component:  none          |     Version:  2.5.0
 Severity:  medium        |    Keywords:       
     Lang:                |       Patch:       
 Platform:                |  
--------------------------+-------------------------------------------------
 -flto is link-time optimization.

 -fwhole-program is optimization for the entire program.

 From http://lwn.net/Articles/387122/

 When source files are compiled and linked using -flto, GCC applies
 optimizations as if all the source code were in a single file. This allows
 GCC to perform more aggressive optimizations across files, such as
 inlining the body of a function from one file that is called from a
 different file, and propagating constants across files. In general, the
 LTO framework enables all the usual optimizations that work at a higher
 level than a single function to also work across files that are
 independently compiled.

 The LTO option works almost like any other optimization flag. First, one
 needs to use optimization (using one of the -O{1,2,3,s} options). In cases
 where compilation and linking are done in a single step, adding the option
 -flto is sufficient

     gcc -o myprog -flto -O2 foo.c bar.c

 This effectively deprecates the old -combine option, which was too slow in
 practice and only supported for C.

 With independent compilation steps, the option -flto must be specified at
 all steps of the process:

     gcc -c -O2 -flto foo.c

     gcc -c -O2 -flto bar.c

     gcc -o myprog -flto -O2 foo.o bar.o

 An interesting possibility is to combine the options -flto and -fwhole-
 program. The latter assumes that the current compilation unit represents
 the whole program being compiled. This means that most functions and
 variables are optimized more aggressively. Adding -fwhole-program in the
 final link step in the example above, makes LTO even more powerful.

 When using multiple steps, it is strongly recommended to use exactly the
 same optimization and machine-dependent options in all commands, because
 conflicting options during compilation and link-time may lead to strange
 errors. In the best case, the options used during compilation will be
 silently overridden by those used at link-time. In the worst case, the
 different options may introduce subtle inconsistencies leading to
 unpredictable results at runtime. This, of course, is far from ideal, and,
 hence, in the next minor release, GCC will identify such conflicting
 options and provide appropriate diagnostics. Meanwhile, some extra care
 should be taken when using LTO.

-- 
Ticket URL: <https://trac.parrot.org/parrot/ticket/1691>
Parrot <https://trac.parrot.org/parrot/>
Parrot Development
_______________________________________________
parrot-tickets mailing list
[email protected]
http://lists.parrot.org/mailman/listinfo/parrot-tickets

Reply via email to