On Sun, Jan 26, 2014 at 12:28 AM, Charles Oliver Nutter <head...@headius.com
> wrote:

> I've been working on the IR JIT recently, getting more method argument
> forms working and reducing the manual specialization I do in the
> compiler. More code is working because of that, but it increases the
> need for us to get to a baseline from which we can start specializing
> and improving the IR.
>
> I attempted to look at heap-scoping today and ran into a couple things
> that kept me from making much progress.
>
> 1. Pre/post logic for heap scope and frame
>
> Currently the pre/post logic for creating, pushing, and popping
> DynamicScope and Frame still lives in the InterpretedIRMethod and
> InterpretedIRBlockBody classes, surrounding the actual downcall into
> the interpreter. This complicates my job because I either have to
> duplicate this logic as-is (ultimately doing scoping, framing, and
> backtrace for all IR JIT bodies), or try to do the same ugly
> inspection of the scope when defining the method to know if I can omit
> it.
>
> I know several flags were also added to IRScope to aid this
> inspection, but it now feels like the wrong approach.
>
> I believe we need to move more into explicit call protocols
> (instructions to push scope/frame/binding, etc) in the IR, so I can
> simply emit the right instructions. I have been unable to find any
> method that compiles with explicit call protocols so far.
>

I would like to take this a step further (or at least entertain) that
pushFrame is fine but having instrs for each element of frame we care about
would be better.   subbu addresses the whole frame/scope with
AddCallProtocolInstructions but I am hoping we can reentertain the idea of
spaghetti stacks for things like visibility and only push/pop where it is
needed and to omit it as much as possible.

For interp I would like these instrs to be grouped so that they can easily
be omitted (possibly a BB for this setup).



> In pursuit of that baseline, I may just duplicate the same implicit
> call protocol, so we can at least get closures and heap-scope-aware
> methods working from IR JIT.
>
> 2. RuntimeHelperCall and related methods
>
> This logic is used for handling non-local break and return.
> Unfortunately it uses rather complicated logic that depends on having
> the original IRScope around. Encoding all the necessary information
> into the jitted output started to look pretty hairy, so I passed on it
> for now.
>
> The three methods this instructions calls should probably be stood up
> as their own operations.
>
> ...
>
> I can continue duplicating the interpreter's behavior in the jitted
> output, so I'm not stuck yet. This won't give us very good
> performance, but it will get more code running. IR JIT performance is
> going to be heavily dependent on how well we're able to specialize
> arity, binding use, and so on...within the IR, before passing down to
> the JIT.
>
> - Charlie
>
> ---------------------------------------------------------------------
> To unsubscribe from this list, please visit:
>
>     http://xircles.codehaus.org/manage_email
>
>
>


-- 
blog: http://blog.enebo.com       twitter: tom_enebo
mail: tom.en...@gmail.com

Reply via email to