diff --git a/vm/jitrino/config/ia32/server.emconf b/vm/jitrino/config/ia32/server.emconf index 3a623ee..b80787f 100644 --- a/vm/jitrino/config/ia32/server.emconf +++ b/vm/jitrino/config/ia32/server.emconf @@ -41,7 +41,7 @@ #options for JIT -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 diff --git a/vm/jitrino/config/ia32/server_static.emconf b/vm/jitrino/config/ia32/server_static.emconf index d0e2910..f044446 100644 --- a/vm/jitrino/config/ia32/server_static.emconf +++ b/vm/jitrino/config/ia32/server_static.emconf @@ -9,7 +9,7 @@ # Options to be passed to JIT -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 diff --git a/vm/jitrino/src/optimizer/lazyexceptionopt.cpp b/vm/jitrino/src/optimizer/lazyexceptionopt.cpp index 9744fea..5b83bfa 100644 --- a/vm/jitrino/src/optimizer/lazyexceptionopt.cpp +++ b/vm/jitrino/src/optimizer/lazyexceptionopt.cpp @@ -444,8 +444,16 @@ #ifdef _DEBUG 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(); @@ -788,8 +796,9 @@ LazyExceptionOpt::checkArg(Node* nodeS) #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 @@ -798,24 +807,27 @@ #endif 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()) { @@ -831,14 +843,18 @@ #endif } 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; } @@ -1006,7 +1022,7 @@ #endif case Op_ScaledDiffRef: return true; case Op_StVar: - return true; + return false; case Op_TauStInd: { Inst* inst_src1 = inst->getSrc(1)->getInst();