I will look into this a bit tonight and see if I can get basic binding
logic implemented in IR2JVM. Thanks, Subbu!

On Mon, May 7, 2012 at 8:48 PM, Subramanya Sastry <sss.li...@gmail.com> wrote:
> I started working on implementing an explicit call protocol last week.
> It required me to clean up a few other bits which I did over several commits
> since y'day.
>
> I now committed a first cut at AddExplicitCallProtocolInstructions compiler
> pass.
>
> I tested this with the interpreter and it seeks to run fine.  There may be
> bugs in corner cases ... but I haven't run into it running rubyspecs, gem
> list, and irb.
>
> To take full advantage of this, you need to run the following 2 passes:
> AddLocalVarLoadStoreInstructions, AddExplicitCallProtocolInstructions, and
> implement compiler code for PushBinding, PopBinding, LoadLocalVar and
> StoreLocalVar instructions.
>
> Ex: jruby  -X-CIR
> -Xir.passes=OptimizeTempVarsPass,LocalOptimizationPass,DeadCodeElimination,AddLocalVarLoadStoreInstructions,AddCallProtocolInstructions,LinearizeCFG
> bench/bench_fib_recursive.rb
>
> Subbu.
>
> PS: There is one private patch for operands/TemporaryVariable that I have
> not yet committed -- this has got to do with handling use-before-defs in
> Ruby.  This is normally not required for tmps but with explicit load/store
> of local-vars, this becomes necessary since all local vars are now pushed
> into temp vars (and java local vars in the compiler).  This patch is
> required for gem list and for getting "green" on rubyspecs, for ex.   This
> only affects the interpreter, not the compiler since I presume you have this
> logic there anyway.   The patch is trivial (enclosed below)
>
>      @Override
>      public Object retrieve(ThreadContext context, IRubyObject self,
> DynamicScope currDynScope, Object[] temp) {
> -                 return temp[offset];
> +                 Object o = temp[offset];
> +                 return o == null ? context.nil : o;
>      }
>
> I have not committed this because I was hoping that we could find a way to
> eliminate this (both here and in DynamicScope.java:getValueOrNil ) by
> canonicalizing the instr stream to eliminate use-before-defs in ruby code --
> I dont yet have a cheap fix for it, so haven't implemented yet, but maybe I
> should just commit this patch and forget about it for now.

---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email


Reply via email to