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: Huge performance regression commit: svn commit: r602061
Date Mon, 10 Dec 2007 12:44:40 GMT
The reason is deoptimization of PseudoCanThrow insts. This patch is
stability patch and won't be reverted for M4, but we have a cmd-line option
to restore old behavior.

I start to work on this problem and think we can get the same performance as
before without doing hacks with PseudoThrows

On 08 Dec 2007 19:10:30 +0300, Egor Pasko <egor.pasko@gmail.com> wrote:

> On the 0x3A6 day of Apache Harmony Sergey Kuksenko wrote:
> > Hi All,
> >
> > I have to notify you that this commit causes -10% performance regression
> on
> > some benchmarks.
> > From my point of view it is not accectable.
>
> Sergey, is that because the patch disables OSR or due to inliner
> changes? or maybe safepoint changes?
>
> Mikhail, this is at least three fixes in one commit:) I understand
> that it was easier for you to commit all three in one row (run tests
> once), but it makes no simple guess what parts cause performance
> degradation....
>
> I hope I am being not very .. ehm .. critical :)
>
> >
> > On 12/7/07, mfursov@apache.org <mfursov@apache.org> wrote:
> > >
> > > Author: mfursov
> > > Date: Fri Dec  7 02:32:39 2007
> > > New Revision: 602061
> > >
> > > URL: http://svn.apache.org/viewvc?rev=602061&view=rev
> > > Log:
> > > Fix for HARMONY-4785 [drlvm][jit][opt] EHWA asserts in server_static
> mode
> > > +Regression tests
> > > +OSR optimization was disabled in all modes. It will be reenabled
> after M4
> > > release.
> > >
> > >
> > > Added:
> > >    harmony/enhanced/drlvm/trunk/src/test/regression/H4785/
> > >    harmony/enhanced/drlvm/trunk/src/test/regression/H4785/Test.java
> > > (with props)
> > >    harmony/enhanced/drlvm/trunk/src/test/regression/H4785/run.test.xml
> > > (with props)
> > > Modified:
> > >    harmony/enhanced/drlvm/trunk/vm/jitrino/config/em64t/opt.emconf
> > >    harmony/enhanced/drlvm/trunk/vm/jitrino/config/em64t/server.emconf
> > >
> > >
> harmony/enhanced/drlvm/trunk/vm/jitrino/config/em64t/server_static.emconf
> > >    harmony/enhanced/drlvm/trunk/vm/jitrino/config/ia32/opt.emconf
> > >    harmony/enhanced/drlvm/trunk/vm/jitrino/config/ia32/server.emconf
> > >
> > >
> harmony/enhanced/drlvm/trunk/vm/jitrino/config/ia32/server_static.emconf
> > >
> > >
> harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32GCSafePoints.cpp
> > >    harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/FlowGraph.cpp
> > >    harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/inliner.cpp
> > >    harmony/enhanced/drlvm/trunk/vm/jitrino/src/shared/BitSet.cpp
> > >
> > > Added:
> harmony/enhanced/drlvm/trunk/src/test/regression/H4785/Test.java
> > > URL:
> > >
> http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/src/test/regression/H4785/Test.java?rev=602061&view=auto
> > >
> > >
> ==============================================================================
> > > --- harmony/enhanced/drlvm/trunk/src/test/regression/H4785/Test.java
> > > (added)
> > > +++ harmony/enhanced/drlvm/trunk/src/test/regression/H4785/Test.java
> Fri
> > > Dec  7 02:32:39 2007
> > > @@ -0,0 +1,46 @@
> > > +/*
> > > + *  Licensed to the Apache Software Foundation (ASF) under one or
> more
> > > + *  contributor license agreements.  See the NOTICE file distributed
> with
> > > + *  this work for additional information regarding copyright
> ownership.
> > > + *  The ASF licenses this file to You under the Apache License,
> Version
> > > 2.0
> > > + *  (the "License"); you may not use this file except in compliance
> with
> > > + *  the License.  You may obtain a copy of the License at
> > > + *
> > > + *     http://www.apache.org/licenses/LICENSE-2.0
> > > + *
> > > + *  Unless required by applicable law or agreed to in writing,
> software
> > > + *  distributed under the License is distributed on an "AS IS" BASIS,
> > > + *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> > > implied.
> > > + *  See the License for the specific language governing permissions
> and
> > > + *  limitations under the License.
> > > + */
> > > +package org.apache.harmony.drlvm.tests.regression.h4785;
> > > +
> > > +import junit.framework.TestCase;
> > > +
> > > +public class Test extends TestCase {
> > > +
> > > +
> > > +
> > > +    public void test() {
> > > +        blit(1, null);
> > > +    }
> > > +
> > > +    static boolean f = true;
> > > +    static void blit(int destX, byte[] destData) {
> > > +        if (f) return;
> > > +        int dx = destX;
> > > +        int indexq = 0;
> > > +        int dtype=1;
> > > +        for(; dx > 0; ) {
> > > +            switch(dtype) {
> > > +                default:
> > > +                    break;
> > > +                case 10: // '\n'
> > > +                        indexq = destData[0];
> > > +                break;
> > > +            }
> > > +        }
> > > +    }
> > > +
> > > +}
> > >
> > > Propchange:
> > > harmony/enhanced/drlvm/trunk/src/test/regression/H4785/Test.java
> > >
> > >
> ------------------------------------------------------------------------------
> > >    svn:eol-style = native
> > >
> > > Added:
> harmony/enhanced/drlvm/trunk/src/test/regression/H4785/run.test.xml
> > > URL:
> > >
> http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/src/test/regression/H4785/run.test.xml?rev=602061&view=auto
> > >
> > >
> ==============================================================================
> > > ---
> harmony/enhanced/drlvm/trunk/src/test/regression/H4785/run.test.xml
> > > (added)
> > > +++
> harmony/enhanced/drlvm/trunk/src/test/regression/H4785/run.test.xml
> > > Fri Dec  7 02:32:39 2007
> > > @@ -0,0 +1,31 @@
> > > +<!--
> > > +    Licensed to the Apache Software Foundation (ASF) under one or
> more
> > > +    contributor license agreements.  See the NOTICE file distributed
> with
> > > +    this work for additional information regarding copyright
> ownership.
> > > +    The ASF licenses this file to You under the Apache License,
> Version
> > > 2.0
> > > +    (the "License"); you may not use this file except in compliance
> with
> > > +    the License.  You may obtain a copy of the License at
> > > +
> > > +         http://www.apache.org/licenses/LICENSE-2.0
> > > +
> > > +     Unless required by applicable law or agreed to in writing,
> software
> > > +     distributed under the License is distributed on an "AS IS"
> BASIS,
> > > +     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> > > implied.
> > > +     See the License for the specific language governing permissions
> and
> > > +     limitations under the License. -->
> > > +
> > > +<project name="RUN HARMONY-4785 Regression Test">
> > > +    <target name="run-test">
> > > +        <run-junit-test
> > > +             test="
> org.apache.harmony.drlvm.tests.regression.h4785.Test"
> > > +             vmarg="-Xem:opt">
> > > +        </run-junit-test>
> > > +
> > > +        <run-junit-test
> > > +             test="
> org.apache.harmony.drlvm.tests.regression.h4785.Test"
> > > +             vmarg="-Xem:server_static">
> > > +        </run-junit-test>
> > > +
> > > +    </target>
> > > +</project>
> > > +
> > >
> > > Propchange:
> > > harmony/enhanced/drlvm/trunk/src/test/regression/H4785/run.test.xml
> > >
> > >
> ------------------------------------------------------------------------------
> > >    svn:eol-style = native
> > >
> > > Modified:
> harmony/enhanced/drlvm/trunk/vm/jitrino/config/em64t/opt.emconf
> > > URL:
> > >
> http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/config/em64t/opt.emconf?rev=602061&r1=602060&r2=602061&view=diff
> > >
> > >
> ==============================================================================
> > > --- harmony/enhanced/drlvm/trunk/vm/jitrino/config/em64t/opt.emconf
> > > (original)
> > > +++ harmony/enhanced/drlvm/trunk/vm/jitrino/config/em64t/opt.emconf
> Fri
> > > Dec  7 02:32:39 2007
> > > @@ -24,7 +24,7 @@
> > >
> > > -XX:jit.CS_OPT.path=opt_init,translator,optimizer,hir2lir,codegen
> > >
> > > --XX:jit.CS_OPT.path.optimizer=ssa
> > >
> ,devirt,hlo_api_magic,inline,purge,osr_path,escape_path,dce,uce,memopt,simplify,dce,uce,lower,dessa,statprof
> > > +-XX:jit.CS_OPT.path.optimizer=ssa
> > >
> ,devirt,hlo_api_magic,inline,purge,osr_path-,escape_path,dce,uce,memopt,simplify,dce,uce,lower,dessa,statprof
> > > -XX:jit.CS_OPT.path.osr_path=simplify,dce,uce,gcm,osr
> > > -XX:jit.CS_OPT.path.escape_path=hvn,simplify,dce,uce,escape
> > > -XX:jit.CS_OPT.path.codegen=lock_method
> > >
> ,bbp,gcpoints,cafl,dce1,i8l-,api_magic,early_prop-,itrace-,native,constraints,dce2,regalloc,spillgen,layout,copy,rce-,stack,break-,iprof-,emitter!,si_insts,gcmap,info,unlock_method
> > >
> > > Modified:
> > > harmony/enhanced/drlvm/trunk/vm/jitrino/config/em64t/server.emconf
> > > URL:
> > >
> http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/config/em64t/server.emconf?rev=602061&r1=602060&r2=602061&view=diff
> > >
> > >
> ==============================================================================
> > > --- harmony/enhanced/drlvm/trunk/vm/jitrino/config/em64t/server.emconf
> > > (original)
> > > +++ harmony/enhanced/drlvm/trunk/vm/jitrino/config/em64t/server.emconf
> Fri
> > > Dec  7 02:32:39 2007
> > > @@ -69,7 +69,7 @@
> > > -XX:jit.SD1_OPT.arg.optimizer.vp_instrument.profile_abstract=true
> > >
> > >
> > > --XX:jit.SD2_OPT.path.optimizer=ssa
> > >
> ,simplify,dce,uce,devirt_virtual,edge_annotate,unguard,devirt_intf,hlo_api_magic,inline,purge,osr_path,escape_path,dce,uce,hvn,dce,uce,inline_helpers,purge,simplify,uce,dce,uce,abce,lower,dce,uce,memopt,reassoc,dce,uce,hvn,dce,uce,gcm,dessa,statprof
> > > +-XX:jit.SD2_OPT.path.optimizer=ssa
> > >
> ,simplify,dce,uce,devirt_virtual,edge_annotate,unguard,devirt_intf,hlo_api_magic,inline,purge,osr_path-,escape_path,dce,uce,hvn,dce,uce,inline_helpers,purge,simplify,uce,dce,uce,abce,lower,dce,uce,memopt,reassoc,dce,uce,hvn,dce,uce,gcm,dessa,statprof
> > > -XX:jit.SD2_OPT.path.osr_path=simplify,dce,uce,gcm,osr
> > > -XX:jit.SD2_OPT.path.escape_path=hvn,simplify,dce,uce,escape
> > > -XX:jit.SD2_OPT.path.abce=classic_abcd
> > >
> ,dce,uce,dessa,statprof,peel,ssa,hvn,simplify,dce,uce,memopt,dce,uce,dessa,fastArrayFill,ssa,statprof,dabce,dce,uce
> > >
> > > Modified:
> > >
> harmony/enhanced/drlvm/trunk/vm/jitrino/config/em64t/server_static.emconf
> > > URL:
> > >
> http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/config/em64t/server_static.emconf?rev=602061&r1=602060&r2=602061&view=diff
> > >
> > >
> ==============================================================================
> > > ---
> > >
> harmony/enhanced/drlvm/trunk/vm/jitrino/config/em64t/server_static.emconf
> > > (original)
> > > +++
> > >
> harmony/enhanced/drlvm/trunk/vm/jitrino/config/em64t/server_static.emconf
> > > Fri Dec  7 02:32:39 2007
> > > @@ -24,7 +24,7 @@
> > >
> > > -XX:jit.SS_OPT.path=opt_init,translator,optimizer,hir2lir,codegen
> > >
> > > --XX:jit.SS_OPT.path.optimizer=ssa
> > >
> ,simplify,dce,uce,statprof,devirt,hlo_api_magic,inline,purge,osr_path,simplify,dce,uce,hvn,dce,uce,dessa,statprof,peel,ssa,hvn,simplify,dce,uce,lower,dce,uce,memopt,reassoc,dce,uce,hvn,dce,uce,classic_abcd,dce,uce,gcm,dessa,statprof
> > > +-XX:jit.SS_OPT.path.optimizer=ssa
> > >
> ,simplify,dce,uce,statprof,devirt,hlo_api_magic,inline,purge,osr_path-,simplify,dce,uce,hvn,dce,uce,dessa,statprof,peel,ssa,hvn,simplify,dce,uce,lower,dce,uce,memopt,reassoc,dce,uce,hvn,dce,uce,classic_abcd,dce,uce,gcm,dessa,statprof
> > > -XX:jit.SS_OPT.path.osr_path=simplify,dce,uce,gcm,osr
> > > -XX:jit.SS_OPT.path.codegen=lock_method
> > >
> ,bbp,gcpoints,cafl,dce1,i8l-,api_magic,early_prop-,itrace-,native,constraints,dce2,regalloc,spillgen,layout,copy,rce-,stack,break-,iprof-,emitter!,si_insts,gcmap,info,unlock_method
> > > -XX:jit.SS_OPT.path.dce1=cg_dce
> > >
> > > Modified:
> harmony/enhanced/drlvm/trunk/vm/jitrino/config/ia32/opt.emconf
> > > URL:
> > >
> http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/config/ia32/opt.emconf?rev=602061&r1=602060&r2=602061&view=diff
> > >
> > >
> ==============================================================================
> > > --- harmony/enhanced/drlvm/trunk/vm/jitrino/config/ia32/opt.emconf
> > > (original)
> > > +++ harmony/enhanced/drlvm/trunk/vm/jitrino/config/ia32/opt.emconf Fri
> > > Dec  7 02:32:39 2007
> > > @@ -24,7 +24,7 @@
> > >
> > > -XX:jit.CS_OPT.path=opt_init
> > > ,lock_method,translator,optimizer,hir2lir,codegen,unlock_method
> > >
> > > --XX:jit.CS_OPT.path.optimizer=ssa
> > >
> ,devirt,hlo_api_magic,inline,purge,osr_path,simplify,dce,uce,lazyexc,throwopt,escape_path,dce,uce,memopt,simplify,dce,uce,lower,statprof,unroll,ssa,simplify,dce,uce,dessa,statprof
> > > +-XX:jit.CS_OPT.path.optimizer=ssa
> > >
> ,devirt,hlo_api_magic,inline,purge,osr_path-,simplify,dce,uce,lazyexc,throwopt,escape_path,dce,uce,memopt,simplify,dce,uce,lower,statprof,unroll,ssa,simplify,dce,uce,dessa,statprof
> > > -XX:jit.CS_OPT.path.osr_path=simplify,dce,uce,gcm,osr
> > > -XX:jit.CS_OPT.path.escape_path=hvn,simplify,dce,uce,escape
> > > -XX:jit.CS_OPT.path.codegen=bbp
> > >
> ,btr,gcpoints,cafl,dce1,i8l,api_magic,early_prop,peephole,itrace-,native,constraints,dce2,regalloc,spillgen,copy,i586,layout,rce+,stack,break-,iprof-,peephole,emitter!,si_insts,gcmap,info
> > >
> > > Modified:
> > > harmony/enhanced/drlvm/trunk/vm/jitrino/config/ia32/server.emconf
> > > URL:
> > >
> http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/config/ia32/server.emconf?rev=602061&r1=602060&r2=602061&view=diff
> > >
> > >
> ==============================================================================
> > > --- harmony/enhanced/drlvm/trunk/vm/jitrino/config/ia32/server.emconf
> > > (original)
> > > +++ harmony/enhanced/drlvm/trunk/vm/jitrino/config/ia32/server.emconf
> Fri
> > > Dec  7 02:32:39 2007
> > > @@ -71,7 +71,7 @@
> > >
> > > -XX:jit.SD2_OPT.path=opt_init,translator,optimizer,hir2lir,codegen
> > >
> > > --XX:jit.SD2_OPT.path.optimizer=ssa
> > >
> ,simplify,dce,uce,devirt_virtual,edge_annotate,unguard,devirt_intf,hlo_api_magic,inline,purge,osr_path,simplify,dce,uce,lazyexc,throwopt,escape_path,inline_helpers,purge,simplify,uce,dce,uce,abce,lower,dce,uce,statprof,unroll,ssa,simplify,dce,uce,memopt,reassoc,dce,uce,hvn,dce,uce,gcm,dessa,statprof
> > > +-XX:jit.SD2_OPT.path.optimizer=ssa
> > >
> ,simplify,dce,uce,devirt_virtual,edge_annotate,unguard,devirt_intf,hlo_api_magic,inline,purge,osr_path-,simplify,dce,uce,lazyexc,throwopt,escape_path,inline_helpers,purge,simplify,uce,dce,uce,abce,lower,dce,uce,statprof,unroll,ssa,simplify,dce,uce,memopt,reassoc,dce,uce,hvn,dce,uce,gcm,dessa,statprof
> > > -XX:jit.SD2_OPT.path.osr_path=simplify,dce,uce,gcm,osr
> > > -XX:jit.SD2_OPT.path.escape_path=hvn,simplify,dce,uce,escape
> > > -XX:jit.SD2_OPT.path.abce=classic_abcd
> > >
> ,dce,uce,dessa,statprof,peel,ssa,hvn,simplify,dce,uce,memopt,dce,uce,dessa,fastArrayFill,ssa,statprof,dabce,dce,uce
> > >
> > > Modified:
> > >
> harmony/enhanced/drlvm/trunk/vm/jitrino/config/ia32/server_static.emconf
> > > URL:
> > >
> http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/config/ia32/server_static.emconf?rev=602061&r1=602060&r2=602061&view=diff
> > >
> > >
> ==============================================================================
> > > ---
> > >
> harmony/enhanced/drlvm/trunk/vm/jitrino/config/ia32/server_static.emconf
> > > (original)
> > > +++
> > >
> harmony/enhanced/drlvm/trunk/vm/jitrino/config/ia32/server_static.emconf Fri
> > > Dec  7 02:32:39 2007
> > > @@ -24,7 +24,7 @@
> > >
> > > -XX:jit.SS_OPT.path=opt_init
> > > ,lock_method,translator,optimizer,hir2lir,codegen,unlock_method
> > >
> > > --XX:jit.SS_OPT.path.optimizer=ssa
> > >
> ,simplify,dce,uce,statprof,devirt,hlo_api_magic,inline,purge,osr_path,simplify,dce,uce,lazyexc,throwopt,statprof,hvn,dce,uce,dessa,statprof,peel,ssa,hvn,simplify,dce,uce,lower,dce,uce,unroll,ssa,simplify,dce,uce,memopt,reassoc,dce,uce,hvn,simplify,dce,uce,classic_abcd,dce,uce,gcm,dessa,statprof
> > > +-XX:jit.SS_OPT.path.optimizer=ssa
> > >
> ,simplify,dce,uce,statprof,devirt,hlo_api_magic,inline,purge,osr_path-,simplify,dce,uce,lazyexc,throwopt,statprof,hvn,dce,uce,dessa,statprof,peel,ssa,hvn,simplify,dce,uce,lower,dce,uce,unroll,ssa,simplify,dce,uce,memopt,reassoc,dce,uce,hvn,simplify,dce,uce,classic_abcd,dce,uce,gcm,dessa,statprof
> > > -XX:jit.SS_OPT.path.osr_path=simplify,dce,uce,gcm,osr
> > > -XX:jit.SS_OPT.path.codegen=bbp
> > >
> ,btr,gcpoints,cafl,dce1,i8l,api_magic,early_prop,peephole,itrace-,native,constraints,dce2,regalloc,spillgen,copy,i586,layout,rce+,stack,break-,iprof-,peephole,emitter!,si_insts,gcmap,info
> > > -XX:jit.SS_OPT.path.dce1=cg_dce
> > >
> > > Modified:
> > >
> harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32GCSafePoints.cpp
> > > URL:
> > >
> http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32GCSafePoints.cpp?rev=602061&r1=602060&r2=602061&view=diff
> > >
> > >
> ==============================================================================
> > > ---
> > >
> harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32GCSafePoints.cpp
> > > (original)
> > > +++
> > >
> harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32GCSafePoints.cpp
> > > Fri Dec  7 02:32:39 2007
> > > @@ -181,7 +181,9 @@
> > >             for (Inst* inst = (Inst*)node->getLastInst(); inst!=NULL;
> inst
> > > = inst->getPrevInst()) {
> > >                 if (inst->getOpndCount() == 0 && ((inst->getKind()
==
> > > Inst::Kind_MethodEndPseudoInst)
> > >                         || (inst->getKind() ==
> > > Inst::Kind_MethodEntryPseudoInst))
> > > -                        || (inst->getMnemonic() == Mnemonic_NOP) ) {
> > > +                        || (inst->getMnemonic() == Mnemonic_NOP
> > > +                        || inst->getKind() ==
> Inst::Kind_EmptyPseudoInst)
> > > )
> > > +                {
> > >                     continue;
> > >                 }
> > >                 Opnd* opnd = inst->getOpnd(0); // VSH: 0 - ????
> > >
> > > Modified:
> > > harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/FlowGraph.cpp
> > > URL:
> > >
> http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/FlowGraph.cpp?rev=602061&r1=602060&r2=602061&view=diff
> > >
> > >
> ==============================================================================
> > > ---
> harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/FlowGraph.cpp
> > > (original)
> > > +++
> harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/FlowGraph.cpp
> > > Fri Dec  7 02:32:39 2007
> > > @@ -891,6 +891,82 @@
> > > #endif
> > > }
> > >
> > > +static void normalizePseudoThrow(IRManager& irm) {
> > > +//the main idea of the method:
> > > +//1. normalize loops -> make sure there is only one backedge
> > > +//2. move pseudothrows to the source node of backedge
> > > +
> > > +    OptPass::computeLoops(irm, true);
> > > +    LoopTree* lt = irm.getLoopTree();
> > > +    if (!lt->hasLoops()) {
> > > +        return;
> > > +    }
> > > +    ControlFlowGraph& cfg = irm.getFlowGraph();
> > > +    const Nodes& nodes = cfg.getNodes();
> > > +    MemoryManager tmpMM("normalizePseudoThrow");
> > > +    StlMap<Node*, Node*> loopHeadToDispatchMap(tmpMM);
> > > +    Edges backedges(tmpMM);
> > > +    Edges edgesToRemove(tmpMM);
> > > +    for (Nodes::const_iterator it = nodes.begin(), end = nodes.end();
> > > it!=end; ++it) {
> > > +       Node* node = *it;
> > > +        Node* head = lt->getLoopHeader(node, false);
> > > +        if (head == NULL) {
> > > +            continue;
> > > +        }
> > > +        const Edges& edges = node->getOutEdges();
> > > +        bool isBackedgeSrc = false;
> > > +        for (Edges::const_iterator ite = edges.begin(), ende =
> edges.end();
> > > ite!=ende; ++ite) {
> > > +            Edge* e = *ite;
> > > +            if (lt->isBackEdge(e)) {
> > > +                backedges.push_back(e);
> > > +                isBackedgeSrc = true;
> > > +                break;
> > > +            }
> > > +        }
> > > +        Inst* i = (Inst*)node->getLastInst();
> > > +        bool isPseudoThrow = i->getOpcode() == Op_PseudoThrow;
> > > +        if (!isBackedgeSrc && isPseudoThrow) {
> > > +            i->unlink();
> > > +            Edge* exceptionEdge = node->getExceptionEdge();
> > > +            Node* dispatch = exceptionEdge->getTargetNode();
> > > +            while (lt->getLoopHeader(dispatch, false) == head) {
> //select
> > > dispatch that is out of the loop. Otherwise loop structure will be
> invalid
> > > +                dispatch = dispatch->getExceptionEdgeTarget();
> > > +                assert(dispatch);
> > > +            }
> > > +            loopHeadToDispatchMap[head] = dispatch;
> > > +            edgesToRemove.push_back(exceptionEdge);
> > > +        }
> > > +    }
> > > +
> > > +    for (Edges::const_iterator it = edgesToRemove.begin(), end =
> > > edgesToRemove.end(); it!=end; ++it) {
> > > +        Edge* e = *it;
> > > +        cfg.removeEdge(e);
> > > +    }
> > > +
> > > +    for (Edges::const_iterator it = backedges.begin(), end =
> > > backedges.end(); it!=end; ++it) {
> > > +        Edge* backedge = *it;
> > > +        Node* node = backedge->getSourceNode();
> > > +        Node* head = backedge->getTargetNode();
> > > +        Inst* i = (Inst*)node->getLastInst();
> > > +        bool isPseudoThrow = i->getOpcode() == Op_PseudoThrow;
> > > +        if (isPseudoThrow || node->isCatchBlock()) {
> > > +            continue;
> > > +        }
> > > +        Node* dispatch = node->getExceptionEdgeTarget();
> > > +        if (!dispatch) {
> > > +            StlMap<Node*, Node*>::const_iterator it2 =
> > > loopHeadToDispatchMap.find(head);
> > > +            assert(it2!=loopHeadToDispatchMap.end());
> > > +            dispatch = it2->second;
> > > +        } else {
> > > +            node = cfg.spliceBlockOnEdge(backedge, irm.getInstFactory
> > > ().makeLabel());
> > > +        }
> > > +        Inst* pi = irm.getInstFactory().makePseudoThrow();
> > > +        pi->setBCOffset(head->getLabelInst()->getBCOffset());
> > > +        node->appendInst(pi);
> > > +        cfg.addEdge(node, dispatch);
> > > +    }
> > > +}
> > > +
> > > void FlowGraph::doTranslatorCleanupPhase(IRManager& irm) {
> > >     uint32 id = irm.getCompilationContext()->getCurrentSessionNum();
> > >     const char* stage = "trans_cleanup";
> > > @@ -1073,15 +1149,16 @@
> > >         }
> > >     }
> > >     // Remove extra PseudoThrow insts
> > > -    DeadCodeEliminator dce(irm);
> > > -    dce.removeExtraPseudoThrow();
> > > +    normalizePseudoThrow(irm);
> > > +//    DeadCodeEliminator dce(irm);
> > > +//    dce.removeExtraPseudoThrow();
> > >
> > >     //
> > >     // a quick cleanup of unreachable and empty basic blocks
> > >     //
> > >     fg.purgeUnreachableNodes();
> > >     fg.purgeEmptyNodes(false);
> > > -
> > > +
> > >     if (Log::isLogEnabled(LogStream::IRDUMP)) {
> > >         LogStream& irdump = Log::log(LogStream::IRDUMP);
> > >         Log::printStageEnd(irdump.out(), id, "TRANS", stage, stage);
> > >
> > > Modified:
> > > harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/inliner.cpp
> > > URL:
> > >
> http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/inliner.cpp?rev=602061&r1=602060&r2=602061&view=diff
> > >
> > >
> ==============================================================================
> > > --- harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/inliner.cpp
> > > (original)
> > > +++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/inliner.cpp
> Fri
> > > Dec  7 02:32:39 2007
> > > @@ -1181,9 +1181,9 @@
> > >     dce.eliminateUnreachableCode();
> > >     assert(_toplevelIRM.getInSsa());
> > >     OptPass::fixupSsa(_toplevelIRM);
> > > -    if (isPseudoThrowInserted) {
> > > +    /*if (isPseudoThrowInserted) {
> > >         dce.removeExtraPseudoThrow();
> > > -    }
> > > +    }*/
> > > }
> > >
> > > void Inliner::compileAndConnectRegion(InlineNode* inlineNode,
> > > CompilationContext& inlineCC) {
> > >
> > > Modified:
> harmony/enhanced/drlvm/trunk/vm/jitrino/src/shared/BitSet.cpp
> > > URL:
> > >
> http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/shared/BitSet.cpp?rev=602061&r1=602060&r2=602061&view=diff
> > >
> > >
> ==============================================================================
> > > --- harmony/enhanced/drlvm/trunk/vm/jitrino/src/shared/BitSet.cpp
> > > (original)
> > > +++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/shared/BitSet.cpp Fri
> > > Dec  7 02:32:39 2007
> > > @@ -58,6 +58,7 @@
> > > // Constructors
> > > //
> > >
> > > +static uint32* stub=(uint32*)0xDEADBEEF;
> > >
> > > BitSet::BitSet(MemoryManager& memManager, uint32 size)
> > > :words(0), setSize(0), wordsCapacity(0), mm(memManager)
> > > @@ -66,6 +67,8 @@
> > >     {
> > >         alloc(size);
> > >         clear();
> > > +    } else {
> > > +        words = stub;
> > >     }
> > > }
> > >
> > >
> > >
> > >
> >
> >
> > --
> > Best regards,
> > ---
> > Sergey Kuksenko.
> > Intel Enterprise Solutions Software Division.
>
> --
> Egor Pasko
>
>


-- 
Mikhail Fursov

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