Still haven't worked all the bugs out of MLP's support for method calls, but stable...
[IRC.git] / Robust / src / Analysis / MLP / CodePlan.java
index 1a3f322bb9468b1ba564b3366908f51d6a9326dc..76a504044177e1871991f8134fcc643edc4f35d6 100644 (file)
@@ -9,45 +9,59 @@ import java.io.*;
 // a code plan contains information based on analysis results
 // for injecting code before and/or after a flat node
 public class CodePlan {
-
-  private Set<VariableSourceToken> writeToDynamicSrc;
-
-  private Hashtable< SESEandAgePair, Set<TempDescriptor> > stall2copySet;
-
+    
+  private Hashtable< VariableSourceToken, Set<TempDescriptor> > stall2copySet;
+  private Set<TempDescriptor>                                   dynamicStallSet;
+  private Hashtable<TempDescriptor, TempDescriptor>             dynAssign_lhs2rhs;
+  private FlatSESEEnterNode                                     currentSESE;
   
-  public CodePlan() {
-    writeToDynamicSrc = null;
+  public CodePlan( FlatSESEEnterNode fsen ) {
+    stall2copySet     = new Hashtable< VariableSourceToken, Set<TempDescriptor> >();
+    dynamicStallSet   = new HashSet<TempDescriptor>();
+    dynAssign_lhs2rhs = new Hashtable<TempDescriptor, TempDescriptor>();
+    currentSESE       = fsen;
+  }
 
-    stall2copySet = new Hashtable< SESEandAgePair, Set<TempDescriptor> >();
+  public FlatSESEEnterNode getCurrentSESE() {
+    return currentSESE;
   }
+  
+  public void addStall2CopySet( VariableSourceToken stallToken,
+                               Set<TempDescriptor> copySet ) {
 
+    if( stall2copySet.containsKey( stallToken ) ) {
+      Set<TempDescriptor> priorCopySet = stall2copySet.get( stallToken );
+      priorCopySet.addAll( copySet );
+    } else {
+      stall2copySet.put( stallToken, copySet );
+    }
+  }
 
-  public void setWriteToDynamicSrc( 
-               Set<VariableSourceToken> writeToDynamicSrc 
-                                 ) {
-    this.writeToDynamicSrc = writeToDynamicSrc;
+  public Set<VariableSourceToken> getStallTokens() {
+    return stall2copySet.keySet();
   }
 
-  public Set<VariableSourceToken> getWriteToDynamicSrc() {
-    return writeToDynamicSrc;
+  public Set<TempDescriptor> getCopySet( VariableSourceToken stallToken ) {
+    return stall2copySet.get( stallToken );
   }
 
 
-  public void addStall2CopySet( SESEandAgePair      stallPair,
-                               Set<TempDescriptor> copySet ) {
+  public void addDynamicStall( TempDescriptor var ) {
+    dynamicStallSet.add( var );
+  }
 
-    if( stall2copySet.containsKey( stallPair ) ) {
-      Set<TempDescriptor> priorCopySet = stall2copySet.get( stallPair );
-      priorCopySet.addAll( copySet );
-    } else {
-      stall2copySet.put( stallPair, copySet );
-    }
+  public Set<TempDescriptor> getDynamicStallSet() {
+    return dynamicStallSet;
   }
 
-  public Hashtable< SESEandAgePair, Set<TempDescriptor> > getStall2copySet() {
-    return stall2copySet;
+  public void addDynAssign( TempDescriptor lhs,
+                           TempDescriptor rhs ) {
+    dynAssign_lhs2rhs.put( lhs, rhs );
   }
 
+  public Hashtable<TempDescriptor, TempDescriptor> getDynAssigns() {
+    return dynAssign_lhs2rhs;
+  }
 
   public boolean equals( Object o ) {
     if( o == null ) {
@@ -60,59 +74,56 @@ public class CodePlan {
 
     CodePlan cp = (CodePlan) o;
 
-    boolean dynamicSetEq;
-    if( writeToDynamicSrc == null ) {
-      dynamicSetEq = (cp.writeToDynamicSrc == null);
-    } else {
-      dynamicSetEq = (writeToDynamicSrc.equals( cp.writeToDynamicSrc ));
-    }
-
     boolean copySetsEq = (stall2copySet.equals( cp.stall2copySet ));
+
+    boolean dynStallSetEq = (dynamicStallSet.equals( cp.dynamicStallSet ));
+
+    boolean dynAssignEq = (dynAssign_lhs2rhs.equals( cp.dynAssign_lhs2rhs ));
         
-    return dynamicSetEq && copySetsEq;
+    return copySetsEq && dynStallSetEq && dynAssignEq;
   }
 
   public int hashCode() {
-    int dynamicSetHC = 1;
-    if( writeToDynamicSrc != null  ) {
-      dynamicSetHC = writeToDynamicSrc.hashCode();
-    }
 
     int copySetsHC = stall2copySet.hashCode();
 
-    return dynamicSetHC ^ 3*copySetsHC;
-  }
-
-  public String toString() {
-    String s = "";
+    int dynStallSetHC = dynamicStallSet.hashCode();
 
-    if( writeToDynamicSrc != null ) {
-      s += "[WRITE DYN";
+    int dynAssignHC = dynAssign_lhs2rhs.hashCode();
 
-      Iterator<VariableSourceToken> vstItr = writeToDynamicSrc.iterator();
-      while( vstItr.hasNext() ) {
-       VariableSourceToken vst = vstItr.next();
-       s += ", "+vst;
-      }
+    int hash = 7;
+    hash = 31*hash + copySetsHC;
+    hash = 31*hash + dynStallSetHC;
+    hash = 31*hash + dynAssignHC;
+    return hash;
+  }
 
-      s += "]";
-    }
+  public String toString() {
+    String s = " PLAN: ";
 
     if( !stall2copySet.entrySet().isEmpty() ) {
-      s += "[STALLS:";
+      s += "[STATIC STALLS:";
     }
     Iterator cpsItr = stall2copySet.entrySet().iterator();
     while( cpsItr.hasNext() ) {
-      Map.Entry           me        = (Map.Entry)           cpsItr.next();
-      SESEandAgePair      stallPair = (SESEandAgePair)      me.getKey();
-      Set<TempDescriptor> copySet   = (Set<TempDescriptor>) me.getValue();
+      Map.Entry           me         = (Map.Entry)           cpsItr.next();
+      VariableSourceToken stallToken = (VariableSourceToken) me.getKey();
+      Set<TempDescriptor> copySet    = (Set<TempDescriptor>) me.getValue();
 
-      s += "("+stallPair+"->"+copySet+")";
+      s += "("+stallToken+"->"+copySet+")";
     }
     if( !stall2copySet.entrySet().isEmpty() ) {
       s += "]";
     }
 
+    if( !dynamicStallSet.isEmpty() ) {
+      s += "[DYN STALLS:"+dynamicStallSet+"]";
+    }
+
+    if( !dynAssign_lhs2rhs.isEmpty() ) {
+      s += "[DYN ASSIGNS:"+dynAssign_lhs2rhs+"]";
+    }
+
     return s;
   }
 }