bug fixes
authorbdemsky <bdemsky>
Tue, 30 Jun 2009 03:47:40 +0000 (03:47 +0000)
committerbdemsky <bdemsky>
Tue, 30 Jun 2009 03:47:40 +0000 (03:47 +0000)
Robust/src/Analysis/Locality/DelayComputation.java
Robust/src/Analysis/Locality/DiscoverConflicts.java
Robust/src/Analysis/Locality/LocalityAnalysis.java
Robust/src/Analysis/Locality/TypeAnalysis.java

index 60f8aee51acb04af218f510ebb0159235eda2165..b8a78afc6be0a060ed18edc4bf9edc9c78fcae4b 100644 (file)
@@ -65,6 +65,7 @@ public class DelayComputation {
        otherset.addAll(fm.getNodeSet());
        otherset.removeAll(notreadyset);
        otherset.removeAll(cannotdelay);
+
        notreadymap.put(lb, notreadyset);
        othermap.put(lb, otherset);
       }
@@ -133,7 +134,7 @@ public class DelayComputation {
 
     Set<TempDescriptor> liveinto=new HashSet<TempDescriptor>();
     
-    Hashtable<FlatNode, Hashtable<TempDescriptor, Set<FlatNode>>> reachingdefs=ReachingDefs.computeReachingDefs(fm, Liveness.computeLiveTemps(fm));
+    Hashtable<FlatNode, Hashtable<TempDescriptor, Set<FlatNode>>> reachingdefs=ReachingDefs.computeReachingDefs(fm, Liveness.computeLiveTemps(fm), true);
     
     for(Iterator<FlatNode> fnit=secondpart.iterator();fnit.hasNext();) {
       FlatNode fn=fnit.next();
@@ -162,7 +163,7 @@ public class DelayComputation {
     FlatMethod fm=state.getMethodFlat(md);
     Set<FlatNode> exits=faen.getExits();
     Hashtable<FlatNode, Set<TempDescriptor>> livemap=Liveness.computeLiveTemps(fm);
-    Hashtable<FlatNode, Hashtable<TempDescriptor, Set<FlatNode>>> reachingdefs=ReachingDefs.computeReachingDefs(fm, Liveness.computeLiveTemps(fm));    
+    Hashtable<FlatNode, Hashtable<TempDescriptor, Set<FlatNode>>> reachingdefs=ReachingDefs.computeReachingDefs(fm, Liveness.computeLiveTemps(fm), true);
 
     Set<FlatNode> atomicnodes=faen.getReachableSet(faen.getExits());
 
@@ -207,7 +208,7 @@ public class DelayComputation {
     FlatMethod fm=state.getMethodFlat(md);
     Set<FlatNode> exits=faen.getExits();
     Hashtable<FlatNode, Set<TempDescriptor>> livemap=Liveness.computeLiveTemps(fm);
-    Hashtable<FlatNode, Hashtable<TempDescriptor, Set<FlatNode>>> reachingdefs=ReachingDefs.computeReachingDefs(fm, livemap);
+    Hashtable<FlatNode, Hashtable<TempDescriptor, Set<FlatNode>>> reachingdefs=ReachingDefs.computeReachingDefs(fm, livemap, true);
     
     Set<FlatNode> atomicnodes=faen.getReachableSet(faen.getExits());
 
@@ -256,11 +257,9 @@ public class DelayComputation {
     HashSet<FlatNode> otherset=othermap.get(lb);
     HashSet<FlatNode> cannotdelayset=cannotdelaymap.get(lb);
     Hashtable<FlatNode,Set<TempDescriptor>> livemap=Liveness.computeLiveTemps(fm);
-    Hashtable<FlatNode, Hashtable<TempDescriptor, Set<FlatNode>>> reachingdefsmap=ReachingDefs.computeReachingDefs(fm, livemap);
+    Hashtable<FlatNode, Hashtable<TempDescriptor, Set<FlatNode>>> reachingdefsmap=ReachingDefs.computeReachingDefs(fm, livemap, true);
     HashSet<FlatNode> unionset=new HashSet<FlatNode>(delayedset);
-
     Hashtable<FlatNode, Hashtable<TempDescriptor, HashSet<FlatNode>>> map=new Hashtable<FlatNode, Hashtable<TempDescriptor, HashSet<FlatNode>>>();
-
     HashSet<FlatNode> livenodes=new HashSet<FlatNode>();
 
     for(Iterator<FlatNode> fnit=fm.getNodeSet().iterator();fnit.hasNext();) {
@@ -268,11 +267,15 @@ public class DelayComputation {
       if (fn.kind()==FKind.FlatAtomicExitNode) {
        Set<TempDescriptor> livetemps=livemap.get(fn);
        Hashtable<TempDescriptor, Set<FlatNode>> tempmap=reachingdefsmap.get(fn);
+
+       //Iterate over the temps that are live into this node
        for(Iterator<TempDescriptor> tmpit=livetemps.iterator();tmpit.hasNext();) {
          TempDescriptor tmp=tmpit.next();
          Set<FlatNode> fnset=tempmap.get(tmp);
          boolean inpart1=false;
          boolean inpart2=false;
+
+         //iterate over the reaching definitions for the temp
          for(Iterator<FlatNode> fnit2=fnset.iterator();fnit2.hasNext();) {
            FlatNode fn2=fnit2.next();
            if (delayedset.contains(fn2)) {
@@ -460,8 +463,8 @@ public class DelayComputation {
        //do read sets
        if (nodelayfieldsrd.containsKey(fn.getNext(i)))
          nodelayfieldrdset.addAll(nodelayfieldsrd.get(fn.getNext(i)));   
-       if (nodelayarrayswr.containsKey(fn.getNext(i)))
-         nodelayarraywrset.addAll(nodelayarrayswr.get(fn.getNext(i)));   
+       if (nodelayarraysrd.containsKey(fn.getNext(i)))
+         nodelayarrayrdset.addAll(nodelayarraysrd.get(fn.getNext(i)));   
       }
       
       /* Check our temp write set */
@@ -517,7 +520,6 @@ public class DelayComputation {
        if (nodelayfieldwrset.contains(fd))
          isnodelay=true;
       }
-
       //Check for array conflicts
       if (fn.kind()==FKind.FlatSetElementNode) {
        TypeDescriptor td=((FlatSetElementNode)fn).getDst().getType();
@@ -569,7 +571,7 @@ public class DelayComputation {
        /* Do we read from arrays */
        if (fn.kind()==FKind.FlatElementNode) {
          //have to do expansion
-         nodelayarrayrdset.addAll(typeanalysis.expand(((FlatElementNode)fn).getSrc().getType()));        
+         nodelayarrayrdset.addAll(typeanalysis.expand(((FlatElementNode)fn).getSrc().getType()));
        }
       } else {
        //Need to know which objects to lock on
index f382143ce4d157de251b2812ef6f22c869585a4a..e9127ae389d7cc1ba7776cd4b8fb455ec1c3437f 100644 (file)
@@ -11,6 +11,7 @@ import IR.Operation;
 import IR.TypeDescriptor;
 import IR.MethodDescriptor;
 import IR.FieldDescriptor;
+import Analysis.Liveness;
 
 public class DiscoverConflicts {
   Set<FieldDescriptor> fields;
@@ -371,7 +372,7 @@ public class DiscoverConflicts {
     MethodDescriptor md=lb.getMethod();
     FlatMethod fm=state.getMethodFlat(md);
     Hashtable<FlatNode, Integer> atomictable=locality.getAtomic(lb);
-    Hashtable<FlatNode, Set<TempDescriptor>> livetemps=locality.computeLiveTemps(fm);
+    Hashtable<FlatNode, Set<TempDescriptor>> livetemps=Liveness.computeLiveTemps(fm);
     tovisit.add(fm);
     discovered.add(fm);
     
@@ -500,7 +501,7 @@ public class DiscoverConflicts {
     MethodDescriptor md=lb.getMethod();
     FlatMethod fm=state.getMethodFlat(md);
     Hashtable<FlatNode, Integer> atomictable=locality.getAtomic(lb);
-    Hashtable<FlatNode, Set<TempDescriptor>> livetemps=locality.computeLiveTemps(fm);
+    Hashtable<FlatNode, Set<TempDescriptor>> livetemps=Liveness.computeLiveTemps(fm);
     tovisit.add(fm);
     discovered.add(fm);
     
index abd14d8ed26aba8fa9df1f2d7bb9ec872f532564..6a705e86a2d34580e62dfa4bf9b8c65a7f1112d8 100644 (file)
@@ -1128,10 +1128,6 @@ public class LocalityAnalysis {
     atomictable.put(fen, new Integer(atomic-1));
   }
     
-  Hashtable<FlatNode, Set<TempDescriptor>> computeLiveTemps(FlatMethod fm) {
-    return Liveness.computeLiveTemps(fm);
-  }
-
   private void computeTempstoSave() {
     for(Iterator<LocalityBinding> lbit=getLocalityBindings().iterator(); lbit.hasNext();) {
       LocalityBinding lb=lbit.next();
@@ -1155,7 +1151,7 @@ public class LocalityAnalysis {
     Hashtable<FlatNode, Hashtable<TempDescriptor, Integer>> temptab=getNodeTempInfo(lb);
     MethodDescriptor md=lb.getMethod();
     FlatMethod fm=state.getMethodFlat(md);
-    Hashtable<FlatNode, Set<TempDescriptor>> nodetotemps=computeLiveTemps(fm);
+    Hashtable<FlatNode, Set<TempDescriptor>> nodetotemps=Liveness.computeLiveTemps(fm);
     Hashtable<FlatAtomicEnterNode, Set<TempDescriptor>> nodetosavetemps=new Hashtable<FlatAtomicEnterNode, Set<TempDescriptor>>();
     tempstosave.put(lb, nodetosavetemps);
     Hashtable<FlatNode, FlatAtomicEnterNode> nodemap=new Hashtable<FlatNode, FlatAtomicEnterNode>();
@@ -1174,9 +1170,9 @@ public class LocalityAnalysis {
        nodetosavetemps.put((FlatAtomicEnterNode)fn, new HashSet<TempDescriptor>());
       } else if (isatomic) {
        FlatAtomicEnterNode atomicnode=nodemap.get(fn);
-       Set<TempDescriptor> livetemps=nodetotemps.get(fn);
+       Set<TempDescriptor> livetemps=nodetotemps.get(atomicnode);
        List<TempDescriptor> reads=Arrays.asList(fn.readsTemps());
-       List<TempDescriptor> writes=Arrays.asList(fn.readsTemps());
+       List<TempDescriptor> writes=Arrays.asList(fn.writesTemps());
 
        for(Iterator<TempDescriptor> tempit=livetemps.iterator(); tempit.hasNext();) {
          TempDescriptor tmp=tempit.next();
index 6045213296e804a008f48b96f7fc4f8cad71bdac..194bc7381760fff9e14d4364527650d5fd3853aa 100644 (file)
@@ -89,14 +89,19 @@ public class TypeAnalysis {
   }
   
   public Set<TypeDescriptor> expand(TypeDescriptor td) {
-    return namemap.get(td);
+    Set<TypeDescriptor> expandset=namemap.get(td);
+    return expandset;
   }
 
   public Set<TypeDescriptor> expandSet(Set<TypeDescriptor> tdset) {
     HashSet<TypeDescriptor> expandedSet=new HashSet<TypeDescriptor>();
     for(Iterator<TypeDescriptor> it=tdset.iterator();it.hasNext();) {
       TypeDescriptor td=it.next();
-      expandedSet.addAll(expand(td));
+      Set<TypeDescriptor> etdset=expand(td);
+      if (etdset==null)
+       expandedSet.add(td);
+      else
+       expandedSet.addAll(etdset);
     }
     return expandedSet;
   }