Using interprocedural analysis
Interprocedural analysis (IPA) enables the compiler to optimize across different files (whole-program analysis), and it can result in significant performance improvements.
You can specify interprocedural analysis on the compilation step only or on both compilation and link steps in whole program mode. Whole program mode expands the scope of optimization to an entire program unit, which can be an executable or a shared object. As IPA can significantly increase compilation time, you should limit using IPA to the final performance tuning stage of development.
You can generate relinkable objects while preserving IPA information by specifying -r -qipa=relink. This creates a nonexecutable package that contains all object files. By using this suboption, you can postpone linking until the very last stage.
If you want to use your own archive files while generating the nonexecutable package, you can use the ar tool and set the XL_AR environment variable to point to the ar tool. For details, refer to the -qipa section of the XL C Compiler Reference.
You can enable IPA by specifying the -qipa option. The most commonly used suboptions and their effects are described in the following table. The full set of suboptions and syntax is described in -qipa .
- Do preliminary performance analysis and tuning before compiling with the -qipa option, because the IPA analysis uses a two-pass mechanism that increases compilation time and link time. You can reduce some compilation and link overhead by using the -qipa=noobject option.
- Specify the -qipa option on both the compilation and the link steps of the entire application, or as much of it as possible. Use suboptions to indicate assumptions to be made about parts of the program not compiled with -qipa.
Suboption | Behavior |
---|---|
level=0 | Program partitioning and simple interprocedural
optimization, which consists of:
|
level=1 | Inlining and global data mapping. Specifically:
|
level=2 | Global alias analysis, specialization, interprocedural
data flow:
|
inline=suboptions | Provides precise control over function inlining. |
fine_tuning | Other values for -qipa provide the ability to specify the behavior of library code, tune program partitioning, read commands from a file, and so on. |
relink | Creates a nonexecutable package that contains all of your object files while preserving IPA information. |
- XL C/C++ and XL Fortran provide backwards compatibility with IPA objects that are created by earlier compiler versions. If IPA object files that are compiled with newer versions of compilers are linked by an earlier version, errors occur during the link step. For example, if IPA object file a.o is compiled by XL C/C++, V13.1.3 and is to be linked with IPA object file b.o that is compiled by XL Fortran, V15.1.0, then you must use a compiler whose version is XL C/C++, V13.1.3 or later.
- XL C/C++ and XL Fortran versions released at the same time produce
matching IPA level information and can be linked together. For example,
the IPA for XL C/C++, V13.1.3 matches with the IPA for XL Fortran,
V15.1.3, because these compilers are released at the same time. For
example, the IPA level for XL C/C++, V13.1.3 matches with the IPA
for XL Fortran, V15.1.3. The following table lists some matching XL
C/C++ and XL Fortran releases:
Table 2. Compiler versions and release date Compiler version General availability (Release date) XL C for AIX®, V13.1.3
XL C/C++ for AIX, V13.1.3
XL Fortran for AIX, V15.1.3
11-Dec-2015 XL C for AIX, V13.1.0
XL C/C++ for AIX, V13.1.0
XL Fortran for AIX, V15.1.0
06-Jun-2014 XL C for AIX, V12.1.0
XL C/C++ for AIX, V12.1.0
XL Fortran for AIX, V14.1.0
18-May-2012 For more information about the release dates of compiler products, see http://www-01.ibm.com/software/support/lifecycle/index_x.html
If your compiler version has two release dates on the Support Lifecycle web site, determine the date based on your product ID.