You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by va...@apache.org on 2007/02/02 14:08:08 UTC

svn commit: r502594 - in /harmony/enhanced/drlvm/trunk/vm/jitrino: config/em64t/server.emconf config/ia32/server.emconf src/optimizer/syncopt.cpp

Author: varlax
Date: Fri Feb  2 05:08:07 2007
New Revision: 502594

URL: http://svn.apache.org/viewvc?view=rev&rev=502594
Log:
Applied HARMONY-2985 [drlvm][jit] Nested monitors eliminations

Modified:
    harmony/enhanced/drlvm/trunk/vm/jitrino/config/em64t/server.emconf
    harmony/enhanced/drlvm/trunk/vm/jitrino/config/ia32/server.emconf
    harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/syncopt.cpp

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?view=diff&rev=502594&r1=502593&r2=502594
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/jitrino/config/em64t/server.emconf (original)
+++ harmony/enhanced/drlvm/trunk/vm/jitrino/config/em64t/server.emconf Fri Feb  2 05:08:07 2007
@@ -62,7 +62,7 @@
 
 -XDjit.SD2_OPT.path=opt_init,translator,optimizer,hir2lir,codegen
 
--XDjit.SD2_OPT.path.optimizer=ssa,simplify,dce,uce,devirt_virtual,edge_annotate,unguard,devirt_intf,inline,uce,purge,simplify,dce,uce,hvn,dce,uce,dessa,statprof,peel,ssa,hvn,simplify,dce,uce,lower,dce,uce,memopt,reassoc,dce,uce,hvn,dce,uce,abcd,dce,uce,gcm,dessa,statprof,markglobals
+-XDjit.SD2_OPT.path.optimizer=ssa,simplify,dce,uce,devirt_virtual,edge_annotate,unguard,devirt_intf,inline,uce,purge,simplify,dce,uce,so2,simplify,dce,uce,hvn,dce,uce,dessa,statprof,peel,ssa,hvn,simplify,dce,uce,lower,dce,uce,memopt,reassoc,dce,uce,hvn,dce,uce,abcd,dce,uce,gcm,dessa,statprof,markglobals
 -XDjit.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
 -XDjit.SD2_OPT.path.dce1=cg_dce
 -XDjit.SD2_OPT.path.dce2=cg_dce

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?view=diff&rev=502594&r1=502593&r2=502594
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/jitrino/config/ia32/server.emconf (original)
+++ harmony/enhanced/drlvm/trunk/vm/jitrino/config/ia32/server.emconf Fri Feb  2 05:08:07 2007
@@ -63,7 +63,7 @@
 
 -XDjit.SD2_OPT.path=opt_init,translator,optimizer,hir2lir,codegen
 
--XDjit.SD2_OPT.path.optimizer=ssa,simplify,dce,uce,devirt_virtual,edge_annotate,unguard,devirt_intf,inline,uce,purge,simplify,dce,uce,lazyexc,inline_helpers,purge,simplify,uce,dce,dessa,statprof,peel,ssa,hvn,simplify,dce,uce,lower,dce,uce,memopt,reassoc,dce,uce,hvn,dce,uce,abcd,dce,uce,gcm,dessa,statprof,markglobals
+-XDjit.SD2_OPT.path.optimizer=ssa,simplify,dce,uce,devirt_virtual,edge_annotate,unguard,devirt_intf,inline,uce,purge,simplify,dce,uce,lazyexc,so2,simplify,dce,uce,inline_helpers,purge,simplify,uce,dce,dessa,statprof,peel,ssa,hvn,simplify,dce,uce,lower,dce,uce,memopt,reassoc,dce,uce,hvn,dce,uce,abcd,dce,uce,gcm,dessa,statprof,markglobals
 -XDjit.SD2_OPT.path.codegen=lock_method,bbp,btr,gcpoints,cafl,dce1,i8l,api_magic,early_prop,peephole,itrace-,native,constraints,dce2,regalloc,spillgen,layout,copy,rce+,stack,break-,iprof-,peephole,emitter!,si_insts,gcmap,info,unlock_method
 -XDjit.SD2_OPT.path.dce1=cg_dce
 -XDjit.SD2_OPT.path.dce2=cg_dce

Modified: harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/syncopt.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/syncopt.cpp?view=diff&rev=502594&r1=502593&r2=502594
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/syncopt.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/syncopt.cpp Fri Feb  2 05:08:07 2007
@@ -2110,4 +2110,53 @@
 
 
 
+
+DEFINE_SESSION_ACTION(SO2, so2, "SyncOpt2")
+
+ 
+
+void SO2::_run(IRManager& irm) {
+    OptPass::computeDominators(irm);
+    ControlFlowGraph& fg = irm.getFlowGraph();
+    MemoryManager tmpMM(1024, "SO2MM");
+    StlVector<Inst*> monenters(tmpMM);   
+    DominatorTree* dom = fg.getDominatorTree();
+ 
+    const Nodes& nodes = fg.getNodesPostOrder();
+    for (Nodes::const_iterator it = nodes.begin(), end = nodes.end(); it!=end; ++it) {
+        Node* node = *it;
+        for (Inst* inst = (Inst*)node->getFirstInst(); inst!=NULL; inst = inst->getNextInst()) {
+            if (inst->getOpcode()== Op_TauMonitorEnter) {
+                monenters.push_back(inst);
+                for (size_t i = 0; i<monenters.size()-1; i++) {
+                    Inst* child = monenters[i];
+                    if (child->getNode()==NULL) {
+                        continue;
+                    }
+                    if (child->getSrc(0) == inst->getSrc(0) && dom->dominates(inst->getNode(), child->getNode())) {
+                        //clean child
+                        int nExits=0;
+                        Node* enterNode = child->getNode();
+                        Node* exitNode = NULL;
+                        for (Nodes::const_iterator it2 = nodes.begin();exitNode!=enterNode; ++it2) {
+                            exitNode = *it2;
+                            Inst* exit = (Inst*)exitNode->getLastInst();
+                            if (exit->getOpcode() == Op_TauMonitorExit && exit->getSrc(0) == child->getSrc(0) && dom->dominates(enterNode, exitNode)) {
+//                                printf("+++++++++++++++++++++++++++++++FOUND\n");
+                                Edge* exc = exitNode->getExceptionEdge();
+                                fg.removeEdge(exc);
+                                exit->unlink();
+                                nExits++;
+                            }
+                        }
+                        assert(nExits>0);
+                        child->unlink();
+                    }
+                }
+            }
+        }
+    }
+}
+
+
 } //namespace Jitrino