Using compiler reports to diagnose optimization opportunities

You can use the -qlistfmt option to generate a compiler report in XML 1.0 format that indicates some of the details of how your program was optimized. You can use this information to understand your application code and to tune your code for better performance.

The compiler report in XML format can be viewed in a browser that supports XSLT. If you compile with the stylesheet suboption, -qlistfmt=xml=all:stylesheet=xlstyle.xsl, the report will contain a link to a stylesheet that renders the XML readable and provides you with opportunities to improve the optimization of your code. You can also create tools to parse this information.

Inline reports

If compiled with -qinline and -qlistfmt=xml=inlines or -qlistfmt=xml=all, the compiler report generated includes a list of inline attempts during the compilation. The report also specifies the type of attempt and its outcome.

For each function that the compiler has attempted to inline, there is an indication of whether or not the inline was successful. The report might contain any number of explanations for a named function that has not been successfully inlined. Some examples of these explanations are:
  • FunctionTooBig - The function is too big to be inlined
  • RecursiveCall - The function is not inlined because it is recursive.
  • ProhibitedByUser - Inlining was not performed because of a user specified pragma or directive.
  • CallerIsNoopt - No inlining was performed because the caller was compiled without optimization.
  • WeakAndNotExplicitlyInline The calling function is weak and not marked as inline.

For a complete list of the possible explanations, see the Inline optimization types section of the XML schema file called XMLContent.html that is in the /usr/vacpp/listings/ directory.

Loop transformations

If compiled with -qhot and -qlistfmt=xml=transforms or -qlistfmt=xml=all, the compiler report generated includes a list of the transformations performed on all loops in the file during the compilation. It also lists reasons why some transformations were not performed. These might include:
  • Reasons why a loop could not be automatically parallelized
  • Reasons why a loop could not be unrolled
  • Reasons why SIMD vectorization failed

For a complete list of the possible transformation problems, see the Loop transformation types section of the XML schema file called XMLContent.html that is in the /usr/vacpp/listings/ directory.

Data reorganizations

If compiled with -qhot and -qlistfmt=xml=data or -qlistfmt=xml=all, the compiler report generated includes a list of data reorganizations performed on the program during compilation. These data reorganizations include:
  • Array splitting
  • Array coalesce
  • Array interleaving
  • Array transposition
  • Memory merge

For each of these reorganizations, the report contains details about the name of the data, filenames, line numbers and the region names.

Profile-directed feedback reports

If compiled with -qpdf and -qlistfmt=xml=pdf or -qlistfmt=xml=all, the compiler report generated includes:
  • Loop iteration counts
  • Block and call counts
  • Cache misses (if compiled with -qpdf1=level=2)