Generating Multiple IPO Object Files

For the most part, IPO generates a single object file for the link-time compilation. This can be clumsy for very large applications, perhaps even making it impossible to use -ipo on the application. The compiler provides two ways to avoid this problem. The first way is a size-based heuristic, which automatically causes the compiler to generate multiple object files for large link-time compilations.  The second way is using one of two explicit command line controls for that tell the compiler to do multi-object IPO:  

These options are alternatives to the -ipo option, that is, they indicate an IPO compilation. Explicitly requesting a multi-object IPO compilation turns the size-based heuristic off.

The number of files generated by the link-time compilation is invisible to the user unless either the -ipo_c or -ipo_S option is used.  In this case the compiler appends a number to the file name.  For example, consider this command line:

ifort a.o b.o c.o -ipo_separate -ipo_c

In this command line, a.o, b.o, and c.o all contain IR, so the compiler will generate ipo_out.o, ipo_out1.o, ipo_out2.o, and  ipo_out3.o.

The first object file contains global symbols.  The other object files correspond to the source files.

This naming convention is also applied to user-specified names.  For example:

ifort a.o b.o c.o -ipo_separate -ipo_c -o appl.o

This will generate appl.o, appl1.o, appl2.o, and appl3.o.