stable, non-functional still
authorjjenista <jjenista>
Fri, 10 Apr 2009 21:42:37 +0000 (21:42 +0000)
committerjjenista <jjenista>
Fri, 10 Apr 2009 21:42:37 +0000 (21:42 +0000)
Robust/src/Analysis/MLP/MLPAnalysis.java
Robust/src/Analysis/MLP/SVKey.java
Robust/src/Analysis/MLP/VarSrcTokTable.java

index f4ca377ae511e98b7612e801181340bdd2e9ee72..525d7377177c97d1d3615579a508dcf4fbda22de 100644 (file)
@@ -19,8 +19,7 @@ public class MLPAnalysis {
   private Set<FlatSESEEnterNode>   seseRoots;
 
   private Hashtable< FlatNode, Stack<FlatSESEEnterNode> > seseStacks;
-
-  private Hashtable< FlatNode, Set<VariableSourceToken> > pointResults;
+  private Hashtable< FlatNode, VarSrcTokTable           > pointResults;
 
 
   public MLPAnalysis( State state,
@@ -39,7 +38,7 @@ public class MLPAnalysis {
     // initialize analysis data structures
     seseRoots    = new HashSet<FlatSESEEnterNode>();
     seseStacks   = new Hashtable< FlatNode, Stack<FlatSESEEnterNode> >();
-    pointResults = new Hashtable< FlatNode, Set<VariableSourceToken> >();
+    pointResults = new Hashtable< FlatNode, VarSrcTokTable           >();
 
 
     // run analysis on each method that is actually called
@@ -120,7 +119,7 @@ public class MLPAnalysis {
       analyzeFlatNodeForward( fn, seseStack );
 
       // initialize for backward computation in next step
-      pointResults.put( fn, new HashSet<VariableSourceToken>() );
+      pointResults.put( fn, new VarSrcTokTable() );
 
       for( int i = 0; i < fn.numNext(); i++ ) {
        FlatNode nn = fn.getNext( i );
@@ -148,16 +147,16 @@ public class MLPAnalysis {
       FlatNode fn = (FlatNode) flatNodesToVisit.iterator().next();
       flatNodesToVisit.remove( fn );      
 
-      Set<VariableSourceToken> prev = pointResults.get( fn );
+      VarSrcTokTable prev = pointResults.get( fn );
 
       // merge sets from control flow joins
-      Set<VariableSourceToken> merge = new HashSet<VariableSourceToken>();
+      VarSrcTokTable inUnion = new VarSrcTokTable();
       for( int i = 0; i < fn.numNext(); i++ ) {
-       FlatNode nn = fn.getNext( i );   
-       merge = mergeVSTsets( merge, pointResults.get( nn ) );
+       FlatNode nn = fn.getNext( i );
+       inUnion.merge( pointResults.get( nn ) );
       }
 
-      Set<VariableSourceToken> curr = analyzeFlatNodeBackward( fn, merge, fsen );
+      VarSrcTokTable curr = analyzeFlatNodeBackward( fn, inUnion, fsen );
 
       // if a new result, schedule backward nodes for analysis
       if( !prev.equals( curr ) ) {
@@ -225,9 +224,9 @@ public class MLPAnalysis {
   }
 
 
-  private Set<VariableSourceToken> analyzeFlatNodeBackward( FlatNode fn, 
-                                                           Set<VariableSourceToken> vstSet,
-                                                           FlatSESEEnterNode currentSESE ) {
+  private VarSrcTokTable analyzeFlatNodeBackward( FlatNode fn, 
+                                                 VarSrcTokTable vstTable,
+                                                 FlatSESEEnterNode currentSESE ) {
     switch( fn.kind() ) {
 
     case FKind.FlatSESEEnterNode: {
@@ -259,16 +258,14 @@ public class MLPAnalysis {
       // handle effects of statement in reverse, writes then reads
       TempDescriptor [] writeTemps = fn.writesTemps();
       for( int i = 0; i < writeTemps.length; ++i ) {
-       vstSet = killTemp( vstSet, writeTemps[i] );
+       vstTable.remove( writeTemps[i] );
       }
 
       TempDescriptor [] readTemps = fn.readsTemps();
       for( int i = 0; i < readTemps.length; ++i ) {
-       Set<VariableSourceToken> vstNew = new HashSet<VariableSourceToken>();
-       vstNew.add( new VariableSourceToken( currentSESE, 
-                                            readTemps[i],
-                                            new Integer( 0 ) ) );
-       vstSet = mergeVSTsets( vstSet, vstNew );
+       vstTable.add( new VariableSourceToken( currentSESE, 
+                                              readTemps[i],
+                                              new Integer( 0 ) ) );
       }
     } break;
 
@@ -312,88 +309,6 @@ public class MLPAnalysis {
     } // end switch
 
 
-    return vstSet;
-  }
-
-
-  private Set<VariableSourceToken> killTemp( Set<VariableSourceToken> s,
-                                            TempDescriptor t ) {
-    Set<VariableSourceToken> out = new HashSet<VariableSourceToken>();
-
-    Iterator<VariableSourceToken> vstitr = s.iterator();
-    while( vstitr.hasNext() ) {
-      VariableSourceToken vst = vstitr.next();    
-
-      if( !vst.getVar().equals( t ) ) {
-       out.add( vst );
-      }
-    }
-
-    return out;
-  }
-
-
-  private Set<VariableSourceToken> mergeVSTsets( Set<VariableSourceToken> s1,
-                                                Set<VariableSourceToken> s2 ) {
-    
-    Set<VariableSourceToken> out = new HashSet<VariableSourceToken>();
-
-    Iterator<VariableSourceToken> vst1itr = s1.iterator();
-    while( vst1itr.hasNext() ) {
-      VariableSourceToken vst1 = vst1itr.next();
-
-      int changeAge = -1;
-      
-      Iterator<VariableSourceToken> vst2itr = s2.iterator();
-      while( vst2itr.hasNext() ) {
-       VariableSourceToken vst2 = vst2itr.next();
-
-       if( vst1.getSESE().equals( vst2.getSESE() ) &&
-           vst1.getVar() .equals( vst2.getVar()  )    ) {
-         changeAge = vst1.getAge();
-         int a = vst2.getAge();
-         if( a < changeAge ) {
-           changeAge = a;
-         }
-         break;
-       }
-      }
-
-      if( changeAge < 0 ) {
-       out.add( vst1 );
-      } else {
-       out.add( new VariableSourceToken( vst1.getSESE(),
-                                         vst1.getVar(),
-                                         new Integer( changeAge ) ) );
-      }
-    }
-
-
-    Iterator<VariableSourceToken> vst2itr = s2.iterator();
-    while( vst2itr.hasNext() ) {
-      VariableSourceToken vst2 = vst2itr.next();           
-
-      boolean matchSESEandVar = false;
-
-      vst1itr = s1.iterator();
-      while( vst1itr.hasNext() ) {
-       VariableSourceToken vst1 = vst1itr.next();
-
-       if( vst1.getSESE().equals( vst2.getSESE() ) &&
-           vst1.getVar() .equals( vst2.getVar()  )    ) {
-         matchSESEandVar = true;
-         break;
-       }
-      }
-
-      if( !matchSESEandVar ) {
-       out.add( vst2 );
-      }
-    }
-    
-
-    return out;
+    return vstTable;
   }
 }
-
-
index afc53d099a562a2e5b59493939c4b6db9816c495..d23ea6088316edad31a36327e174f9edc97e9e69 100644 (file)
@@ -35,8 +35,8 @@ public class SVKey {
 
     SVKey k = (SVKey) o;
 
-    return var.equals( vst.var  ) &&
-          sese.equals( vst.sese );
+    return var.equals( k.var  ) &&
+          sese.equals( k.sese );
   }
 
   public int hashCode() {
index 9a22b5b309cf6e67b098047f8b2a088841931912..9950af24f782ffbc3c86ebee58e06193ca96969c 100644 (file)
@@ -92,10 +92,10 @@ public class VarSrcTokTable {
   public void merge( VarSrcTokTable table ) {
     trueSet.addAll( table.trueSet );
 
-    Iterator i; 
+    Iterator itr
     Set s;
 
-    itr = sese2vst.getEntrySet().iterator();
+    itr = sese2vst.entrySet().iterator();
     while( itr.hasNext() ) {
       Map.Entry                me   = (Map.Entry)                itr.next();
       FlatSESEEnterNode        sese = (FlatSESEEnterNode)        me.getKey();
@@ -108,11 +108,11 @@ public class VarSrcTokTable {
        s1.addAll( s2 );
       }           
     }
-    s = table.sese2vst.getEntrySet();
-    s.retainAll( sese2vst.getEntrySet() );
+    s = table.sese2vst.entrySet();
+    s.retainAll( sese2vst.entrySet() );
     sese2vst.putAll( table.sese2vst );
 
-    itr = var2vst.getEntrySet().iterator();
+    itr = var2vst.entrySet().iterator();
     while( itr.hasNext() ) {
       Map.Entry                me  = (Map.Entry)                itr.next();
       TempDescriptor           var = (TempDescriptor)           me.getKey();
@@ -125,11 +125,11 @@ public class VarSrcTokTable {
        s1.addAll( s2 );
       }           
     }
-    s = table.var2vst.getEntrySet();
-    s.retainAll( var2vst.getEntrySet() );
+    s = table.var2vst.entrySet();
+    s.retainAll( var2vst.entrySet() );
     var2vst.putAll( table.var2vst );
 
-    itr = sv2vst.getEntrySet().iterator();
+    itr = sv2vst.entrySet().iterator();
     while( itr.hasNext() ) {
       Map.Entry                me  = (Map.Entry)                itr.next();
       SVKey                    key = (SVKey)                    me.getKey();
@@ -142,8 +142,8 @@ public class VarSrcTokTable {
        s1.addAll( s2 );
       }           
     }
-    s = table.sv2vst.getEntrySet();
-    s.retainAll( sv2vst.getEntrySet() );
+    s = table.sv2vst.entrySet();
+    s.retainAll( sv2vst.entrySet() );
     sv2vst.putAll( table.sv2vst );
   }
 
@@ -178,11 +178,13 @@ public class VarSrcTokTable {
     }
     
     trueSet.removeAll( s );
-    sese2vst.remove( sese );
-    var2vst .remove( var  );
     sv2vst  .remove( key  );
   }
 
+  public void remove( VariableSourceToken vst ) {
+    trueSet.remove( vst );
+  }
+
   public boolean equals( Object o ) {
     if( o == null ) {
       return false;
@@ -200,6 +202,10 @@ public class VarSrcTokTable {
     return trueSet.hashCode();
   }
 
+  public Iterator<VariableSourceToken> iterator() {
+    return trueSet.iterator();
+  }
+
   public String toString() {
     return trueSet.toString();
   }