Understanding IPO-Related Performance Issues

There are some general optimization guidelines for IPO that you should keep in mind:

In addition to the general guidelines, there are some practices to avoid while using IPO. The following list summarizes the activities to avoid:

There are two key aspects to achieving improved performance with IPO:

  1. Manipulating inlining heuristics

  2. Applicability of whole program analysis

Whole Program Analysis (WPS), when it can be done, enables many IP optimizations. It is sometimes misunderstood. During the WPS process, the compiler reads all .il, .obj, and .lib files to determine if all references are resolved and whether or not a given symbol is defined in an .il file.

Symbols that are included in an .il file for both data and functions are candidates for Whole Program manipulation. Currently, .il information is generated for files compiled with IPO. The compiler embeds .il information inside the objects so that IPO information can be included inside libraries, DLLs, and shared objects.

A Key Relationship for Application Performance

A variable or function that is defined in a module with IL and is never referenced in a module without IL is subject to WP optimizations. Other variables (and functions) are not subject to these optimizations. A number of important IPO optimizations can be controlled with internal switches and IP optimization masks.