Spread arguments would have been nice to have.

Another related messy argument issue, which took me a while to deal with, 
was handling
the receiver (this) object being on top of the stack. Since my GWT test 
needs to act on
the receiver I ended up caching an airity specific drop MH.  While is 
works is does seem to be
a complicated solution.  I was expecting something like a 'pop' but never 
found it.  Of 
course if I had a pop then a push would let one do top of stack 

As for PICs.  The more I think about them to messier they look from a 
generic api standpoint.
It does depend on the goal.  If its ease of use then its probably not as 
hard as if one wants to
fine tune the optimization. 

For me the simplest PIC is simply a test target extractor MH, a cache of 
choices and a fallback 
MH to handle cache misses.   The  simplest UI to this is to let the jvm 
make its own decisions 
on implementation.  The fallback MH would need the callsite bound to it to 
pass lookup values.
Taking the fallback path should also add to the cache and execute the 
found MH.  By putting all 
of the operations in one entity some of the hard to understand operations 
like extending the GWT 
chain and executing the found method are avoided.

Internally this PIC would do some amount of compare branches, if those 
fail a table lookup and if
that fails call the fallback.   I seem to recall a paper in the past that 
indicated 2 compare branches
was the big gain with no help after 5.  Of course the optimizer would be 
monitoring the MHs used
and move them between the table and the compare/branches.

This approach would require quite a bit of work on the jvm side.  Perhaps 
a simpler version would
just be a mult GWT (mgwt).  Is this case we would get a method handle 
which took a test target 
extractor MH, a table of tuples ( test target, MH) and a fallback.  It 
would just extract the test target, 
compare the N tuples and fallback on failure.  The only added complexity 
is how to update the table 
of tuples dynamically by the fallback. 

Perhaps we should redefine how fallback works to return a new MH to add to 
the table.  This
MH is added ( replacing the least used current value) and the MH executed. 
 This would also 
remove the need to provide and update the table.   So the constructor api 
would be 
(test extractor MH, fallback MH, callsite).  This api would be way simpler 
than the current one.


mlvm-dev mailing list

Reply via email to