7.4.6 Notes on Inlining and IPA

Routines to be inlined must pass all the criteria (/inline=, /inline_looplevel, /inline_depth ) to be inlined.

The C*$* [no]inline and C*$* [no]ipa directives, when enabled, override the inlining/IPA command qualifiers.

A C*$* inline global directive without a name list tells KAP to inline every routine it can, regardless of the /inline , /inline_depth , and /inline_looplevel settings. A C*$* noinline global directive tells KAP not to inline anything, regardless of the /inline, /inline_depth, and /inline_looplevel settings. The C*$* inline and C*$* ipa directives are disabled by default; they are enabled when any inlining or IPA command qualifier is specified.

When a library is specified with /inline_from_libraries , routines may be taken from that library for inlining into the source code. No attempt is made to inline routines from the source file into routines from the library. For example, if the main program calls routine BB, which is in the library, and BB calls routine 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 routine 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. Attempting to do so is flagged with a Warning message.

Inlining and IPA are slow, memory-intensive activities. Specifying large values for /inline_looplevel and /inline_ depth (inline all available routines everywhere they are used) for a large set of inlinable routines for a large source file can absorb significant system resources. For most programs, specifying small values for /inline_looplevel and /inline_depth and/or a small number of routines with /inline= can provide most of the benefits of inlining. The same applies for the IPA qualifiers.


Previous Page | Next Page | Contents | Index |
Command-Line Qualifiers