harmony-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Xiao-Feng Li" <xiaofeng...@gmail.com>
Subject Re: [DRLVM][Helper inlining] GC write barrier inline?
Date Wed, 13 Dec 2006 01:51:20 GMT
Great. I will try to evaluate it if it works well in my environment.

Thanks,
xiaofeng

On 12/12/06, Mikhail Fursov <mike.fursov@gmail.com> wrote:
> 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
View raw message