Intel® C++ Compiler 16.0 User and Reference Guide
There are some general optimization guidelines for IPO that you should keep in mind:
Using IPO on very large programs might trigger internal limits of other compiler optimization phases.
Combining IPO and PGO can be a key technique for optimizing C++ applications. The O3, [Q]ipo, and [Q]prof-use compiler options may result in performance gains.
Applications where the compiler does not have sufficient intermediate representation (IR) coverage to do whole program analysis might not perform as well as those where IR information is complete.
In addition to the general guidelines, there are some practices to avoid while using IPO. The following list summarizes the activities to avoid:
Do not use the link phase of an IPO compilation using mock object files produced for your application by a different compiler. The Intel® Compiler cannot inspect mock object files generated by other compilers for optimization opportunities.
Do not link mock files with the [Q]prof-use compiler option unless the mock files were also compiled with the [Q]prof-use compiler option.
Update make files to call the appropriate Intel linkers when using IPO from scripts. For Linux and OS X, replace all instances of ld with xild; for Windows, replace all instances of link with xilink.