harmony-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Mikhail Fursov" <mike.fur...@gmail.com>
Subject Re: [DRLVM][Helper inlining] GC write barrier inline?
Date Tue, 12 Dec 2006 15:05:11 GMT
Xiao Feng,
I put the initial patch to HARMONY-2652.
This patch runs all scenarios using gc_gen that I can run without helpers
inlined.

Let's wait H2500 is commited and I can update the patch with diff derived
from svn update.

On 12/12/06, Mikhail Fursov <mike.fursov@gmail.com> wrote:
>
> Xiao Feng,
> I missed one very important line in gc_heap_slot_write_ref:
>   *p_slot = p_target;
>
> and now I understand why replacing the old call with WB helper you sent in
> the initial message does not work.
> I'm going to add store operation into the helper now and retest it.
>
> + I'm ok to discuss and clean up GC interface as you proposed after the
> most simple version of WB is working.
>
>
> On 12/12/06, Xiao-Feng Li < xiaofeng.li@gmail.com> wrote:
> >
> > Mikhail, the gc_heap_slot_write_ref  is an old GC interface in ORP.
> > The original idea for this interface is, any Java heap slot reference
> > store should go through this GC function, including VM and Java
> > application. So this function does the real reference store, the
> > original store in JITted code will not be emitted. Hence the OPT write
> > barrier has no problem.
> >
> > The problem with this interface is, it has no clear definition about
> > whether a write barrier is needed or not. That's why I suggested to
> > use a new interface gc_heap_slot_write_barrier for the helper inlining
> > work. The code for it is the same as gc_heap_slot_write_ref for
> > generational GC (without the check for needing barrier or not). Since
> > the WB inlined helper is only invoked when generational GC is run, the
> > check is redundant completely.
> >
> > I am not sure if I make it clear.
> >
> > Thanks,
> > xiaofeng
> >
> > On 12/11/06, Mikhail Fursov <mike.fursov@gmail.com> wrote:
> > > Xiao-Feng,
> > > I'm slightly confused about current WB support in Jitrino.OPT, so I
> > need an
> > > advice.
> > >
> > > The problem: I think that write barriers in Jitrino OPT do not work.
> > >
> > > Example (see for lines marked with =>):
> > >
> > >
> > > HIR with WB disabled:
> > >
> > >   I1:defarg.ths -) t1:cls:java/net/URLClassLoader$4
> > >   I2:tauisnonnull      t1 -) t2:tau
> > >   I3:tauhastype      t1,cls:java/net/URLClassLoader$4 -) t3:tau
> > >   I4:defarg -) t4:cls:java/net/URLClassLoader
> > >   I5:tauhastype      t4,cls:java/net/URLClassLoader -) t5:tau
> > >   I6:defarg -) t6:cls:java/lang/String
> > >   I7:tauhastype      t6,cls:java/lang/String -) t7:tau
> > >   I8:ldflda    [t1.java/net/URLClassLoader$4::this$0] -)
> > > t8:ref:cls:java/net/URLClassLoader
> > > =>  I9:stind.unc:o   t4 ((t2,t3,t5)) -) [t8]
> > >   I10:ldflda    [t1.java/net/URLClassLoader$4::val$clsName] -)
> > > t9:ref:cls:java/lang/String
> > > =>  I11: stind.unc:str t6 ((t2,t3,t7)) -) [t9]
> > >   I12:tauunsafe() -) t10:tau
> > >   I13:call      java/lang/Object::_init_(t1) ((t2,t10)) -)
> > >
> > >
> > > The same HIR with WB enabled:
> > >
> > >   Successors: L5 UNWIND
> > >   I1:defarg.ths -) t1:cls:java/net/URLClassLoader$4
> > >   I2:tauisnonnull      t1 -) t2:tau
> > >   I3:tauhastype      t1,cls:java/net/URLClassLoader$4 -) t3:tau
> > >   I4:defarg -) t4:cls:java/net/URLClassLoader
> > >   I5:tauhastype      t4,cls:java/net/URLClassLoader -) t5:tau
> > >   I6:defarg -) t6:cls:java/lang/String
> > >   I7:tauhastype      t6,cls:java/lang/String -) t7:tau
> > >   I8:ldflda    [t1.java/net/URLClassLoader$4::this$0] -)
> > > t8:ref:cls:java/net/URLClassLoader
> > > =>  I9:stref.wb.unc   t4 ((t2,t3,t5)) -) [t8 t1]
> > >   I10:ldflda    [t1.java/net/URLClassLoader$4::val$clsName] -)
> > > t9:ref:cls:java/lang/String
> > > =>  I11: stref.wb.unc   t6 ((t2,t3,t7)) -) [t9 t1]
> > >   I12:tauunsafe() -) t10:tau
> > >   I13:call      java/lang/Object::_init_(t1) ((t2,t10)) -)
> > >
> > >
> > >
> > > The LIR with WB disabled
> > >
> > >     I1: t4:ref:cls:java/net/URLClassLoader (ID:s5(EFLGS):uint32) =ADD
> > >
> > t0:cls:java/net/URLClassLoader$4,t3(0:fo:java/net/URLClassLoader$4.this$0):intptr
> > >
> > > =>    I2: (AD:t6[t4]:object) =CopyPseudoInst/MOV
> > > (AU:t1:cls:java/net/URLClassLoader)
> > >     I3: t8:ref:cls:java/lang/String (ID:s5(EFLGS):uint32) =ADD
> > >
> > t0:cls:java/net/URLClassLoader$4,t7(0:fo:java/net/URLClassLoader$4.val$clsName):intptr
> > >
> > > =>    I4: (AD:t9[t8]:string) =CopyPseudoInst/MOV
> > > (AU:t2:cls:java/lang/String)
> > >
> > >
> > >
> > >
> > > The same LIR with WB enabled
> > >
> > >     I1: t4:ref:cls:java/net/URLClassLoader (ID:s5(EFLGS):uint32) =ADD
> > >
> > t0:cls:java/net/URLClassLoader$4,t3(0:fo:java/net/URLClassLoader$4.this$0):intptr
> >
> > >
> > > =>    I2: CALL t6(0:h:WriteBarrier):ptr:intptr
> > >
> > (AU:t0:cls:java/net/URLClassLoader$4,t4:ref:cls:java/net/URLClassLoader,t1:cls:java/net/URLClassLoader)
> > >
> > >     I3: t8:ref:cls:java/lang/String (ID:s5(EFLGS):uint32) =ADD
> > >
> > t0:cls:java/net/URLClassLoader$4,t7(0:fo:java/net/URLClassLoader$4.val$clsName):intptr
> > >
> > > =>    I4: CALL t9(0:h:WriteBarrier):ptr:intptr
> > >
> > (AU:t0:cls:java/net/URLClassLoader$4,t8:ref:cls:java/lang/String,t2:cls:java/lang/String)
> >
> > >
> > >
> > >
> > > The question is what is in the CALL? I see only the method:
> > > gc_heap_slot_write_ref and this method does not save anything into
> > fields.
> > > Does it mean that WB support in Jitrino.OPT is incomplete today?
> > >
> > > --
> > > Mikhail Fursov
> > >
> > >
> >
>
>
>
> --
> Mikhail Fursov




-- 
Mikhail Fursov

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message