6.6 Notes on Inlining and IPA

Functions to be inlined must pass all the criteria (inline, inline_depth, inline_looplevel ) to be inlined. The following directives are exceptions to this rule.

The #pragma _KAP [no]inline and #pragma _KAP [no]ipa directives, when enabled, override the /inline and /ipa command qualifiers, respectively.

A #pragma _KAP inline global directive without a function name list tells KAP to inline every function possible, regardless of the inline , inline_depth , and inline_looplevel settings. A #pragma _KAP noinline global directive tells KAP not to inline anything, regardless of the inline , inline_depth , and inline_ looplevel settings.

When a library is specified with /inline_from_libraries , functions may be taken from that library for inlining into the source code. No attempt is made to inline functions from the source file into functions from the library. For example, if the main program calls function bb , which is in the library, and bb calls function dd , which is in the source file, then bb can be inlined into the main program, but KAP will not attempt to inline dd into the text from library function bb .

A library created with /inline_create will work for inlining or IPA because it is just partially reduced source code. However, a library created with /ipa_create may not appear in an /inline_from_libraries= list; it is flagged with a Warning message.

Inlining and IPA are slow, memory-intensive activities. Specifying /inline_depth=10 /inline_looplevel=<big> , that is, inline all available functions everywhere they are used, for a large set of inlinable functions for a large source file can absorb significant system resources. For most programs, specifying small values for /inline_depth and /inline_looplevel and/or a small number of functions with /inline= can provide most of the benefits of inlining. The same applies for the corresponding /ipa command qualifiers.


Previous Page Next Page Contents Index
Command-Line Qualifiers