On the 0x418 day of Apache Harmony Okonechnikov Konstantin wrote:
> On 31 Mar 2008 16:52:41 +0400, Egor Pasko <[EMAIL PROTECTED]> wrote:
> >
> > On the 0x417 day of Apache Harmony Okonechnikov Konstantin wrote:
> > > In addition to previous letter:
> > > - I removed DoSimplify flag from IrBuilderFlags and all code connected
> > to it
> > > , but didn't removed simplifier yet.
> > > First reason is that,there are some problems with removing
> > simplification
> > > from
> > > IRBuilder::genTauCheckNull(Opnd* opnd, bool &alwaysThrows)
> > > IRBuilder::genTauCheckZero(Opnd* opnd, bool &alwaysThrows)
> > > IRBuilder::simplifyTauCheckDivOpnds(Opnd* src1, Opnd* src2, bool
> > > &alwaysThrows)
> >
> >
> > what is with these methods?
> >
> >
> > > Well, I figured out that simply removing simplification here doesn't
> > work
> > > :)
> >
> >
> > what happens? :)
>
>
> It looks like some dark magic or maybe late night hours
> :), now everyting seems to be OK, I removed
> simplification. Nevertheless, I beware of nasty warning inside
> IRBuilder::genTauCheckNull(...):
> ...
> // Not advisable to turn off simplification of checknull because
> // IRBuilder calls genTauCheckNull redundantly many times
this comment is obsolete. I see nothing wrong in duplicated chknulls
during translation. Should be eliminated by copy propagation and CSE.
> // ...then it does simplify without asking the flag
> ...
yeah, funny
I also liked this output parameter namely alwaysThrows, it is never used :)
>
> I am working now on removing propgate copy and SCE. Testing on HelloWorld.
> If there were such code:
>
> Opnd* IRBuilder::genAdd(Type* dstType, Modifier mod, Opnd* src1, Opnd*
> src2) {
> src1 = propagateCopy(src1);
> src2 = propagateCopy(src2);
> Operation operation(Op_Add, dstType->tag, mod);
> uint32 hashcode = operation.encodeForHashing();
> Opnd* dst = lookupHash(hashcode, src1, src2);
> if (dst) return dst;
> if (!dst) {
> dst = createOpnd(dstType);
> Inst *newi = instFactory->makeAdd(mod, dst, src1, src2);
> appendInst(newi);
> }
> insertHash(hashcode, src1, src2, dst->getInst());
> return dst;
> }
>
> It becomes like this:
>
> Opnd* IRBuilder::genAdd(Type* dstType, Modifier mod, Opnd* src1, Opnd* src2)
> {
> Operation operation(Op_Add, dstType->tag, mod);
> Opnd* dst = createOpnd(dstType);
> Inst *newi = instFactory->makeAdd(mod, dst, src1, src2);
> appendInst(newi);
> return dst;
> }
>
> Is everything OK?
--
Egor Pasko