The following example demonstrates inlining with
/inline=setup , where only the function
setup will be inlined, and with /inline ,
where both functions are inlined. The KAP output includes optimized
versions of both functions, in addition to the expanded main
program, as follows:
Source file (before the C preprocessor):
#include <math.h>
#include <stdio.h>
#define SIZE 200
main ()
{
int i,n;
double a[SIZE][SIZE], b[SIZE][SIZE], c[SIZE][SIZE];
double cksum, matm();
setup(b,SIZE);
setup(c,SIZE);
for (n=25; n<=SIZE; n=n+25)
{
cksum = matm(n,a,b,c);
printf("For N= %d checksum= %g \n", n, cksum);
}
}
setup (e,n)
double e[SIZE][SIZE];
int n;
{
int i,j;
for(i=0; i<n; i++)
{
for (j=0; j<n; j++)
e[i][j] = ( (i+ 7*j) % 10 )/10.0;
}
return;
}
double matm (n,a,b,c)
int n;
double a[SIZE][SIZE], b[SIZE][SIZE], c[SIZE][SIZE];
{
int i,j,k;
for (i=0; i<n; i++)
for (j=0; j<n; j++)
{
a[i][j] = 0.0 ;
for (k=0; k<n; k++)
a[i][j] = a[i][j] + b[i][k]*c[k][j];
}
return (a[3][5]);
}
The main function generated by /inline=setup is as
follows:
int main( )
{
int i;
int n;
double a[200][200];
double b[200][200];
double c[200][200];
double cksum;
double matm( );
int _Kii3;
int j;
int _Kii6;
int _Kii7;
for ( _Kii3 = 0; _Kii3<=199; _Kii3++ ) {
for ( j = 0; j<=199; j++ ) {
b[_Kii3][j] = ((_Kii3 + j * 7) % 10) / 10.0;
}
}
for ( _Kii6 = 0; _Kii6<=199; _Kii6++ ) {
for ( _Kii7 = 0; _Kii7<=199; _Kii7++ ) {
c[_Kii6][_Kii7] = ((_Kii6 + _Kii7 * 7) % 10) / 10.0;
}
}
for ( n = 25; n<=200; n+=25 ) {
cksum = matm( n, a, b, c );
printf( "For N= %d checksum= %g \n", n, cksum );
}
}
The main function generated by /inline is as follows:
int main( )
{
int i;
int n;
double a[200][200];
double b[200][200];
double c[200][200];
double cksum;
double matm( );
double _Kaa1;
int _Kii2;
int j;
int k;
int _Kii5;
int _Kii6;
int _Kii9;
int _Kii10;
for ( _Kii5 = 0; _Kii5<=199; _Kii5++ ) {
for ( _Kii6 = 0; _Kii6<=199; _Kii6++ ) {
b[_Kii5][_Kii6] = ((_Kii5 + _Kii6 * 7) % 10) / 10.0;
}
}
for ( _Kii9 = 0; _Kii9<=199; _Kii9++ ) {
for ( _Kii10 = 0; _Kii10<=199; _Kii10++ ) {
c[_Kii9][_Kii10] = ((_Kii9 + _Kii10 * 7) % 10) / 10.0;
}
}
for ( n = 25; n<=200; n+=25 ) {
for ( _Kii2 = 0; _Kii2<n; _Kii2++ ) {
for ( j = 0; j<n; j++ ) {
a[_Kii2][j] = 0.0;
for ( k = 0; k<n; k++ ) {
a[_Kii2][j] += b[_Kii2][k] * c[k][j];
}
}
}
_Kaa1 = a[3][5];
cksum = _Kaa1;
printf( "For N= %d checksum= %g \n", n, cksum );
}
}