Link-time optimization is an optimization mode that allows the compiler to have visibility of the entire program. The optimization occurs at link-time instead of compile-time like other optimization levels.
Link-time optimization is invoked using the
--opt_level=4 option. This option must be placed before the --run_linker (-z)
option on the command line, because both the compiler and linker are involved in
link-time optimization. At compile time, the compiler embeds an intermediate
representation of the file being compiled into the resulting object file. At
link-time this representation is extracted from every object file which contains it,
and is used to optimize the entire program.
If you use --opt_level=4 (-O4), the --program_level_compile option cannot also be used, because link-time optimization provides the same optimization opportunities as program level optimization (Section 3.4). Link-time optimization provides the following benefits:
- Each source file can be compiled separately. One issue with program-level compilation is that it requires all source files to be passed to the compiler at one time. This often requires significant modification of a customer's build process. With link-time optimization, all files can be compiled separately.
- References to C/C++ symbols from assembly are handled automatically. When doing program-level compilation, the compiler has no knowledge of whether a symbol is referenced externally. When performing link-time optimization during a final link, the linker can determine which symbols are referenced externally and prevent eliminating them during optimization.
- Third party object files can participate in optimization. If a third party vendor provides object files that were compiled with the --opt_level=4 option, those files participate in optimization along with user-generated files. This includes object files supplied as part of the TI run-time support. Object files that were not compiled with –opt_level=4 can still be used in a link that is performing link-time optimization. Those files that were not compiled with –opt_level=4 do not participate in the optimization.
- Source files can be compiled with different
option sets. With program-level compilation, all source files must be
compiled with the same option set. With link-time optimization, files can be
compiled with different options. If the compiler determines that two options are
incompatible, it issues an error.