bug fixes, use pointers no problem, generate temps properly
authorjjenista <jjenista>
Fri, 14 Aug 2009 23:40:45 +0000 (23:40 +0000)
committerjjenista <jjenista>
Fri, 14 Aug 2009 23:40:45 +0000 (23:40 +0000)
Robust/src/Analysis/MLP/CodePlan.java
Robust/src/Analysis/MLP/MLPAnalysis.java
Robust/src/IR/Flat/BuildCode.java
Robust/src/Tests/mlp/tinyTest/test.java

index 28b08f8c1aa34dafc639292aa7f1701301328252..76a504044177e1871991f8134fcc643edc4f35d6 100644 (file)
@@ -13,13 +13,18 @@ public class CodePlan {
   private Hashtable< VariableSourceToken, Set<TempDescriptor> > stall2copySet;
   private Set<TempDescriptor>                                   dynamicStallSet;
   private Hashtable<TempDescriptor, TempDescriptor>             dynAssign_lhs2rhs;
+  private FlatSESEEnterNode                                     currentSESE;
   
-  public CodePlan() {
+  public CodePlan( FlatSESEEnterNode fsen ) {
     stall2copySet     = new Hashtable< VariableSourceToken, Set<TempDescriptor> >();
     dynamicStallSet   = new HashSet<TempDescriptor>();
     dynAssign_lhs2rhs = new Hashtable<TempDescriptor, TempDescriptor>();
+    currentSESE       = fsen;
   }
 
+  public FlatSESEEnterNode getCurrentSESE() {
+    return currentSESE;
+  }
   
   public void addStall2CopySet( VariableSourceToken stallToken,
                                Set<TempDescriptor> copySet ) {
index 63bb037d675089597d8eb6c0ddf1d8849f75889a..ea827af068658f8e529d739e1bed90a430d0ccea 100644 (file)
@@ -172,7 +172,7 @@ public class MLPAnalysis {
       computeStallsForward( fm );
     }
     if( state.MLPDEBUG ) {
-      System.out.println( "\nCode Plans\n----------\n"+fmMain.printMethod( codePlans ) );
+      //System.out.println( "\nCode Plans\n----------\n"+fmMain.printMethod( codePlans ) );
     }
 
 
@@ -849,8 +849,8 @@ public class MLPAnalysis {
                                           VarSrcTokTable vstTableIn,
                                          Set<TempDescriptor> notAvailSetIn,
                                           FlatSESEEnterNode currentSESE ) {
-    CodePlan plan = new CodePlan();
 
+    CodePlan plan = new CodePlan( currentSESE);
 
     switch( fn.kind() ) {
 
index 9ce0e22015d5e5562f89b5138cc0cf4ce03aaf09..5e55f09f0e7c3f0b28fd9dc56662f9d56c955d11 100644 (file)
@@ -1727,10 +1727,11 @@ public class BuildCode {
       for(int i=0; i<writes.length; i++) {
        TempDescriptor temp=writes[i];
        TypeDescriptor type=temp.getType();
-       if (type.isPtr()&&GENERATEPRECISEGC)
+       if (type.isPtr()&&GENERATEPRECISEGC) {
          objecttemps.addPtr(temp);
-       else
+       } else {
          objecttemps.addPrim(temp);
+       }
       }
     }
   }
@@ -1743,24 +1744,22 @@ public class BuildCode {
                                     ) {
 
     ParamsObject objectparams = (ParamsObject) paramstable.get( fsen.getmdBogus() );
-    
-    Set<TempDescriptor> inSetAndOutSet = new HashSet<TempDescriptor>();
-    inSetAndOutSet.addAll( fsen.getInVarSet() );
-    inSetAndOutSet.addAll( fsen.getOutVarSet() );
-
-    Set<TempDescriptor> inSetAndOutSetPrims = new HashSet<TempDescriptor>();
-
-    Iterator<TempDescriptor> itr = inSetAndOutSet.iterator();
-    while( itr.hasNext() ) {
-      TempDescriptor temp = itr.next();
-      TypeDescriptor type = temp.getType();
-      if( !type.isPtr() ) {
-       inSetAndOutSetPrims.add( temp );
-      }
-    }
-            
+                
     TempObject objecttemps = (TempObject) tempstable.get( fsen.getmdBogus() );
     
+    // generate locals structure
+    outputStructs.println("struct "+fsen.getcdEnclosing().getSafeSymbol()+fsen.getmdBogus().getSafeSymbol()+"_"+fsen.getmdBogus().getSafeMethodDescriptor()+"_locals {");
+    outputStructs.println("  INTPTR size;");
+    outputStructs.println("  void * next;");
+    for(int i=0; i<objecttemps.numPointers(); i++) {
+      TempDescriptor temp=objecttemps.getPointer(i);
+      if (temp.getType().isNull())
+        outputStructs.println("  void * "+temp.getSafeSymbol()+";");
+      else
+        outputStructs.println("  struct "+temp.getType().getSafeSymbol()+" * "+temp.getSafeSymbol()+";");
+    }
+    outputStructs.println("};\n");
+
     
     // generate the SESE record structure
     outputStructs.println(fsen.getSESErecordName()+" {");
@@ -1792,6 +1791,21 @@ public class BuildCode {
     }    
 
     // space for all in and out set primitives
+    Set<TempDescriptor> inSetAndOutSet = new HashSet<TempDescriptor>();
+    inSetAndOutSet.addAll( fsen.getInVarSet() );
+    inSetAndOutSet.addAll( fsen.getOutVarSet() );
+
+    Set<TempDescriptor> inSetAndOutSetPrims = new HashSet<TempDescriptor>();
+
+    Iterator<TempDescriptor> itr = inSetAndOutSet.iterator();
+    while( itr.hasNext() ) {
+      TempDescriptor temp = itr.next();
+      TypeDescriptor type = temp.getType();
+      if( !type.isPtr() ) {
+       inSetAndOutSetPrims.add( temp );
+      }
+    }
+
     Iterator<TempDescriptor> itrPrims = inSetAndOutSetPrims.iterator();
     while( itrPrims.hasNext() ) {
       TempDescriptor temp = itrPrims.next();
@@ -1809,26 +1823,14 @@ public class BuildCode {
     
     outputStructs.println("};\n");
 
-    // generate locals structure
-    outputStructs.println("struct "+fsen.getcdEnclosing().getSafeSymbol()+fsen.getmdBogus().getSafeSymbol()+"_"+fsen.getmdBogus().getSafeMethodDescriptor()+"_locals {");
-    outputStructs.println("  INTPTR size;");
-    outputStructs.println("  void * next;");
-    for(int i=0; i<objecttemps.numPointers(); i++) {
-      TempDescriptor temp=objecttemps.getPointer(i);
-      if (temp.getType().isNull())
-        outputStructs.println("  void * "+temp.getSafeSymbol()+";");
-      else
-        outputStructs.println("  struct "+temp.getType().getSafeSymbol()+" * "+temp.getSafeSymbol()+";");
-    }
-    outputStructs.println("};\n");
     
-
     // write method declaration to header file
     outputMethHead.print("void ");
     outputMethHead.print(fsen.getSESEmethodName()+"(");
     outputMethHead.print(fsen.getSESErecordName()+"* "+paramsprefix);
     outputMethHead.println(");\n");
 
+
     generateFlatMethodSESE( fsen.getfmBogus(), 
                            fsen.getcdEnclosing(), 
                            fsen, 
@@ -1903,6 +1905,17 @@ public class BuildCode {
       }
     }    
 
+    // declare local temps for out-set primitives if its not already
+    // in the in-set, and it's value will get written so no problem
+    Iterator<TempDescriptor> itrOutSet = fsen.getOutVarSet().iterator();
+    while( itrOutSet.hasNext() ) {
+      TempDescriptor temp = itrOutSet.next();
+      TypeDescriptor type = temp.getType();
+      if( !type.isPtr() && !fsen.getReadyInVarSet().contains( temp ) ) {
+       output.println("   "+type+" "+temp+";");       
+      }
+    }    
+
     // copy in-set into place, ready vars were already 
     // copied when the SESE was issued
     Iterator<TempDescriptor> tempItr;
@@ -1913,8 +1926,8 @@ public class BuildCode {
       TempDescriptor temp = tempItr.next();
       VariableSourceToken vst = fsen.getStaticInVarSrc( temp );
       SESEandAgePair srcPair = new SESEandAgePair( vst.getSESE(), vst.getAge() );
-      String from = paramsprefix+"->"+srcPair+"->"+vst.getAddrVar();      
-      output.println("     "+temp+" = "+from+";");
+      output.println("     "+generateTemp( fsen.getfmBogus(), temp, null )+
+                    " = "+paramsprefix+"->"+srcPair+"->"+vst.getAddrVar()+";");
     }
 
     // dynamic vars come from an SESE and src
@@ -1924,13 +1937,15 @@ public class BuildCode {
 
       // go grab it from the SESE source
       output.println("     if( "+paramsprefix+"->"+temp+"_srcSESE != NULL ) {");
-      output.println("       "+temp+" = *(("+temp.getType()+"*) ("+
+      output.println("       "+generateTemp( fsen.getfmBogus(), temp, null )+
+                            " = *(("+temp.getType()+"*) ("+
                             paramsprefix+"->"+temp+"_srcSESE + "+
                             paramsprefix+"->"+temp+"_srcOffset));");
 
       // or if the source was our parent, its in the record to grab
       output.println("     } else {");
-      output.println("       "+temp+" = "+paramsprefix+"->"+temp+";");
+      output.println("       "+generateTemp( fsen.getfmBogus(), temp, null )+
+                            " = "+paramsprefix+"->"+temp+";");
       output.println("     }");
     }
 
@@ -2256,6 +2271,8 @@ public class BuildCode {
       CodePlan cp = mlpa.getCodePlan( fn );
       if( cp != null ) {               
        
+       FlatSESEEnterNode currentSESE = cp.getCurrentSESE();
+       
        // for each sese and age pair that this parent statement
        // must stall on, take that child's stall semaphore, the
        // copying of values comes after the statement
@@ -2276,9 +2293,8 @@ public class BuildCode {
          Iterator<TempDescriptor> tdItr = cp.getCopySet( vst ).iterator();
          while( tdItr.hasNext() ) {
            TempDescriptor td = tdItr.next();
-
-           output.println("       "+td.getSafeSymbol()+" = child->"+
-                                    vst.getAddrVar().getSafeSymbol()+";");
+           output.println("       "+generateTemp( currentSESE.getfmBogus(), td, null )+
+                          " = child->"+vst.getAddrVar().getSafeSymbol()+";");
          }
 
          output.println("   }");
@@ -2295,8 +2311,9 @@ public class BuildCode {
          output.println("     if( "+dynVar+"_srcSESE != NULL ) {");
          output.println("       SESEcommon* common = (SESEcommon*) "+dynVar+"_srcSESE;");
          output.println("       psem_take( &(common->stallSem) );");
-         output.println("       "+dynVar+" = *(("+dynVar.getType()+"*) ("+
-                                               dynVar+"_srcSESE + "+dynVar+"_srcOffset));");
+         output.println("       "+generateTemp( currentSESE.getfmBogus(), dynVar, null )+
+                                 " = *(("+dynVar.getType()+"*) ("+
+                                 dynVar+"_srcSESE + "+dynVar+"_srcOffset));");
          output.println("     }");
          output.println("   }");
        }
@@ -2813,24 +2830,13 @@ public class BuildCode {
     Iterator<TempDescriptor> tempItr = fsen.getReadyInVarSet().iterator();
     while( tempItr.hasNext() ) {
       TempDescriptor temp = tempItr.next();
-      TypeDescriptor type = temp.getType();
-
-      // if we are root (no parent) or the source of the in-var is in 
-      // the in or out set, we know it is in the params structure, 
-      // otherwise its a method-local variable
-      String from;
-      if( fsen.getParent() == null ||
-         fsen.getParent().getInVarSet().contains( temp ) ||
-         fsen.getParent().getOutVarSet().contains( temp ) 
-       ) {
-       from = paramsprefix+"->"+temp.getSafeSymbol();
+      if( fsen != mlpa.getRootSESE() ) {
+       output.println("     seseToIssue->"+temp+" = "+
+                      generateTemp( fsen.getParent().getfmBogus(), temp, null )+";");
       } else {
-       from = temp.getSafeSymbol();
+       output.println("     seseToIssue->"+temp+" = "+
+                      paramsprefix+"->"+temp+";");
       }
-   
-      String to = "seseToIssue->"+temp.getSafeSymbol();
-
-      output.println("     "+to+" = "+from+";");
     }
 
     if( fsen != mlpa.getRootSESE() ) {
index 050b8998aeb1611fadcc306455a025417bca090b..5fb474354337317f25629e40c0d07acda8b463d8 100644 (file)
@@ -1,12 +1,9 @@
 public class Foo {
+  int f;
   public Foo() {}
 }
 
 
-// TODO
-// -objects
-
-
 public class Test {
 
   public static void main( String args[] ) {
@@ -15,6 +12,18 @@ public class Test {
     int y = Integer.parseInt( args[1] );
     //System.out.println( "root: x="+x+", y="+y );
 
+
+    Foo foo = new Foo();
+    foo.f = x;
+
+    sese jumbo {
+      foo.f = y;
+    }
+
+    System.out.println( "f="+foo.f );
+
+
+    /*
     if( x > 3 ) {
       sese fee {
        y = y + 10;
@@ -22,21 +31,26 @@ public class Test {
       }
     }
 
-    /*
+    System.out.println( "yo" );
+
     sese fie {
-      float xyz = -2.0f;
+      double xyz = -2.0;
     }
-    float jjj = Math.abs( xyz );
-    */
+
+    System.out.println( "go" );
+
+    double jjj = Math.abs( xyz );
+
+
 
     // see that values from sese fi are
     // forwarded to this sibling
     sese foe {
-    //System.out.println( "fo: x="+x+", y="+y );
-    //System.out.println( "y="+y+" xyz="+xyz );
-      System.out.println( "foe: y="+y );
+      //System.out.println( "fo: x="+x+", y="+y );
+      System.out.println( "foe: y="+y+" jjj="+jjj );
+      //System.out.println( "foe: y="+y );
     }
-
+    */
 
 
     // just for testing root's ability to