Index: vm/jitrino/config/ia32/server_static.emconf =================================================================== --- vm/jitrino/config/ia32/server_static.emconf (revision 453188) +++ vm/jitrino/config/ia32/server_static.emconf (working copy) @@ -9,7 +9,7 @@ -Djit.SS_OPT.path=opt_init,translator,optimizer,hir2lir,codegen --Djit.SS_OPT.path.optimizer=ssa,simplify,uce,dce,statprof,lazyexc,devirt,inline,purge,simplify,uce,dce,hvn,uce,dce,dessa,statprof,peel,ssa,hvn,simplify,uce,dce,lower,uce,dce,memopt,reassoc,uce,dce,hvn,uce,dce,abcd,uce,dce,gcm,dessa,statprof,markglobals +-Djit.SS_OPT.path.optimizer=ssa,simplify,uce,dce,statprof,devirt,inline,purge,simplify,uce,dce,lazyexc,hvn,uce,dce,dessa,statprof,peel,ssa,hvn,simplify,uce,dce,lower,uce,dce,memopt,reassoc,uce,dce,hvn,uce,dce,abcd,uce,dce,gcm,dessa,statprof,markglobals -Djit.SS_OPT.path.codegen=lock_method,bbp,gcpoints,cafl,dce1,i8l,early_prop,itrace-,native,constraints,dce2,regalloc,spillgen,layout,copy,rce+,stack,break-,iprof-,emitter!,si_insts,gcmap,info,unlock_method -Djit.SS_OPT.path.dce1=cg_dce -Djit.SS_OPT.path.dce2=cg_dce Index: vm/jitrino/config/ia32/server.emconf =================================================================== --- vm/jitrino/config/ia32/server.emconf (revision 453188) +++ vm/jitrino/config/ia32/server.emconf (working copy) @@ -41,7 +41,7 @@ -Djit.SD2_OPT.path=opt_init,translator,optimizer,hir2lir,codegen --Djit.SD2_OPT.path.optimizer=ssa,simplify,uce,dce,edge_annotate,lazyexc,devirt,inline,purge,simplify,uce,dce,dessa,statprof,peel,ssa,hvn,simplify,uce,dce,lower,uce,dce,memopt,reassoc,uce,dce,hvn,uce,dce,abcd,uce,dce,gcm,dessa,statprof,markglobals +-Djit.SD2_OPT.path.optimizer=ssa,simplify,uce,dce,edge_annotate,devirt,inline,purge,simplify,uce,dce,lazyexc,dessa,statprof,peel,ssa,hvn,simplify,uce,dce,lower,uce,dce,memopt,reassoc,uce,dce,hvn,uce,dce,abcd,uce,dce,gcm,dessa,statprof,markglobals -Djit.SD2_OPT.path.codegen=lock_method,bbp,gcpoints,cafl,dce1,i8l,early_prop,itrace-,native,constraints,dce2,regalloc,spillgen,layout,copy,rce+,stack,break-,iprof-,emitter!,si_insts,gcmap,info,unlock_method -Djit.SD2_OPT.path.dce1=cg_dce -Djit.SD2_OPT.path.dce2=cg_dce Index: vm/jitrino/src/optimizer/lazyexceptionopt.cpp =================================================================== --- vm/jitrino/src/optimizer/lazyexceptionopt.cpp (revision 453188) +++ vm/jitrino/src/optimizer/lazyexceptionopt.cpp (working copy) @@ -445,8 +445,16 @@ Log::out() << std::endl; } #endif + if ((*it)->initInst == NULL) { +#ifdef _DEBUG + if (Log::isEnabled()) { + Log::out() << " init inst is null "; + Log::out() << std::endl; + } +#endif + continue; + } iinst = (*it)->initInst->asMethodCallInst(); - assert(iinst != NULL); // inline info from constructor should be propogated to lazy // exception if any InlineInfo* constrInlineInfo = iinst->getInlineInfoPtr(); @@ -512,7 +520,6 @@ } } } - irManager.getFlowGraph().purgeEmptyNodes(); } } } @@ -789,8 +796,9 @@ #ifdef _DEBUG if (Log::isEnabled()) { - Log::out() << " checkArg: first node " << node->getId() - << " inEdges " << node->getInDegree() << " " << std::endl; + Log::out() << " checkArg: first node " << node->getId() << " "; + FlowGraph::printLabel(Log::out(),node); + Log::out() << " inEdges " << node->getInDegree() << " " << std::endl; } #endif @@ -799,24 +807,27 @@ if (nodeSet->call_inst->getNode() == node) { #ifdef _DEBUG if (Log::isEnabled()) { - Log::out() << " node " << node->getId() - << " again in call_inst node " << std::endl; + Log::out() << " node " << node->getId() << " "; + FlowGraph::printLabel(Log::out(),node); + Log::out() << " again in call_inst node " << std::endl; } #endif doneOK = false; } #ifdef _DEBUG if (Log::isEnabled()) { - Log::out() << " node " << node->getId() - << " inEdges " << node->getInDegree() << " was scanned " << std::endl; + Log::out() << " node " << node->getId() << " "; + FlowGraph::printLabel(Log::out(),node); + Log::out() << " inEdges " << node->getInDegree() << " was scanned " << std::endl; } #endif break; } #ifdef _DEBUG if (Log::isEnabled()) { - Log::out() << " node " << node->getId() - << " inEdges " << node->getInDegree() << std::endl; + Log::out() << " node " << node->getId() << " "; + FlowGraph::printLabel(Log::out(),node); + Log::out() << " inEdges " << node->getInDegree() << std::endl; } #endif for (inst = instlast; inst!=instfirst; inst=inst->getPrevInst()) { @@ -832,14 +843,18 @@ } if (inst->getOpcode()==Op_TauCheckNull && inst->getSrc(0)==arg_opnd) { if (nodeSet->check_inst != NULL) { - dofind = false; - doneOK = false; #ifdef _DEBUG if (Log::isEnabled()) { Log::out() << " check_inst is not NULL" << std::endl; } #endif + break; } +#ifdef _DEBUG + if (Log::isEnabled()) { + Log::out() << " check_inst is FOUND" << std::endl; + } +#endif nodeSet->check_inst = inst; break; } @@ -1007,7 +1022,7 @@ case Op_ScaledDiffRef: return true; case Op_StVar: - return true; + return false; case Op_TauStInd: { Inst* inst_src1 = inst->getSrc(1)->getInst();