In certain situations you might need to generate real object files with -ipo. To force the compiler to produce real object files instead of "mock" ones with IPO, you must specify -ipo_obj in addition to -ipo.
Use of -ipo_obj is necessary under the following conditions:
The objects produced by the compilation phase
of -ipo will be placed in a static library without
the use of xild or xild -lib.
The compiler does not support multifile IPO for static libraries, so all
static libraries are passed to the linker. Linking with a static library
that contains "mock" object files will result in linkage errors
because the objects do not contain real code or data. Specifying
-ipo_obj causes the compiler to generate object
files that can be used in static libraries.
Alternatively, if you create the static library using xild or xild -lib, then the resulting static library will work as a normal library.
The objects produced by the compilation phase of -ipo might be linked without the -ipo option and without the use of xild.
You want to generate an assembly listing for each source file (using -S) while compiling with -ipo. If you use -ipo with -S, but without -ipo_obj, the compiler issues a warning and an empty assembly file is produced for each compiled source file.