stable capture, bug fixes--a problem: using an SESEs liveIn set liberally, some cases...
authorjjenista <jjenista>
Wed, 29 Apr 2009 21:51:12 +0000 (21:51 +0000)
committerjjenista <jjenista>
Wed, 29 Apr 2009 21:51:12 +0000 (21:51 +0000)
Robust/src/Analysis/MLP/MLPAnalysis.java
Robust/src/Analysis/MLP/VarSrcTokTable.java
Robust/src/Tests/mlp/tinyTest/test.java

index cd6759dfcd5cf4c46b496a1b8431c015e968a283..ec22eb0b1825defaea8ce1de7c100b5ee9bed827 100644 (file)
@@ -87,22 +87,23 @@ public class MLPAnalysis {
     }
 
 
-    // 4th pass
+    // 4th pass, compute liveness contribution from
+    // virtual reads discovered in variable pass
+    livenessResults = new Hashtable< FlatNode, Set<TempDescriptor> >();
+    livenessAnalysisBackward( rootSESE );
+
+
+    // 5th pass
     methItr = ownAnalysis.descriptorsToAnalyze.iterator();
     while( methItr.hasNext() ) {
       Descriptor d  = methItr.next();      
       FlatMethod fm = state.getMethodFlat( d );
 
+      // compute a plan for code injections
       computeStallsForward( fm );
     }
 
 
-    // 5th pass, compute liveness contribution from
-    // virtual reads discovered in stall pass
-    livenessResults = new Hashtable< FlatNode, Set<TempDescriptor> >();
-    livenessAnalysisBackward( rootSESE );
-
-
     double timeEndAnalysis = (double) System.nanoTime();
     double dt = (timeEndAnalysis - timeStartAnalysis)/(Math.pow( 10.0, 9.0 ) );
     String treport = String.format( "The mlp analysis took %.3f sec.", dt );
@@ -371,14 +372,13 @@ public class MLPAnalysis {
       assert currentSESE.getChildren().contains( fsen );
       vstTable.remapChildTokens( fsen );
 
-      Set<TempDescriptor> liveIn       = livenessResults.get( fn );
+      Set<TempDescriptor> liveIn       = currentSESE.getInVarSet();
       Set<TempDescriptor> virLiveIn    = vstTable.removeParentAndSiblingTokens( fsen, liveIn );
-      Set<TempDescriptor> virLiveInNew = livenessVirtualReads.get( fn );
-      if( virLiveInNew == null ) {
-       virLiveInNew = new HashSet<TempDescriptor>();
+      Set<TempDescriptor> virLiveInOld = livenessVirtualReads.get( fn );
+      if( virLiveInOld != null ) {
+        virLiveIn.addAll( virLiveInOld );
       }
-      virLiveInNew.addAll( virLiveIn );
-      livenessVirtualReads.put( fn, virLiveInNew );
+      livenessVirtualReads.put( fn, virLiveIn );
     } break;
 
     case FKind.FlatOpNode: {
@@ -504,10 +504,8 @@ public class MLPAnalysis {
     } break;
 
     default: {          
-      Set<VariableSourceToken> stallSet = vstTable.getStallSet( currentSESE );
-     
-      
-      Set<TempDescriptor>      liveIn   = livenessResults.get( fn );
+      Set<VariableSourceToken> stallSet = vstTable.getStallSet( currentSESE );           
+      Set<TempDescriptor>      liveIn   = currentSESE.getInVarSet();
 
       if( liveIn != null ) {
        stallSet.retainAll( liveIn );
@@ -515,7 +513,6 @@ public class MLPAnalysis {
        // there is nothing live, clear all
        stallSet.clear();
       }
-      
 
       if( !stallSet.isEmpty() ) {
        s = "STALL for:";
index b71d2805746f10e4e5494d1f2ab9695b699cc1e2..b01a16f603568f3c8631ef29468a920717119000 100644 (file)
@@ -395,7 +395,7 @@ public class VarSrcTokTable {
   // of A as a source for that variable: s is virtual reads\r
   protected void remove_A_if_B( FlatSESEEnterNode a, \r
                                FlatSESEEnterNode b,\r
-                               Set<TempDescriptor> liveIn,\r
+                               Set<TempDescriptor> liveInCurrentSESE,\r
                                Set<TempDescriptor> virtualLiveIn ) {\r
 \r
     Set<VariableSourceToken> forRemoval = new HashSet<VariableSourceToken>();\r
@@ -410,12 +410,18 @@ public class VarSrcTokTable {
         forRemoval.add( vst );\r
 \r
         // mark this variable as a virtual read as well\r
-       if( liveIn.contains( varLive ) ) {\r
-         virtualLiveIn.add( varLive );\r
-       }\r
+       //if( liveInCurrentSESE.contains( varLive ) ) { ???????????\r
+        virtualLiveIn.add( varLive );\r
+        //}\r
       }\r
     }\r
 \r
+    /*\r
+    System.out.println( "remove "+a.getPrettyIdentifier()+" if "+b.getPrettyIdentifier() );\r
+    System.out.println( "THIS "+toStringPretty() );\r
+    System.out.println( "for removal="+forRemoval );\r
+    */\r
+\r
     vstItr = forRemoval.iterator();\r
     while( vstItr.hasNext() ) {\r
       VariableSourceToken vst = vstItr.next();\r
@@ -508,6 +514,17 @@ public class VarSrcTokTable {
   public String toStringPretty() {\r
     String tokHighlighter = "o";\r
 \r
+    String str = "VarSrcTokTable\n";\r
+    Iterator<VariableSourceToken> vstItr = trueSet.iterator();    \r
+    while( vstItr.hasNext() ) {\r
+      str += "   "+tokHighlighter+" "+vstItr.next()+"\n";\r
+    }\r
+    return str;\r
+  }\r
+\r
+  public String toStringPrettyVerbose() {\r
+    String tokHighlighter = "o";\r
+\r
     String str = "VarSrcTokTable\n";\r
 \r
     Set s;\r
index e29ea0381df3ee114971e8f93bb2a5a40298f038..cef2abe41f49ad9332a43d7109d89c5135b133aa 100644 (file)
@@ -20,11 +20,12 @@ public class Test {
     */
 
     int x = 1;
+    int y = 1;
 
     sese fi {
-      //if( true ) {
-      x = 2;
-      //}
+      if( true ) {
+        x = y + 2;      
+      }
     }
 
     x = x + 1;