Make new field naming strategy work for MGC
authorjzhou <jzhou>
Fri, 25 Feb 2011 19:39:33 +0000 (19:39 +0000)
committerjzhou <jzhou>
Fri, 25 Feb 2011 19:39:33 +0000 (19:39 +0000)
Robust/src/IR/Flat/BuildCode.java
Robust/src/Runtime/bamboo/multicoreruntime.c

index b90eee939930cee7baccd321755634641cca96eb..cfa6eb7ce6d846cc9b65dff5756ff64c69e6f60f 100644 (file)
@@ -66,7 +66,7 @@ public class BuildCode {
   DiscoverConflicts recorddc;
   DCWrapper delaycomp;
   CallGraph callgraph;
-  Hashtable<String, ClassDescriptor> printedfieldstbl;
+  Hashtable<String, Integer> printedfieldstbl;
 
 
   public BuildCode(State st, Hashtable temptovar, TypeUtil typeutil, SafetyAnalysis sa, PrefetchAnalysis pa) {
@@ -111,7 +111,7 @@ public class BuildCode {
       recorddc=new DiscoverConflicts(locality, st, typeanalysis, delaycomp.getCannotDelayMap(), true, true, null);
       recorddc.doAnalysis();
     }
-    printedfieldstbl = new Hashtable<String, ClassDescriptor>();
+    printedfieldstbl = new Hashtable<String, Integer>();
   }
 
   /** The buildCode method outputs C code for all the methods.  The Flat
@@ -1489,7 +1489,7 @@ public class BuildCode {
        printClassStruct(si, classdefout, /*globaldefout*/ null);
       }
     }
-
+    
     if (!fieldorder.containsKey(cn)) {
       Vector fields=new Vector();
       fieldorder.put(cn,fields);
@@ -1522,18 +1522,24 @@ public class BuildCode {
        }
       }
     }
-    Vector fields=(Vector)fieldorder.get(cn);
+    //Vector fields=(Vector)fieldorder.get(cn);
 
-    /*Vector */ fields = cn.getFieldVec();
+    Vector fields = cn.getFieldVec();
 
     for(int i=0; i<fields.size(); i++) {
       FieldDescriptor fd=(FieldDescriptor)fields.get(i);
-      String fstring = fd.getSymbol();
+      String fstring = fd.isStatic()?fd.getSafeSymbol():fd.getSymbol();
       if(printedfieldstbl.containsKey(fstring)) {
-       printedfieldstbl.put(fstring, cn);
-       continue;
+        if(!fd.isStatic()) {
+          int index = printedfieldstbl.get(fstring).intValue();
+          index++;
+          fd.changeSafeSymbol(index);
+          printedfieldstbl.put(fstring, index);
+        } else {
+          continue;
+        }
       } else {
-       printedfieldstbl.put(fstring, cn);
+        printedfieldstbl.put(fstring, 0);
       }
       if (state.MGC && fd.getType().isClass()
           && fd.getType().getClassDesc().isEnum()) {
@@ -1664,7 +1670,7 @@ public class BuildCode {
       }
     }
     printClassStruct(cn, classdefout, globaldefout);
-    printedfieldstbl.clear();
+    printedfieldstbl.clear();// = new Hashtable<String, ClassDescriptor>();
     classdefout.println("};\n");
 
     if (state.DSM||state.SINGLETM) {
@@ -3313,8 +3319,7 @@ public class BuildCode {
          // redirect to the global_defs_p structure
          if((ffn.getField().isStatic()) || (ffn.getSrc().getType().isClassNameRef())) {
            // reference to the static field with Class name
-           output.println(generateTemp(fm, ffn.getDst(),lb)+"=global_defs_p->"+
-                          ffn.getField().getClassDescriptor().getSafeSymbol()+ffn.getField().getSafeSymbol()+";");
+           output.println(generateTemp(fm, ffn.getDst(),lb)+"=global_defs_p->"+ffn.getField().getSafeSymbol()+";");
          } else {
            output.println(generateTemp(fm, ffn.getDst(),lb)+"=*"+ generateTemp(fm,ffn.getSrc(),lb)+"->"+ ffn.getField().getSafeSymbol()+";");
          }
index 09ffaf33045c19023b92d4f42959c5df871c9a11..75928f58653fd922c307aacc576ff831a183e82c 100644 (file)
@@ -225,11 +225,11 @@ long long CALL00(___System______currentTimeMillis____) {
 void CALL01(___System______printString____L___String___,struct ___String___ * ___s___) {
 #ifdef MGC
 #ifdef TILERA_BME
-  struct ArrayObject * chararray=VAR(___s___)->___String______value___;
+  struct ArrayObject * chararray=VAR(___s___)->___value___;
   int i;
-  int offset=VAR(___s___)->___String______offset___;
+  int offset=VAR(___s___)->___offset___;
   tprintf("");
-  for(i=0; i<VAR(___s___)->___String______count___; i++) {
+  for(i=0; i<VAR(___s___)->___count___; i++) {
        short sc=
          ((short *)(((char *)&chararray->___length___)+sizeof(int)))[i+offset];
     printf("%c", sc);
@@ -328,9 +328,9 @@ struct ___String___ * NewString(const char *str,int length) {
   struct ArrayObject * chararray=allocate_newarray(CHARARRAYTYPE, length);
   struct ___String___ * strobj=allocate_new(STRINGTYPE);
 #endif
-  strobj->___String______value___=chararray;
-  strobj->___String______count___=length;
-  strobj->___String______offset___=0;
+  strobj->___value___=chararray;
+  strobj->___count___=length;
+  strobj->___offset___=0;
 
   for(i=0; i<length; i++) {
     ((short*)(((char*)&chararray->___length___)+sizeof(int)))[i]=(short)str[i];