Hi,
Got a copy of the Loch Ness Monster of compilers -- the (in) famous STALIN compiler. -- comes with the text :
One aggressive optimization that differentiates Stalin (no pun intended, ref StalinGrad) somewhat, is its inlining of callbacks. For example a generic numeric multidimensional integral library would take a callback that implements the function that needs to be integrated. This function is typically computed several hundreds of thousands of times in a very tight hot loop incurring a call overhead on each one. In a C library such callbacks cannot be inlined as it is compiled ahead of time. The whole program analysis paradigm helps a lot in determining the callback function and inlining it in place, this triggers more opportunities for more conventional optimizations.
-- can some one explain this
Writing the Japi headers for the moment -- ( it works upto now -- but I'm only at around 30 foreign functions (rather boring job))
a typical out put when compiling (takes a looooong time)
------------------ ------------
there's always RM failed , but the exec works perfectly
C:\Stalin0.11>stalingraph japitest.sc
Reading source
Expanding macros
Fast tree shake
Annotating expressions with their parents
Annotating variables with their environments
Annotating expressions with their environments
In-lining first-order calls to primitive procedures
Annotating expressions with their parents
Annotating variables with their environments
Annotating expressions with their environments
Annotating variables with their references
Performing flow analysis
Enumerating call sites
Determining which types and type sets are used
17191 expressions
0 internal symbol types
0 external symbol types
17 primitive procedure types
241 non-called native procedure types
364 called noop native procedure types
63 called non-noop native procedure types
12 foreign procedure types
0 continuation types
2 string types
1 structure type
8 headed vector types
1 nonheaded vector type
0 displaced vector types
19601 type sets
710 hunoz variables
1689 non-hunoz variables
585 noop environments
1607 non-noop environments
0 call sites dispatch on clones
Maximal non-LET lexical nesting depth is 4
Maximal clone rate is 1
Determining which call sites to split
Performing flow analysis
Enumerating call sites
Determining which types and type sets are used
17191 expressions
0 internal symbol types
0 external symbol types
17 primitive procedure types
241 non-called native procedure types
364 called noop native procedure types
63 called non-noop native procedure types
12 foreign procedure types
0 continuation types
2 string types
1 structure type
8 headed vector types
1 nonheaded vector type
0 displaced vector types
19601 type sets
710 hunoz variables
1689 non-hunoz variables
585 noop environments
1607 non-noop environments
0 call sites dispatch on clones
Maximal non-LET lexical nesting depth is 4
Maximal clone rate is 1
Determining which call sites to split
2 passes of flow analysis
Computing call graph
Determining which environments are called more than once
Determining which variables are referenced
Determining free variables
Determining necessarily-fictitious native procedure types
Annotating environments and continuation types
Inverting points-to relation
Determining escaping types
Determining which environments have unique call sites
Determining which environments are recursive
Determining which environments are reentrant
Asserting uniqueness
Performing lightweight closure conversion
Determining parents
Determining which expressions need conversion to CPS
3742 expressions
0 internal symbol types
0 external symbol types
17 primitive procedure types
241 non-called native procedure types
364 called noop native procedure types
63 called non-noop native procedure types
12 foreign procedure types
0 continuation types
2 string types
1 structure type
8 headed vector types
1 nonheaded vector type
0 displaced vector types
4739 type sets
368 hunoz variables
618 non-hunoz variables
0 noop environments
63 non-noop environments
0 call sites dispatch on clones
Maximal non-LET lexical nesting depth is 4
Maximal clone rate is 1
Determining environment distances from root
Determining which environments have external self tail calls
Determining which environments have external continuation calls
Determining blocked environments
Determining which environments need to pass parameters globally
Determining allocations
Applying closed-world assumption
Determining indirect structure types
Determining which types are never allocated on the heap
Determining which types are atomic
Determining which environments have regions
Determining which type sets are squeezable
Determining which type sets are squishable
Determining alignments
Assigning global squish tags
W17192 is general case for the following reasons:
nondegenerate nonheaded vector
Generating code
In [inside LOOP 796]
Argument to STRUCTURE-REF might not be a structure of the correct type
Removing unused declarations
Removing unused labels
Generating C code
Writing database
Compiling C code
gcc -I . -I c:/stalin0.11/include -I c:/stalin-0.11.1/include -o japitest japitest.c -fno-strict-aliasing -ljapi -lwsock32 -L . -L c:/stalin0.11/include -L c:/stalin-0.11.1/include -lm -lstalin
RM failed
C:\Stalin0.11>japitest
C:\Stalin0.11>
best Rob , t.i.a