add missing END_EXECUTION trace in the beginning of a SDAG entry
authorGengbin Zheng <gzheng@illinois.edu>
Wed, 11 Jan 2012 15:41:04 +0000 (09:41 -0600)
committerGengbin Zheng <gzheng@illinois.edu>
Wed, 11 Jan 2012 15:41:04 +0000 (09:41 -0600)
which leads to wrong trace-projections/summary logs with mismatched begin/end execution.

src/xlat-i/sdag/CSdagConstruct.C
src/xlat-i/xi-symbol.C
src/xlat-i/xi-symbol.h

index 539a2f8a3c304baa0b382741fcda36192d629f09..68c3352ea13e0a092afa7ca11e8f3d51e41280cf 100644 (file)
@@ -441,11 +441,11 @@ void SdagConstruct::propagateState(TList<CStateVar*>& list, TList<CStateVar*>& w
  } 
 }
 
-void SdagConstruct::generateCode(XStr& op)
+void SdagConstruct::generateCode(XStr& op, Entry *entry)
 {
   switch(type) {
     case SSDAGENTRY:
-      generateSdagEntry(op);
+      generateSdagEntry(op, entry);
       break;
     case SSLIST:
       generateSlist(op);
@@ -462,7 +462,7 @@ void SdagConstruct::generateCode(XStr& op)
     case SIF:
       generateIf(op);
       if(con2 != 0)
-        con2->generateCode(op);
+        con2->generateCode(op, entry);
       break;
     case SELSE:
       generateElse(op);
@@ -491,7 +491,7 @@ void SdagConstruct::generateCode(XStr& op)
   SdagConstruct *cn;
   if (constructs != 0) {
     for(cn=constructs->begin(); !constructs->end(); cn=constructs->next()) {
-      cn->generateCode(op);
+      cn->generateCode(op, entry);
     }
   }
 }
@@ -1285,7 +1285,7 @@ void SdagConstruct::generateSlist(XStr& op)
   op << "  }\n";
 }
 
-void SdagConstruct::generateSdagEntry(XStr& op)
+void SdagConstruct::generateSdagEntry(XStr& op, Entry *entry)
 {
   // header file
   op << "public:\n";
@@ -1298,19 +1298,24 @@ void SdagConstruct::generateSdagEntry(XStr& op)
      for(sc1=sc->constructs->begin(); !sc->constructs->end(); sc1 = sc->constructs->next())
         op << "    _connect_" << sc1->text->charstar() <<"();\n";
   }
+
 #if CMK_BIGSIM_CHARM
   generateEndSeq(op);
 #endif
+  if (!entry->getContainer()->isGroup() || !entry->isConstructor()) generateTraceEndCall(op);
+
   // actual code here 
   op << "    " << constructs->front()->label->charstar() <<
         "(";
   generateCall(op, *stateVarsChildren);
   op << ");\n";
+
 #if CMK_BIGSIM_CHARM
   generateTlineEndCall(op);
   generateBeginExec(op, "spaceholder");
 #endif
-  generateDummyBeginExecute(op);
+  if (!entry->getContainer()->isGroup() || !entry->isConstructor()) generateDummyBeginExecute(op);
+
   // end actual code
   op << "  }\n\n";
   op << "private:\n";
index 8292201b6f10b1c0507a53e897a0683e111a4b1b..10f82f950d6c61425bef1e01c5f52882203e77b0 100644 (file)
@@ -2737,7 +2737,7 @@ void CParsedFile::generateCode(XStr& op)
 {
   for(Entry *cn=nodeList.begin(); !nodeList.end(); cn=nodeList.next()) {
     cn->sdagCon->setNext(0,0);
-    cn->sdagCon->generateCode(op);
+    cn->sdagCon->generateCode(op, cn);
   }
 }
 
index 852fd50d740c2f12323eeeb1ca4bde7018c23ddd..f846fc74d2d66385709b8830b55ea35bcd9982a6 100644 (file)
@@ -620,6 +620,7 @@ class Member : public Construct {
   protected:
     Chare *container;
   public:
+    inline Chare *getContainer() { return container; }
     virtual void setChare(Chare *c) { container = c; }
     virtual int isSdag(void) { return 0; }
     virtual void collectSdagCode(CParsedFile *, int&) { return; }
@@ -1226,7 +1227,7 @@ private:
   void generateElse(XStr& op);
   void generateForall(XStr& op);
   void generateOlist(XStr& op);
-  void generateSdagEntry(XStr& op);
+  void generateSdagEntry(XStr& op, Entry *entry);
   void generateSlist(XStr& op);
   void generateAtomic(XStr& op);
   void generateForward(XStr& op);
@@ -1284,7 +1285,7 @@ public:
   void generateEntryList(TList<CEntry*>&, SdagConstruct *);
   void propagateState(int);
   void propagateState(TList<CStateVar*>&, TList<CStateVar*>&, TList<SdagConstruct*>&, int);
-  void generateCode(XStr& output);
+  void generateCode(XStr& output, Entry *entry);
   void setNext(SdagConstruct *, int);
 
   // for trace