Capturing Intermediate Outputs of IPO

The -ipo-c (Linux*) or /Qipo-c (Windows*) and -ipo-S (Linux) or /Qipo-S (Windows) options are useful for analyzing the effects of multifile IPO, or when experimenting with multifile IPO between modules that do not make up a complete program.

Use the -ipo-c (Linux) or /Qipo-c (Windows) option to optimize across files and produce an object file. This option performs optimizations as described for ipo, but stops prior to the final link stage, leaving an optimized object file. The default name for this file is ipo_out.s (Linux) or ipo_out.obj (Windows). You can use the -o (Linux) or /Fe (Windows) option to specify a different name. For example:

Platform

Example Command

Linux

ifort -tpp6 -ipo-c -ofilename a.f b.f c.f

Windows

ifort /G6 /Qipo-c /Fefile a.f b.f c.f

Use the -ipo-S (Linux) or /Qipo-S (Windows) option to optimize across files and produce an assembly file. This option performs optimizations as described for ipo, but stops prior to the final link stage, leaving an optimized assembly file. The default name for this file is ipo_out.s (Linux) or ipo_out.asm (Windows).

You can use the -o (Linux) or /Fe (Windows) option to specify a different name. For example:

Platform

Example Command

Linux

ifort -tpp6 -ipo-S -ofilename a.f b.f c.f

Windows

ifort /G6 /Qipo-S /Fefile a.f b.f c.f

These options generate multiple outputs if multi-object IPO is being used. The name of the first file is taken from the value of the -o (Linux) or /Fe (Windows) option. The name of subsequent files is derived from this file by appending a numeric value to the file name. For example, if the first object file is named foo.o (Linux) or foo.obj (Windows), the second object file will be named foo1.o (Linux) or foo1.obj (Windows).

The compiler generates a message indicating the name of each object or assembly file it is generating. These files can be added to the real link step to build the final application.

For more information on inlining and the minimum inlining criteria, see Criteria for Inline Function Expansion and Controlling Inline Expansion of User Functions.