liveness analysis simplified to ignore SESE's, analyzes each SESE in isolation. ...
authorjjenista <jjenista>
Fri, 17 Apr 2009 16:51:08 +0000 (16:51 +0000)
committerjjenista <jjenista>
Fri, 17 Apr 2009 16:51:08 +0000 (16:51 +0000)
Robust/src/Analysis/MLP/MLPAnalysis.java
Robust/src/IR/Flat/FlatSESEEnterNode.java
Robust/src/Tests/mlp/tinyTest/test.java

index 0ba9cacf84f2f8ffbf549774b3af9fabb8729855..e9092d02f9d612a8f9348d84f40319a5ed6020da 100644 (file)
@@ -23,7 +23,7 @@ public class MLPAnalysis {
   private FlatSESEExitNode  rootExit;
 
   private Hashtable< FlatNode, Stack<FlatSESEEnterNode> > seseStacks;
-  private Hashtable< FlatNode, VarSrcTokTable           > livenessResults;
+  private Hashtable< FlatNode, Set<TempDescriptor>      > livenessResults;
   private Hashtable< FlatNode, VarSrcTokTable           > variableResults;
 
 
@@ -43,8 +43,8 @@ public class MLPAnalysis {
     // initialize analysis data structures
     seseRoots       = new HashSet<FlatSESEEnterNode>();
     seseStacks      = new Hashtable< FlatNode, Stack<FlatSESEEnterNode> >();
-    livenessResults = new Hashtable< FlatNode,          VarSrcTokTable  >();
-    variableResults = new Hashtable< FlatNode,          VarSrcTokTable  >();
+    livenessResults = new Hashtable< FlatNode, Set<TempDescriptor>      >();
+    variableResults = new Hashtable< FlatNode, VarSrcTokTable           >();
 
     // build an implicit root SESE to wrap contents of main method
     /*
@@ -239,16 +239,19 @@ public class MLPAnalysis {
       }
       */
       
-      VarSrcTokTable prev = livenessResults.get( fn );
+      Set<TempDescriptor> prev = livenessResults.get( fn );
 
       // merge sets from control flow joins
-      VarSrcTokTable inUnion = new VarSrcTokTable();
+      Set<TempDescriptor> u = new HashSet<TempDescriptor>();
       for( int i = 0; i < fn.numNext(); i++ ) {
        FlatNode nn = fn.getNext( i );
-       inUnion.merge( livenessResults.get( nn ) );
+        Set<TempDescriptor> s = livenessResults.get( nn );
+        if( s != null ) {
+          u.addAll( s );
+        }
       }
 
-      VarSrcTokTable curr = liveness_nodeActions( fn, inUnion, fsen );
+      Set<TempDescriptor> curr = liveness_nodeActions( fn, u, fsen );
 
       // if a new result, schedule backward nodes for analysis
       if( !curr.equals( prev ) ) {
@@ -265,11 +268,14 @@ public class MLPAnalysis {
       }
     }
     
-    fsen.addInVarSet( livenessResults.get( fsen ).get() );
+    Set<TempDescriptor> s = livenessResults.get( fsen );
+    if( s != null ) {
+      fsen.addInVarSet( s );
+    }
     
     if( state.MLPDEBUG ) { 
       System.out.println( "SESE "+fsen.getPrettyIdentifier()+" has in-set:" );
-      Iterator<VariableSourceToken> tItr = fsen.getInVarSet().iterator();
+      Iterator<TempDescriptor> tItr = fsen.getInVarSet().iterator();
       while( tItr.hasNext() ) {
        System.out.println( "  "+tItr.next() );
       }
@@ -284,46 +290,32 @@ public class MLPAnalysis {
     }
   }
 
-  private VarSrcTokTable liveness_nodeActions( FlatNode fn, 
-                                              VarSrcTokTable vstTable,
-                                              FlatSESEEnterNode currentSESE ) {
+  private Set<TempDescriptor> liveness_nodeActions( FlatNode fn, 
+                                                    Set<TempDescriptor> liveIn,
+                                                    FlatSESEEnterNode currentSESE ) {
     switch( fn.kind() ) {
-
-    case FKind.FlatSESEEnterNode: {
-      FlatSESEEnterNode fsen = (FlatSESEEnterNode) fn;
-
-      // only age if this is a child SESE, not the current     
-      if( !fsen.equals( currentSESE ) ) {
-       vstTable = vstTable.age( currentSESE );
-      }
-    } break;
-
+      
     default: {
       // handle effects of statement in reverse, writes then reads
       TempDescriptor [] writeTemps = fn.writesTemps();
       for( int i = 0; i < writeTemps.length; ++i ) {
-       vstTable.remove( writeTemps[i] );
-       currentSESE.addOutVar( new VariableSourceToken( currentSESE, 
-                                                       writeTemps[i],
-                                                       new Integer( 0 ) ) );
+       liveIn.remove( writeTemps[i] );
       }
 
       TempDescriptor [] readTemps = fn.readsTemps();
       for( int i = 0; i < readTemps.length; ++i ) {
-       vstTable.add( new VariableSourceToken( currentSESE, 
-                                              readTemps[i],
-                                              new Integer( 0 ) ) );
+       liveIn.add( readTemps[i] );
       }
     } break;
 
     } // end switch
 
-    return vstTable;
+    return liveIn;
   }
 
 
   private void variableAnalysisForward( FlatSESEEnterNode fsen ) {
-    
+    /*
     Set<FlatNode> flatNodesToVisit = new HashSet<FlatNode>();
     flatNodesToVisit.add( fsen );       
 
@@ -372,6 +364,7 @@ public class MLPAnalysis {
       }
       System.out.println( "" );
     }
+    */
   }
 
   private VarSrcTokTable variable_nodeActions( FlatNode fn, 
index 1373659c1410351317e214e52939460134034914..ee035b7355c245409e369fef824b1153d8d0e4a2 100644 (file)
@@ -9,7 +9,7 @@ public class FlatSESEEnterNode extends FlatNode {
   protected FlatSESEExitNode exit;
   protected SESENode treeNode;
   protected Set<FlatSESEEnterNode> children;
-  protected Set<VariableSourceToken> inVars;
+  protected Set<TempDescriptor> inVars;
   protected Set<VariableSourceToken> outVars;
   protected FlatMethod enclosing;
 
@@ -17,7 +17,7 @@ public class FlatSESEEnterNode extends FlatNode {
     this.id  = identifier++;
     treeNode = sn;
     children = new HashSet<FlatSESEEnterNode>();
-    inVars   = new HashSet<VariableSourceToken>();
+    inVars   = new HashSet<TempDescriptor>();
     outVars  = new HashSet<VariableSourceToken>();
   }
 
@@ -35,15 +35,15 @@ public class FlatSESEEnterNode extends FlatNode {
     return children;
   }
 
-  public void addInVar( VariableSourceToken vst ) {
-    inVars.add( vst );
+  public void addInVar( TempDescriptor td ) {
+    inVars.add( td );
   }
 
   public void addOutVar( VariableSourceToken vst ) {
     outVars.add( vst );
   }
 
-  public void addInVarSet( Set<VariableSourceToken> s ) {
+  public void addInVarSet( Set<TempDescriptor> s ) {
     inVars.addAll( s );
   }
 
@@ -51,7 +51,7 @@ public class FlatSESEEnterNode extends FlatNode {
     outVars.addAll( s );
   }
 
-  public Set<VariableSourceToken> getInVarSet() {
+  public Set<TempDescriptor> getInVarSet() {
     return inVars;
   }
 
index 5a6a6a8ac3ff8cd680260635234729c31290b65a..4b902178cc3d3e16353adeb53eebd9d5f7b5ead5 100644 (file)
@@ -9,14 +9,12 @@ public class Test {
       
       sese top {     
        int x = 0;
-      
-       
-       //for( int i = 0; i < 3; ++i ) {
+       
+       for( int i = 0; i < 3; ++i ) {
          sese iter {
-           x = x; // + i;
+           x = x + i;
          }
-         //}      
-       
+        }              
 
        int j = x + n;
       }