harmony-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Egor Pasko <egor.pa...@gmail.com>
Subject Re: [drlvm][jit] Instoptimizer in MemoryValueNumberingPass
Date Wed, 14 May 2008 12:03:03 GMT
On the 0x444 day of Apache Harmony Simon Chow wrote:
> Egor,
> Thank you every much, it is very helpful.
> AFAIK, only write barrier has been implemented in harmony, my goal is
> implementing read barrier for gen GC and concurrent GC,

yes, we only have write barriers now

> As a result, a command option such as generate_read_barrier=true/false is
> added to DRLVM.
> If it is true, GC use information intercepted by read barrier to perform gen
> or concurrent collection instead of using write barrier.
> Maybe the performance will not be better than write barrier, but I think it
> is a good practice to understand the internal of both JIT and GC, do you
> think so?

yes, both a good practice and a good experiment. Good luck!

> 2008/5/13 Egor Pasko <egor.pasko@gmail.com>:
> 
> > On the 0x442 day of Apache Harmony Simon Chow wrote:
> > > Hi all
> > > I am trying to add read barriers mechanism in DRLVM ( just for practice
> > :=)
> > > )
> > > As the first step, I am inserting read barrier inst in HIR,
> > > I define a new modifier set like this:
> > > enum LoadModifier {
> > >     Load_NoReadBarrier       = 0x1 << 27,
> > >     Load_ReadBarrier       = 0x2 << 27,
> > >     Load_Mask         = 0x3 << 27,
> > >     LoadModifier_IsShiftedBy = 27,
> > >     LoadModifier_BitsToEncode = 1,
> > >     LoadModifier_BitsConsumed = 2
> > > };
> > > it will be used in TauLdInd.
> >
> > you want to optimise some barriers out, right?
> > looks good
> >
> > > My question is about Instoptimizer of MemoryValueNumberingPass, I am not
> > > familiar with it.
> > > First,
> > > What is this pass mainly used for?
> >
> > MemOpt is used to eliminate unnecessary store+load pairs. It puts
> > corresponding operations into a hash. Then eliminates loads if sees
> > loads in this hash.
> >
> > > Second,
> > > In the caseTauStInd case of the switch in dispatch method:
> > >
> > > Modifier mod(Modifier(inst->getAutoCompressModifier()) |
> > > Modifier(Speculative_No) );
> > > setHashToInst(inst, getKey(Operation(Op_TauLdInd, inst->getType(), mod),
> > > addrOp->getId()));
> > >
> > > What does it do here? Why is Op_TauLdInd  used in a caseTauStInd case?
> >
> > load operation is stored as if it is there. So, if you have a new load
> > op you search if there is the same one in the hash.
> >
> 
> Why does it use Modifier(Speculative_No) instead of
> inst->getSpeculativeModifier() ?
> Thanks
> 
> 
> > --
> > Egor Pasko
> >
> >
> 
> 
> -- 
> From : Simon.Chow@Software School of Fudan University

-- 
Egor Pasko


Mime
View raw message