Index: vm/jitrino/config/em64t/server_static.emconf =================================================================== --- vm/jitrino/config/em64t/server_static.emconf (revision 711256) +++ vm/jitrino/config/em64t/server_static.emconf (working copy) @@ -35,7 +35,7 @@ -XX:jit.SS_OPT.path.optimizer=ssa,simplify,dce,uce,statprof,devirt_virtual,unguard,devirt_intf,hlo_api_magic,inline,purge,simplify,dce,uce,osr_path,escape_path,dce,uce,hvn,dce,uce,inline_helpers-,purge,simplify,uce,dce,uce,abce,lower,dce,uce,memopt,dce,uce,hvn,dce,uce,gcm,dessa,statprof -XX:jit.SS_OPT.path.osr_path=gcm,osr,simplify,dce,uce -XX:jit.SS_OPT.path.escape_path=hvn,simplify,dce,uce,escape --XX:jit.SS_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 +-XX:jit.SS_OPT.path.abce=hvn,simplify,dce,uce,memopt,dce,uce,classic_abcd,dce,uce,dessa,statprof,peel,ssa,hvn,simplify,dce,uce,memopt,dce,uce,dessa,fastArrayFill,ssa,statprof,dabce,dce,uce -XX:jit.SS_OPT.path.codegen=bbp,gcpoints,cafl,dce1,i8l-,api_magic,light_jni-,early_prop-,itrace-,native,cg_fastArrayFill,constraints,dce2,regalloc,spillgen,layout,copy,rce-,stack,break-,iprof-,emitter!,si_insts,gcmap,info -XX:jit.SS_OPT.path.dce1=cg_dce -XX:jit.SS_OPT.path.dce2=cg_dce Index: vm/jitrino/config/em64t/server.emconf =================================================================== --- vm/jitrino/config/em64t/server.emconf (revision 711256) +++ vm/jitrino/config/em64t/server.emconf (working copy) @@ -81,7 +81,7 @@ -XX:jit.SD2_OPT.path.optimizer=ssa,simplify,dce,uce,devirt_virtual,edge_annotate,unguard,devirt_intf,hlo_api_magic,inline,purge,simplify,dce,uce,osr_path,escape_path,dce,uce,hvn,dce,uce,inline_helpers,purge,simplify,uce,dce,uce,abce,lower,dce,uce,memopt,dce,uce,hvn,dce,uce,gcm,dessa,statprof -XX:jit.SD2_OPT.path.osr_path=gcm,osr,simplify,dce,uce -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 +-XX:jit.SD2_OPT.path.abce=hvn,simplify,dce,uce,memopt,dce,uce,classic_abcd,dce,uce,dessa,statprof,peel,ssa,hvn,simplify,dce,uce,memopt,dce,uce,dessa,fastArrayFill,ssa,statprof,dabce,dce,uce -XX:jit.SD2_OPT.path.codegen=lock_method,bbp,gcpoints,cafl,dce1,i8l-,api_magic,light_jni-,early_prop-,itrace-,native,cg_fastArrayFill,constraints,dce2,regalloc,spillgen,layout,copy,rce-,stack,break-,iprof-,emitter!,si_insts,gcmap,info,unlock_method -XX:jit.SD2_OPT.path.dce1=cg_dce -XX:jit.SD2_OPT.path.dce2=cg_dce Index: vm/jitrino/config/ia32/server_static.emconf =================================================================== --- vm/jitrino/config/ia32/server_static.emconf (revision 711256) +++ vm/jitrino/config/ia32/server_static.emconf (working copy) @@ -35,7 +35,7 @@ -XX:jit.SS_OPT.path.optimizer=ssa,simplify,dce,uce,devirt_virtual,statprof,unguard,devirt_intf,hlo_api_magic,inline,purge,simplify,dce,uce,osr_path,lazyexc,throwopt,escape_path,inline_helpers-,purge,simplify,uce,dce,uce,abce,lower,dce,uce,statprof,unroll,ssa,simplify,dce,uce,memopt,dce,uce,hvn,dce,uce,gcm,dessa,statprof -XX:jit.SS_OPT.path.osr_path=gcm,osr,simplify,dce,uce -XX:jit.SS_OPT.path.escape_path=hvn,simplify,dce,uce,escape --XX:jit.SS_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 +-XX:jit.SS_OPT.path.abce=hvn,simplify,dce,uce,memopt,dce,uce,classic_abcd,dce,uce,dessa,statprof,peel,ssa,hvn,simplify,dce,uce,memopt,dce,uce,dessa,fastArrayFill,ssa,statprof,dabce,dce,uce -XX:jit.SS_OPT.path.codegen=lock_method,bbp,btr,gcpoints,cafl,dce1,i8l,api_magic,light_jni-,early_prop,peephole,itrace-,native,cg_fastArrayFill,constraints,dce2,regalloc,spillgen,copy,i586,layout,rce+,stack,break-,iprof-,peephole,emitter!,si_insts,gcmap,info,unlock_method -XX:jit.SS_OPT.path.dce1=cg_dce -XX:jit.SS_OPT.path.dce2=cg_dce Index: vm/jitrino/config/ia32/server_aggressive.emconf =================================================================== --- vm/jitrino/config/ia32/server_aggressive.emconf (revision 711256) +++ vm/jitrino/config/ia32/server_aggressive.emconf (working copy) @@ -76,7 +76,7 @@ -XX:jit.SD2_OPT.path.optimizer=ssa,simplify,dce,uce,edge_annotate,devirt,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,dce,uce,hvn,dce,uce,gcm,dessa,statprof,markglobals -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 +-XX:jit.SD2_OPT.path.abce=hvn,simplify,dce,uce,memopt,dce,uce,classic_abcd,dce,uce,dessa,statprof,peel,ssa,hvn,simplify,dce,uce,memopt,dce,uce,dessa,fastArrayFill,ssa,statprof,dabce,dce,uce -XX:jit.SD2_OPT.path.codegen=lock_method,bbp,btr,gcpoints,cafl,dce1,i8l,api_magic,early_prop,peephole,itrace-,native,cg_fastArrayFill,constraints,dce2,regalloc,spillgen,copy,i586,layout,rce+,stack,break-,iprof-,peephole,emitter!,si_insts,gcmap,info,unlock_method -XX:jit.SD2_OPT.path.dce1=cg_dce Index: vm/jitrino/config/ia32/server.emconf =================================================================== --- vm/jitrino/config/ia32/server.emconf (revision 711256) +++ vm/jitrino/config/ia32/server.emconf (working copy) @@ -83,7 +83,7 @@ -XX:jit.SD2_OPT.path.optimizer=ssa,simplify,dce,uce,devirt_virtual,edge_annotate,unguard,devirt_intf,hlo_api_magic,inline,purge,simplify,dce,uce,osr_path,lazyexc,throwopt,escape_path,inline_helpers,purge,simplify,uce,dce,uce,abce,lower,dce,uce,statprof,unroll,ssa,simplify,dce,uce,memopt,dce,uce,hvn,dce,uce,gcm,dessa,statprof -XX:jit.SD2_OPT.path.osr_path=gcm,osr,simplify,dce,uce -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 +-XX:jit.SD2_OPT.path.abce=hvn,simplify,dce,uce,memopt,dce,uce,classic_abcd,dce,uce,dessa,statprof,peel,ssa,hvn,simplify,dce,uce,memopt,dce,uce,dessa,fastArrayFill,ssa,statprof,dabce,dce,uce -XX:jit.SD2_OPT.path.codegen=lock_method,bbp,btr,gcpoints,cafl,dce1,i8l,api_magic,light_jni-,early_prop,peephole,itrace-,native,cg_fastArrayFill,constraints,dce2,regalloc,spillgen,copy,i586,layout,rce+,stack,break-,iprof-,peephole,emitter!,si_insts,gcmap,info,unlock_method -XX:jit.SD2_OPT.path.dce1=cg_dce -XX:jit.SD2_OPT.path.dce2=cg_dce Index: vm/jitrino/src/optimizer/abcd/classic_abcd_solver.cpp =================================================================== --- vm/jitrino/src/optimizer/abcd/classic_abcd_solver.cpp (revision 711256) +++ vm/jitrino/src/optimizer/abcd/classic_abcd_solver.cpp (working copy) @@ -743,7 +743,7 @@ } // traversal reached the _source_opnd vertex - if ( (dest->getID() == _source_opnd->getID()) && + if ( dest->isPiEquivalentTo(_source_opnd) && Bound::int32_leq(0, bound) ) { prn.prnStrLn("reached source vertex => True"); return True; Index: vm/jitrino/src/optimizer/abcd/classic_abcd_solver.h =================================================================== --- vm/jitrino/src/optimizer/abcd/classic_abcd_solver.h (revision 711256) +++ vm/jitrino/src/optimizer/abcd/classic_abcd_solver.h (working copy) @@ -52,6 +52,9 @@ void setID(U_32 id) { _id = id; } U_32 getID() const { return _id; } + virtual bool isIOpndProxy() const { return false; } + virtual bool isPiEquivalentTo(IOpnd *iOpnd) const { return _id == iOpnd->_id; } + virtual void printName(std::ostream& os) const; void printFullName(std::ostream& os) const; private: Index: vm/jitrino/src/optimizer/abcd/classic_abcd.cpp =================================================================== --- vm/jitrino/src/optimizer/abcd/classic_abcd.cpp (revision 711256) +++ vm/jitrino/src/optimizer/abcd/classic_abcd.cpp (working copy) @@ -55,6 +55,22 @@ IOpndProxy(I_32 c, U_32 id); + virtual bool isIOpndProxy() const { return true; } + + virtual bool isPiEquivalentTo(IOpnd *iOpnd) const { + if ( IOpnd::isPiEquivalentTo(iOpnd) ) { + return true; + }else if ( iOpnd->isIOpndProxy() && ((IOpndProxy *)iOpnd)->getOrg() && _opnd ) { + // Pi operands for the same orgOpnd are equivalent + IOpndProxy *iOpndProxy = (IOpndProxy *)iOpnd; + Opnd *toOpnd = iOpndProxy->getOrg()->isPiOpnd() ? iOpndProxy->getOrg()->asPiOpnd()->getOrg() : iOpndProxy->getOrg(); + Opnd *thisOpnd = _opnd->isPiOpnd() ? _opnd->asPiOpnd()->getOrg() : _opnd; + return thisOpnd == toOpnd; + }else{ + return false; + } + } + virtual void printName(std::ostream& os) const { if ( _opnd ) {