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/12/04 09:38:19 UTC

svn commit: r600836 - in /harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer: globalcodemotion.cpp globalcodemotion.h

Author: varlax
Date: Tue Dec  4 00:38:18 2007
New Revision: 600836

URL: http://svn.apache.org/viewvc?rev=600836&view=rev
Log:
Applied HARMONY-3649 [drlvm][jit] SPECjbb2005 intermittently fails on EM64T in server mode

Modified:
    harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/globalcodemotion.cpp
    harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/globalcodemotion.h

Modified: harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/globalcodemotion.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/globalcodemotion.cpp?rev=600836&r1=600835&r2=600836&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/globalcodemotion.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/globalcodemotion.cpp Tue Dec  4 00:38:18 2007
@@ -260,7 +260,14 @@
                     Log::out() << " is used by "; i->print(Log::out());
                     Log::out() << std::endl;
                 }
-                uses[srcInst].insert(i);
+                UsesMap::iterator it = uses.find(srcInst);
+                UsesSet* theSet = NULL; 
+                if (it == uses.end()) {
+                    theSet = new (mm) UsesSet(mm);
+                    it = uses.insert(::std::make_pair(srcInst, theSet)).first;
+                }
+                theSet = it->second;
+                theSet->insert(i);
             }
         }
 
@@ -312,7 +319,15 @@
                 Log::out() << ", which has early placement in "; FlowGraph::printLabel(Log::out(), srcInstEarliest);
                 Log::out() << std::endl;
             }
-            uses[srcInst].insert(i); // record the use while we're iterating.
+            // record the use while we're iterating.
+            UsesMap::iterator it = uses.find(srcInst);
+            UsesSet* theSet = NULL; 
+            if (it == uses.end()) {
+                theSet = new (mm) UsesSet(mm);
+                it = uses.insert(::std::make_pair(srcInst, theSet)).first;
+            }
+            theSet = it->second;
+            theSet->insert(i);
         }
         srcInstEarliest = currentEarliest;  // now is the latest placement of src insts
         // moving above catch inst may cause problems in code emitter
@@ -438,9 +453,17 @@
 
     // schedule users
     DominatorNode *lca = 0;
-    UsesSet &users = uses[i];
-    UsesSet::iterator uiter = users.begin();
-    UsesSet::iterator uend = users.end();
+    UsesMap::iterator it = uses.find(i);
+    UsesSet* users = NULL;
+
+    if (it == uses.end()) {
+        users = new (mm) UsesSet(mm);
+        it = uses.insert(::std::make_pair(i, users)).first;
+    }
+
+    users = it->second;
+    UsesSet::iterator uiter = users->begin();
+    UsesSet::iterator uend = users->end();
 
     for ( ; uiter != uend; ++uiter) {
         Inst *useri = *uiter;

Modified: harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/globalcodemotion.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/globalcodemotion.h?rev=600836&r1=600835&r2=600836&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/globalcodemotion.h (original)
+++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/globalcodemotion.h Tue Dec  4 00:38:18 2007
@@ -86,8 +86,8 @@
     StlHashMap<Inst*, DominatorNode *> latest;
     typedef StlHashSet<Inst *> VisitedSet;
     VisitedSet visited;
-    typedef ::std::set<Inst *> UsesSet;
-    typedef StlHashMap<Inst *, UsesSet> UsesMap;
+    typedef StlHashSet<Inst *> UsesSet;
+    typedef StlHashMap<Inst *, UsesSet*> UsesMap;
     UsesMap uses;
 
     void scheduleAllEarly();