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.