The /inline_depth
qualifier sets the maximum level of
subprogram nesting that KAP will attempt to inline. Higher values
cause KAP to trace CALLs and function references further.
Consider the following simplified example:
PROGRAM EXDDEM REAL A,B,C,D,E,F,G CALL S1 (A,B) CALL S2 (C,D,E,F) CALL S3 (G) PRINT *,A,B,C,D,E,F,G END SUBROUTINE S1 (W,X) REAL W,X W=1.0 CALL S4(X) RETURN END
SUBROUTINE S2 (Q,R,S,T) REAL Q,R,S,T Q = 2.0 CALL S1 (R,S) CALL S3 (T) RETURN END SUBROUTINE S3 (U) REAL U U = 137.0 RETURN END SUBROUTINE S4 (V) REAL V V = 2.7 RETURN END
When run with /inline
and /inline_depth=4
, all the subroutines are inlined, including calls to calls to
calls, and the main program becomes:
PROGRAM EXDDEM REAL A,B,C,D,E,F,G EXTERNAL S4 A = 1.0 B = 2.7 C = 2.0 D = 1.0 E = 2.7 F = 137.0 G = 137.0 PRINT *, A, B, C, D, E, F, G END
When run with /inline
and /inline_depth=1
, meaning inline only one routine deep, all the CALLs in the main
program and subroutines are expanded, but CALLs in inlined routines
are not. The main program becomes:
PROGRAM EXDDEM REAL A,B,C,D,E,F,G EXTERNAL S4 A = 1.0 CALL S4 (B) C = 2.0 CALL S1 (D,E) CALL S3 (F) G = 137.0 PRINT *, A, B, C, D, E, F, G END
When run with /inline
and /inline_depth=-
1
(inline only routines that do not contain CALLs or FUNCTION
references), the main program becomes:
PROGRAM EXDDEM REAL A,B,C,D,E,F,G CALL S1 (A,B) CALL S2 (C,D,E,F) G = 137.0 PRINT *, A, B, C, D, E, F, G END
In this last case, only SUBROUTINEs S3
and
S4
could be inlined. Repeated runs with /inline_
depth=1
can be used to inline additional levels of routines.