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 <[EMAIL PROTECTED]> 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, [EMAIL PROTECTED] <[EMAIL PROTECTED]> 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
