add precise profiling data for multicore version profiling
[IRC.git] / Robust / src / IR / Flat / BuildCodeMultiCore.java
index f247749ec14aec14520755219b7dafd603bb8af3..11699e3b5c5552a67a7aac0cc8edfa304aae16e4 100644 (file)
@@ -911,6 +911,12 @@ public class BuildCodeMultiCore extends BuildCode {
                       ", " + qinfo.length + ");");
        output.println("}");
       }
+      if(ffan.getTaskType()==FlatFlagActionNode.TASKEXIT) {
+         // generate codes for profiling, recording which task exit it is
+         output.println("#ifdef RAWPROFILE");
+         output.println("setTaskExitIndex(" + ffan.getTaskExitIndex() + ");");
+         output.println("#endif");
+      }
     }
   }
 
@@ -1267,12 +1273,15 @@ public class BuildCodeMultiCore extends BuildCode {
 
   protected void outputTransCode(PrintWriter output) {
     output.println("while(0 == isEmpty(totransobjqueue)) {");
-    output.println("   struct QueueItem * totransitem = getTail(totransobjqueue);");
-
-    output.println("   transferObject((struct transObjInfo *)(totransitem->objectptr));");
-    output.println("   RUNFREE(((struct transObjInfo *)(totransitem->objectptr))->queues);");
-    output.println("   RUNFREE(totransitem->objectptr);");
-    output.println("   removeItem(totransobjqueue, totransitem);");
+    //output.println("   struct QueueItem * totransitem = getTail(totransobjqueue);");
+    //output.println("   transferObject((struct transObjInfo *)(totransitem->objectptr));");
+    //output.println("   RUNFREE(((struct transObjInfo *)(totransitem->objectptr))->queues);");
+    //output.println("   RUNFREE(totransitem->objectptr);");
+    //output.println("   removeItem(totransobjqueue, totransitem);");
+    output.println("   struct transObjInfo * totransobj = (struct transObjInfo *)(getItem(totransobjqueue));");
+    output.println("   transferObject(totransobj);");
+    output.println("   RUNFREE(totransobj->queues);");
+    output.println("   RUNFREE(totransobj);");
     output.println("}");
     output.println("freeQueue(totransobjqueue);");
   }
@@ -1601,6 +1610,12 @@ public class BuildCodeMultiCore extends BuildCode {
        output.println("addAliasLock(" + super.generateTemp(fm, fn.getDst(), lb) + ", aliaslocks[" + tmpv.elementAt(i).intValue() + "]);");
       }
     }
+    // generate codes for profiling, recording how many new objects are created
+    if((fn.getType().getClassDesc() != null) && (fn.getType().getClassDesc().hasFlags())) {
+       output.println("#ifdef RAWPROFILE");
+       output.println("addNewObjInfo(\"" + fn.getType().getClassDesc().getSymbol() + "\");");
+       output.println("#endif");
+    }
   }
 
   class TranObjInfo {