An IPO compilation consists of two parts: the compile phase, and the link phase. In the compile phase, the compiler produces an Intermediate Language (IL) version of the users’ code. In the link phase, the compiler reads the IL and completes the compilation, producing a real object file or executable.
Generally, different compiler versions produce unique IL based on different definitions; therefore, the intermediate language files from different compilations can be incompatible.
A compiler assigns a unique version number with each IL definition for the compiler. If a compiler attempts to read IL in a file with a version number other than its own, the compilation will proceed; however, the compiler discards the IL and does not use it during compilation. The compiler then issues a warning message that an incompatible IL was detected and discarded.
The IL produced by the Intel® compiler is stored in a special section of the object file. The IL stored in the object file is then placed in the library. If this library is used in an IPO compilation invoked with the same compiler as produced the IL for the library, the compiler can extract the IL from the library and use it to optimize the program. For example, it is possible to inline functions defined in the libraries into the users’ source code.