commit hacks to effect analysis...interfaces to allow disjoint/pointer analysis to...
authorbdemsky <bdemsky>
Fri, 18 Mar 2011 08:32:33 +0000 (08:32 +0000)
committerbdemsky <bdemsky>
Fri, 18 Mar 2011 08:32:33 +0000 (08:32 +0000)
Robust/src/Analysis/Disjoint/Canonical.java
Robust/src/Analysis/Disjoint/DisjointAnalysis.java
Robust/src/Analysis/Disjoint/EffectsAnalysis.java
Robust/src/Analysis/Disjoint/HeapAnalysis.java [new file with mode: 0644]
Robust/src/Analysis/Disjoint/Taint.java
Robust/src/Analysis/OoOJava/ConflictGraph.java
Robust/src/Analysis/OoOJava/ConflictNode.java
Robust/src/Analysis/OoOJava/OoOJavaAnalysis.java
Robust/src/Analysis/Pointer/AllocFactory.java
Robust/src/Analysis/Pointer/Pointer.java
Robust/src/IR/Flat/RuntimeConflictResolver.java

index 71d1f125d4c070062bcf4ec510fda33d8d661799..3926b285e4547b37bcb501a7237e6a9bb508d205 100644 (file)
@@ -1514,7 +1514,6 @@ abstract public class Canonical {
                                                 FlatSESEEnterNode sese ) {
     assert ts != null;
     assert ts.isCanonical();
-    assert sese != null;
 
     // NEVER a cached result... (cry)
     TaintSet out = new TaintSet();
index 5e107d3761cac1c0158b5b7decfcca11a5aed970..75d0646f62865cc75dc2f20ec0ebd7ffa5433fac 100644 (file)
@@ -11,7 +11,7 @@ import java.util.*;
 import java.io.*;
 
 
-public class DisjointAnalysis {
+public class DisjointAnalysis implements HeapAnalysis {
        
   ///////////////////////////////////////////
   //
index 07abff412bdf388b351eb5f63bcaa11fb554b475..25bbe9144d468273518bb22e44b3244580f83f50 100644 (file)
@@ -151,10 +151,10 @@ public class EffectsAnalysis {
       Alloc     affectedAlloc = edge.getDst();
       Effect    effect        = new Effect(affectedAlloc, Effect.read, fld);
 
-      for (Iterator<Taint> taintSetIter = taintSet.iterator(); taintSetIter.hasNext();) {
-        Taint taint = taintSetIter.next();        
-        add(taint, effect, currentProgramPoint);
-      }
+      if (taintSet!=null)
+       for (Taint taint:taintSet.getTaints()) {
+         add(taint, effect, currentProgramPoint);
+       }
     }
   }
 
@@ -194,10 +194,10 @@ public class EffectsAnalysis {
       TaintSet  taintSet      = edge.getTaints();
       Alloc affectedAlloc = edge.getDst();
       Effect    effect        = new Effect(affectedAlloc, Effect.write, fld);       
-      for (Iterator<Taint> taintSetIter = taintSet.iterator(); taintSetIter.hasNext();) {
-        Taint taint = taintSetIter.next();
-        add( taint, effect, currentProgramPoint );
-      }
+      if (taintSet!=null)
+       for (Taint taint:taintSet.getTaints()) {
+         add( taint, effect, currentProgramPoint );
+       }
     }
   }
 
diff --git a/Robust/src/Analysis/Disjoint/HeapAnalysis.java b/Robust/src/Analysis/Disjoint/HeapAnalysis.java
new file mode 100644 (file)
index 0000000..8fd3325
--- /dev/null
@@ -0,0 +1,8 @@
+package Analysis.Disjoint;
+import IR.Flat.FlatNew;
+
+public interface HeapAnalysis {
+  public EffectsAnalysis getEffectsAnalysis();
+  public Alloc getAllocationSiteFromFlatNew(FlatNew node);
+}
+
index 44abdb4d9884fe1c77b096f100ebdd75e5eb3c9d..d80f7f8da7ae4055afb77fa9bf68931ef6c63cf6 100644 (file)
@@ -42,7 +42,7 @@ public class Taint extends Canonical {
   // either type of taint includes a var
   // and allocation site
   protected TempDescriptor var;
-  protected AllocSite      allocSite;
+  protected Alloc      allocSite;
 
   // taints have a new, possibly null element which is
   // the FlatNode at which the tainted reference was
@@ -63,7 +63,7 @@ public class Taint extends Canonical {
 
   public static Taint factory( FlatSESEEnterNode sese,
                                TempDescriptor    insetVar,
-                               AllocSite         as,
+                               Alloc         as,
                                FlatNode          whereDefined,
                                ExistPredSet      eps ) {
     Taint out = new Taint( sese, null, insetVar, as, whereDefined, eps );
@@ -73,7 +73,7 @@ public class Taint extends Canonical {
 
   public static Taint factory( FlatNode       stallSite,
                                TempDescriptor var,
-                               AllocSite      as,
+                               Alloc      as,
                                FlatNode       whereDefined,
                                ExistPredSet   eps ) {
     Taint out = new Taint( null, stallSite, var, as, whereDefined, eps );
@@ -84,7 +84,7 @@ public class Taint extends Canonical {
   public static Taint factory( FlatSESEEnterNode sese,
                                FlatNode          stallSite,
                                TempDescriptor    var,
-                               AllocSite         as,
+                               Alloc         as,
                                FlatNode          whereDefined,
                                ExistPredSet      eps ) {
     Taint out = new Taint( sese, stallSite, var, as, whereDefined, eps );
@@ -95,7 +95,7 @@ public class Taint extends Canonical {
   protected Taint( FlatSESEEnterNode sese,
                    FlatNode          stallSite,
                    TempDescriptor    v,
-                   AllocSite         as,
+                   Alloc         as,
                    FlatNode          fnDefined,
                    ExistPredSet      eps ) {
     assert 
@@ -143,7 +143,7 @@ public class Taint extends Canonical {
     return var;
   }
 
-  public AllocSite getAllocSite() {
+  public Alloc getAllocSite() {
     return allocSite;
   }
 
index 75304f40e3a98d8b148d51307a87033e9f90b282..50ddd6c316e35a1c403dc04ded28b3b7f15a9648 100644 (file)
@@ -12,6 +12,7 @@ import java.util.Set;
 import java.util.Map.Entry;
 import IR.State;
 
+import Analysis.Disjoint.Alloc;
 import Analysis.Disjoint.AllocSite;
 import Analysis.Disjoint.DisjointAnalysis;
 import Analysis.Disjoint.Effect;
@@ -93,7 +94,7 @@ public class ConflictGraph {
   public void addStallSiteEffect(Taint t, Effect e) {
     FlatNode fn = t.getStallSite();
     TempDescriptor var = t.getVar();
-    AllocSite as = t.getAllocSite();
+    Alloc as = t.getAllocSite();
 
     String id = var + "_fn" + fn.hashCode();
     ConflictNode node = id2cn.get(id);
@@ -110,7 +111,7 @@ public class ConflictGraph {
 
     FlatSESEEnterNode sese = t.getSESE();
     TempDescriptor invar = t.getVar();
-    AllocSite as = t.getAllocSite();
+    Alloc as = t.getAllocSite();
 
     String id = invar + "_sese" + sese.getPrettyIdentifier();
     ConflictNode node = id2cn.get(id);
@@ -225,9 +226,9 @@ public class ConflictGraph {
   private int calculateConflictType(ConflictNode node, boolean useReachInfo) {
 
     int conflictType = ConflictGraph.NON_WRITE_CONFLICT;
-    Hashtable<AllocSite, Set<Effect>> alloc2readEffects = node.getReadEffectSet();
-    Hashtable<AllocSite, Set<Effect>> alloc2writeEffects = node.getWriteEffectSet();
-    Hashtable<AllocSite, Set<Effect>> alloc2SUEffects = node.getStrongUpdateEffectSet();
+    Hashtable<Alloc, Set<Effect>> alloc2readEffects = node.getReadEffectSet();
+    Hashtable<Alloc, Set<Effect>> alloc2writeEffects = node.getWriteEffectSet();
+    Hashtable<Alloc, Set<Effect>> alloc2SUEffects = node.getStrongUpdateEffectSet();
 
     conflictType =
         updateConflictType(conflictType, determineConflictType(node, alloc2writeEffects, node,
@@ -244,12 +245,12 @@ public class ConflictGraph {
 
     int conflictType = ConflictGraph.NON_WRITE_CONFLICT;
 
-    Hashtable<AllocSite, Set<Effect>> alloc2readEffectsA = nodeA.getReadEffectSet();
-    Hashtable<AllocSite, Set<Effect>> alloc2writeEffectsA = nodeA.getWriteEffectSet();
-    Hashtable<AllocSite, Set<Effect>> alloc2SUEffectsA = nodeA.getStrongUpdateEffectSet();
-    Hashtable<AllocSite, Set<Effect>> alloc2readEffectsB = nodeB.getReadEffectSet();
-    Hashtable<AllocSite, Set<Effect>> alloc2writeEffectsB = nodeB.getWriteEffectSet();
-    Hashtable<AllocSite, Set<Effect>> alloc2SUEffectsB = nodeB.getStrongUpdateEffectSet();
+    Hashtable<Alloc, Set<Effect>> alloc2readEffectsA = nodeA.getReadEffectSet();
+    Hashtable<Alloc, Set<Effect>> alloc2writeEffectsA = nodeA.getWriteEffectSet();
+    Hashtable<Alloc, Set<Effect>> alloc2SUEffectsA = nodeA.getStrongUpdateEffectSet();
+    Hashtable<Alloc, Set<Effect>> alloc2readEffectsB = nodeB.getReadEffectSet();
+    Hashtable<Alloc, Set<Effect>> alloc2writeEffectsB = nodeB.getWriteEffectSet();
+    Hashtable<Alloc, Set<Effect>> alloc2SUEffectsB = nodeB.getStrongUpdateEffectSet();
 
     // if node A has write effects on reading/writing regions of node B
     conflictType =
@@ -284,8 +285,8 @@ public class ConflictGraph {
   }
 
   private int hasStrongUpdateConflicts(ConflictNode nodeA,
-      Hashtable<AllocSite, Set<Effect>> SUEffectsTableA, ConflictNode nodeB,
-      Hashtable<AllocSite, Set<Effect>> readTableB, Hashtable<AllocSite, Set<Effect>> writeTableB,
+      Hashtable<Alloc, Set<Effect>> SUEffectsTableA, ConflictNode nodeB,
+      Hashtable<Alloc, Set<Effect>> readTableB, Hashtable<Alloc, Set<Effect>> writeTableB,
       boolean useReachInfo) {
 
     int conflictType = ConflictGraph.NON_WRITE_CONFLICT;
@@ -293,13 +294,13 @@ public class ConflictGraph {
     Iterator effectItrA = SUEffectsTableA.entrySet().iterator();
     while (effectItrA.hasNext()) {
       Map.Entry meA = (Map.Entry) effectItrA.next();
-      AllocSite asA = (AllocSite) meA.getKey();
+      Alloc asA = (Alloc) meA.getKey();
       Set<Effect> strongUpdateSetA = (Set<Effect>) meA.getValue();
 
       Iterator effectItrB = readTableB.entrySet().iterator();
       while (effectItrB.hasNext()) {
         Map.Entry meB = (Map.Entry) effectItrB.next();
-        AllocSite asB = (AllocSite) meB.getKey();
+        Alloc asB = (Alloc) meB.getKey();
         Set<Effect> esB = (Set<Effect>) meB.getValue();
 
         for (Iterator iterator = strongUpdateSetA.iterator(); iterator.hasNext();) {
@@ -342,7 +343,7 @@ public class ConflictGraph {
       effectItrB = writeTableB.entrySet().iterator();
       while (effectItrB.hasNext()) {
         Map.Entry meB = (Map.Entry) effectItrB.next();
-        AllocSite asB = (AllocSite) meB.getKey();
+        Alloc asB = (Alloc) meB.getKey();
         Set<Effect> esB = (Set<Effect>) meB.getValue();
 
         for (Iterator iterator = strongUpdateSetA.iterator(); iterator.hasNext();) {
@@ -380,21 +381,21 @@ public class ConflictGraph {
   }
 
   private int determineConflictType(ConflictNode nodeA,
-      Hashtable<AllocSite, Set<Effect>> nodeAtable, ConflictNode nodeB,
-      Hashtable<AllocSite, Set<Effect>> nodeBtable, boolean useReachInfo) {
+      Hashtable<Alloc, Set<Effect>> nodeAtable, ConflictNode nodeB,
+      Hashtable<Alloc, Set<Effect>> nodeBtable, boolean useReachInfo) {
 
     int conflictType = ConflictGraph.NON_WRITE_CONFLICT;
 
     Iterator effectItrA = nodeAtable.entrySet().iterator();
     while (effectItrA.hasNext()) {
       Map.Entry meA = (Map.Entry) effectItrA.next();
-      AllocSite asA = (AllocSite) meA.getKey();
+      Alloc asA = (Alloc) meA.getKey();
       Set<Effect> esA = (Set<Effect>) meA.getValue();
 
       Iterator effectItrB = nodeBtable.entrySet().iterator();
       while (effectItrB.hasNext()) {
         Map.Entry meB = (Map.Entry) effectItrB.next();
-        AllocSite asB = (AllocSite) meB.getKey();
+        Alloc asB = (Alloc) meB.getKey();
         Set<Effect> esB = (Set<Effect>) meB.getValue();
 
         for (Iterator iterator = esA.iterator(); iterator.hasNext();) {
@@ -454,7 +455,7 @@ public class ConflictGraph {
     return conflictType;
   }
 
-  private void addCoarseEffect(ConflictNode node, AllocSite as, Effect e) {
+  private void addCoarseEffect(ConflictNode node, Alloc as, Effect e) {
     Taint t = node.getTaint(as);
     addEffectSetByTaint(t, e);
   }
index 932d7ed9b289baa3840ebe37132fa15be6067ce4..a83ecbe755e3f1db3e91c5e773163fbea63f3cf9 100644 (file)
@@ -5,6 +5,7 @@ import java.util.Hashtable;
 import java.util.Iterator;
 import java.util.Set;
 
+import Analysis.Disjoint.Alloc;
 import Analysis.Disjoint.AllocSite;
 import Analysis.Disjoint.Effect;
 import Analysis.Disjoint.Taint;
@@ -16,12 +17,12 @@ import IR.Flat.TempDescriptor;
 public class ConflictNode {
 
   protected HashSet<ConflictEdge> edgeSet;
-  protected HashSet<AllocSite> allocSet;
+  protected HashSet<Alloc> allocSet;
   protected HashSet<Taint> taintSet;
 
-  protected Hashtable<AllocSite, Set<Effect>> alloc2readEffectSet;
-  protected Hashtable<AllocSite, Set<Effect>> alloc2writeEffectSet;
-  protected Hashtable<AllocSite, Set<Effect>> alloc2strongUpdateEffectSet;
+  protected Hashtable<Alloc, Set<Effect>> alloc2readEffectSet;
+  protected Hashtable<Alloc, Set<Effect>> alloc2writeEffectSet;
+  protected Hashtable<Alloc, Set<Effect>> alloc2strongUpdateEffectSet;
 
   protected int nodeType;
   protected String id;
@@ -54,12 +55,12 @@ public class ConflictNode {
     edgeSet = new HashSet<ConflictEdge>();
     // redundant views of access root's
     // allocation sites for efficient retrieval
-    allocSet = new HashSet<AllocSite>();
+    allocSet = new HashSet<Alloc>();
     taintSet = new HashSet<Taint>();
 
-    alloc2readEffectSet = new Hashtable<AllocSite, Set<Effect>>();
-    alloc2writeEffectSet = new Hashtable<AllocSite, Set<Effect>>();
-    alloc2strongUpdateEffectSet = new Hashtable<AllocSite, Set<Effect>>();
+    alloc2readEffectSet = new Hashtable<Alloc, Set<Effect>>();
+    alloc2writeEffectSet = new Hashtable<Alloc, Set<Effect>>();
+    alloc2strongUpdateEffectSet = new Hashtable<Alloc, Set<Effect>>();
 
     this.id = id;
     this.nodeType = nodeType;
@@ -70,7 +71,7 @@ public class ConflictNode {
     taintSet.add(t);
   }
 
-  public Taint getTaint(AllocSite as) {
+  public Taint getTaint(Alloc as) {
     for (Iterator iterator = taintSet.iterator(); iterator.hasNext();) {
       Taint t = (Taint) iterator.next();
       if (t.getAllocSite().equals(as)) {
@@ -80,7 +81,7 @@ public class ConflictNode {
     return null;
   }
 
-  public void addEffect(AllocSite as, Effect e) {
+  public void addEffect(Alloc as, Effect e) {
     if (e.getType() == Effect.read) {
       addReadEffect(as, e);
     } else if (e.getType() == Effect.write) {
@@ -90,7 +91,7 @@ public class ConflictNode {
     }
   }
 
-  public void addReadEffect(AllocSite as, Effect e) {
+  public void addReadEffect(Alloc as, Effect e) {
     allocSet.add(as);
     Set<Effect> effectSet = alloc2readEffectSet.get(as);
     if (effectSet == null) {
@@ -101,7 +102,7 @@ public class ConflictNode {
     alloc2readEffectSet.put(as, effectSet);
   }
 
-  public void addWriteEffect(AllocSite as, Effect e) {
+  public void addWriteEffect(Alloc as, Effect e) {
     allocSet.add(as);
     Set<Effect> effectSet = alloc2writeEffectSet.get(as);
     if (effectSet == null) {
@@ -112,7 +113,7 @@ public class ConflictNode {
     alloc2writeEffectSet.put(as, effectSet);
   }
 
-  public void addStrongUpdateEffect(AllocSite as, Effect e) {
+  public void addStrongUpdateEffect(Alloc as, Effect e) {
     allocSet.add(as);
     Set<Effect> effectSet = alloc2strongUpdateEffectSet.get(as);
     if (effectSet == null) {
@@ -123,15 +124,15 @@ public class ConflictNode {
     alloc2strongUpdateEffectSet.put(as, effectSet);
   }
 
-  public Hashtable<AllocSite, Set<Effect>> getReadEffectSet() {
+  public Hashtable<Alloc, Set<Effect>> getReadEffectSet() {
     return alloc2readEffectSet;
   }
 
-  public Hashtable<AllocSite, Set<Effect>> getWriteEffectSet() {
+  public Hashtable<Alloc, Set<Effect>> getWriteEffectSet() {
     return alloc2writeEffectSet;
   }
 
-  public Hashtable<AllocSite, Set<Effect>> getStrongUpdateEffectSet() {
+  public Hashtable<Alloc, Set<Effect>> getStrongUpdateEffectSet() {
     return alloc2strongUpdateEffectSet;
   }
 
@@ -149,7 +150,7 @@ public class ConflictNode {
   public Set<FlatNew> getFlatNewSet() {
     Set<FlatNew> fnSet = new HashSet<FlatNew>();
     for (Iterator iterator = allocSet.iterator(); iterator.hasNext();) {
-      AllocSite as = (AllocSite) iterator.next();
+      Alloc as = (Alloc) iterator.next();
       FlatNew fn = as.getFlatNew();
       fnSet.add(fn);
     }
index 11d645e8e504fdf579224d2a283ebc159e97d484..c73f7fa64100b9c7a37b747e683fa3a44a8b627c 100644 (file)
@@ -12,9 +12,11 @@ import java.util.Set;
 import java.util.Stack;
 import java.util.Map.Entry;
 
+import Analysis.Pointer.Pointer;
 import Analysis.ArrayReferencees;
 import Analysis.Liveness;
 import Analysis.CallGraph.CallGraph;
+import Analysis.Disjoint.HeapAnalysis;
 import Analysis.Disjoint.DisjointAnalysis;
 import Analysis.Disjoint.Effect;
 import Analysis.Disjoint.EffectsAnalysis;
@@ -47,7 +49,7 @@ public class OoOJavaAnalysis {
   private TypeUtil typeUtil;
   private CallGraph callGraph;
   private RBlockRelationAnalysis rblockRel;
-  private DisjointAnalysis disjointAnalysisTaints;
+  private HeapAnalysis disjointAnalysisTaints;
   private DisjointAnalysis disjointAnalysisReach;
 
   private Set<MethodDescriptor> descriptorsToAnalyze;
@@ -112,11 +114,10 @@ public class OoOJavaAnalysis {
     return fm;
   }
 
-  public DisjointAnalysis getDisjointAnalysis() {
+  public HeapAnalysis getDisjointAnalysis() {
     return disjointAnalysisTaints;
   }
 
-
   public OoOJavaAnalysis( State            state, 
                           TypeUtil         typeUtil, 
                           CallGraph        callGraph, 
@@ -198,7 +199,11 @@ public class OoOJavaAnalysis {
 
     // 5th pass, use disjointness with NO FLAGGED REGIONS
     // to compute taints and effects
-    disjointAnalysisTaints =
+    if (state.POINTER) {
+      disjointAnalysisTaints = new Pointer(state, typeUtil, callGraph, rblockRel);
+      ((Pointer)disjointAnalysisTaints).doAnalysis();
+    } else
+      disjointAnalysisTaints =
         new DisjointAnalysis(state, typeUtil, callGraph, liveness, arrayReferencees, null, 
                              rblockRel,
                              true ); // suppress output--this is an intermediate pass
@@ -265,7 +270,7 @@ public class OoOJavaAnalysis {
     if (state.OOODEBUG) {
       try {
         writeReports("");
-        disjointAnalysisTaints.getEffectsAnalysis().writeEffects("effects.txt");
+       disjointAnalysisTaints.getEffectsAnalysis().writeEffects("effects.txt");
         writeConflictGraph();
       } catch (IOException e) {}
     }
index f55ad02a513b08366c9c7f35146b7896484fb79c..0e0ab7e65b826eb7aac29ffcd86767a668eae05b 100644 (file)
@@ -6,6 +6,8 @@ import IR.*;
 import IR.Flat.*;
 
 public class AllocFactory {
+  public static AllocNode dummyNode=new AllocNode(-1, null, false);
+
   public static class AllocNode implements Alloc {
     int allocsite;
     boolean summary;
index 607812bcbd331c16d446d26c996802418d7031f9..62d9d844c21d478e114dca6098f1f92dfb733305 100644 (file)
@@ -5,17 +5,21 @@ import IR.*;
 import Analysis.Liveness;
 import Analysis.Pointer.BasicBlock.BBlock;
 import Analysis.Pointer.AllocFactory.AllocNode;
+import Analysis.Disjoint.Alloc;
 import Analysis.Disjoint.Taint;
 import Analysis.Disjoint.TaintSet;
 import Analysis.Disjoint.Canonical;
+import Analysis.Disjoint.HeapAnalysis;
 import Analysis.CallGraph.CallGraph;
 import Analysis.OoOJava.RBlockRelationAnalysis;
+import Analysis.Disjoint.ExistPred;
+import Analysis.Disjoint.ReachGraph;
 import Analysis.Disjoint.EffectsAnalysis;
 import Analysis.Disjoint.BuildStateMachines;
 import java.io.*;
 
 
-public class Pointer {
+public class Pointer implements HeapAnalysis{
   HashMap<FlatMethod, BasicBlock> blockMap;
   HashMap<BBlock, Graph> bbgraphMap;
   HashMap<FlatNode, Graph> graphMap;
@@ -23,7 +27,7 @@ public class Pointer {
   HashMap<BBlock, Set<PPoint>> returnMap;
   HashMap<BBlock, Set<TempDescriptor>> bblivetemps;
 
-  boolean OoOJava=false;
+  private boolean OoOJava=false;
   CallGraph callGraph;
   State state;
   TypeUtil typeUtil;
@@ -32,7 +36,6 @@ public class Pointer {
   TempDescriptor returntmp;
   RBlockRelationAnalysis taskAnalysis;
   EffectsAnalysis effectsAnalysis;
-  BuildStateMachines buildStateMachines;
 
   public Pointer(State state, TypeUtil typeUtil, CallGraph callGraph, RBlockRelationAnalysis taskAnalysis) {
     this(state, typeUtil);
@@ -59,6 +62,10 @@ public class Pointer {
     this.returntmp=new TempDescriptor("RETURNVAL", stringcd);
   }
 
+  public EffectsAnalysis getEffectsAnalysis() {
+    return effectsAnalysis;
+  }
+
   public BasicBlock getBBlock(FlatMethod fm) {
     if (!blockMap.containsKey(fm)) {
       blockMap.put(fm, BasicBlock.getBBlock(fm));
@@ -153,7 +160,7 @@ public class Pointer {
     }
 
     //DEBUG
-    if (true) {
+    if (false) {
       int debugindex=0;
       for(Map.Entry<BBlock, Graph> e:bbgraphMap.entrySet()) {
        Graph g=e.getValue();
@@ -171,6 +178,9 @@ public class Pointer {
        debugindex++;
       } 
     }
+    if (OoOJava) {
+      effectsAnalysis.buildStateMachines.writeStateMachines();
+    }
   }
 
   void plotGraph(Graph g, String name) {
@@ -418,7 +428,7 @@ public class Pointer {
     if (delta.getInit()) {
       removeInitTaints(null, delta, graph);
       for (TempDescriptor tmp:sese.getInVarSet()) {
-       Taint taint=Taint.factory(sese,  null, tmp, null, sese, null);
+       Taint taint=Taint.factory(sese,  null, tmp, AllocFactory.dummyNode, sese, ReachGraph.predsEmpty);
        MySet<Edge> edges=GraphManip.getEdges(graph, delta, tmp);
        for(Edge e:edges) {
          Edge newe=e.addTaint(taint);
@@ -426,9 +436,9 @@ public class Pointer {
        }
       }
     } else {
-      removeDiffTaints(null, delta, graph);
+      removeDiffTaints(null, delta);
       for (TempDescriptor tmp:sese.getInVarSet()) {
-       Taint taint=Taint.factory(sese,  null, tmp, null, sese, null);
+       Taint taint=Taint.factory(sese,  null, tmp, AllocFactory.dummyNode, sese, ReachGraph.predsEmpty);
        MySet<Edge> edges=GraphManip.getDiffEdges(delta, tmp);
        for(Edge e:edges) {
          Edge newe=e.addTaint(taint);
@@ -544,7 +554,7 @@ public class Pointer {
        continue;
       for(Edge e:entry.getValue()) {
        //check whether this edge has been removed
-       if (removemap==null&&removemap.containsKey(entry.getKey())&&
+       if (removemap!=null&&removemap.containsKey(entry.getKey())&&
            removemap.get(entry.getKey()).contains(e))
          continue;
        //have real edge
@@ -561,10 +571,6 @@ public class Pointer {
     }
   }
 
-  void removeDiffTaints(FlatSESEEnterNode sese, Delta delta, Graph graph) {
-    
-  }
-
   /* This function compute the edges for the this variable for a
    * callee if it exists. */
 
@@ -952,7 +958,11 @@ public class Pointer {
       delta.addVarEdge(e);
     }
   }
-  
+  public Alloc getAllocationSiteFromFlatNew(FlatNew node) {
+    return allocFactory.getAllocNode(node, false);
+  }
   void processSumHeapEdgeSet(HashMap<AllocNode, MySet<Edge>> map, Delta delta, Graph graph) {
     MySet<Edge> edgestoadd=new MySet<Edge>();
     MySet<Edge> edgestoremove=new MySet<Edge>();
@@ -1055,7 +1065,7 @@ public class Pointer {
            edgetoadd=origEdgeKey;
          }
        }
-       if (seseCallers!=null)
+       if (seseCallers!=null&&edgetoadd!=null)
          edgetoadd.taintModify(seseCallers);
        mergeCallEdge(graph, newDelta, edgetoadd);
       }
@@ -1404,7 +1414,7 @@ public class Pointer {
       dst=ffn.getDst();
     }
     if (OoOJava&&taskAnalysis.isPotentialStallSite(node)) {
-      taint=TaintSet.factory(Taint.factory(node,  src, null, null, null));
+      taint=TaintSet.factory(Taint.factory(node,  src, AllocFactory.dummyNode, null, ReachGraph.predsEmpty));
     }
 
     //Do nothing for non pointers
index 413aea88bad9b92dfdd60b1816f019c73857636d..1d234f90cf72c292407baed776474235506247af 100644 (file)
@@ -148,7 +148,7 @@ public class RuntimeConflictResolver {
     ConflictGraph conflictGraph;
     ReachGraph rg;
     Hashtable<Taint, Set<Effect>> conflicts;
-    DisjointAnalysis disjointAnaylsis = oooa.getDisjointAnalysis();
+    DisjointAnalysis disjointAnalysis = (DisjointAnalysis) oooa.getDisjointAnalysis();
     
     //Go through the SESE's
     printDebug(generalDebug, "======================SESE's======================");
@@ -159,7 +159,7 @@ public class RuntimeConflictResolver {
           (parentSESE     = (FlatSESEEnterNode) fsen.getParents().iterator().next())   != null &&
           (conflictGraph  = oooa.getConflictGraph(parentSESE))                            != null &&
           (conflicts      = conflictGraph.getConflictEffectSet(fsen))                     != null &&
-          (rg             = disjointAnaylsis.getEnterReachGraph(fsen))                    != null ){
+          (rg             = disjointAnalysis.getEnterReachGraph(fsen))                    != null ){
         
         addToTraverseToDoList(fsen, rg, conflicts, conflictGraph);
       }
@@ -176,7 +176,7 @@ public class RuntimeConflictResolver {
       if(  fsen.getParents().size() != 0                                                     &&
           (conflictGraph  = oooa.getConflictGraph(fsen))                                != null &&
           (conflicts      = conflictGraph.getConflictEffectSet(fn))                     != null &&
-          (rg             = disjointAnaylsis.getEnterReachGraph(fn))                    != null ){
+          (rg             = disjointAnalysis.getEnterReachGraph(fn))                    != null ){
 
         Set<SESELock> seseLockSet = oooa.getLockMappings(conflictGraph);
         Set<WaitingElement> waitingElementSet =
@@ -909,7 +909,7 @@ public class RuntimeConflictResolver {
   private void printoutTable(EffectsTable table) {
     
     System.out.println("==============EFFECTS TABLE PRINTOUT==============");
-    for(AllocSite as: table.table.keySet()) {
+    for(Alloc as: table.table.keySet()) {
       System.out.println("\tFor AllocSite " + as.getUniqueAllocSiteID());
       
       BucketOfEffects boe = table.table.get(as);
@@ -1227,11 +1227,11 @@ public class RuntimeConflictResolver {
   }
   
   private class EffectsTable {
-    private Hashtable<AllocSite, BucketOfEffects> table;
+    private Hashtable<Alloc, BucketOfEffects> table;
 
     public EffectsTable(Hashtable<Taint, Set<Effect>> effects,
                         Hashtable<Taint, Set<Effect>> conflicts) {
-      table = new Hashtable<AllocSite, BucketOfEffects>();
+      table = new Hashtable<Alloc, BucketOfEffects>();
 
       // rehash all effects (as a 5-tuple) by their affected allocation site
       for (Taint t : effects.keySet()) {
@@ -1266,7 +1266,7 @@ public class RuntimeConflictResolver {
         printoutTable(this); 
       }
       
-      for(AllocSite key: table.keySet()) {
+      for(Alloc key: table.keySet()) {
         BucketOfEffects effects = table.get(key);
         //make sure there are actually conflicts in the bucket
         if(effects.potentiallyConflictingRoots != null && !effects.potentiallyConflictingRoots.isEmpty()){