# IPO-Related Performance Issues

There are some general optimization guidelines for using 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 following compiler options may result in performance gains: O3, [Q]ipo, and [Q]prof-use

- 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 these 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. Intel® compilers 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 macOS*, replace all instances of ld with xild; for Windows, replace all instances of link with xilink.

Parent topic: Interprocedural Optimization (IPO)

## See Also

IPO for Large Programs
O
prof-use, Qprof-use