create/append dumpfiles on a per session base
authorjohanknol <johanknol@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Thu, 24 May 2001 11:52:44 +0000 (11:52 +0000)
committerjohanknol <johanknol@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Thu, 24 May 2001 11:52:44 +0000 (11:52 +0000)
git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@850 4a8a32a2-be11-0410-ad9d-d568d2c75423

src/SDCCBBlock.c
src/SDCCBBlock.h
src/SDCCglobl.h
src/SDCCmain.c
src/SDCCopt.c

index 1fb1097b0fc36dcee7d174a48761303519bfbff8..c1a2b172cae44abca7c0209a86166f329cc9b54a 100644 (file)
 int eBBNum = 0;
 set *graphEdges = NULL;                /* list of edges in this flow graph */
 
+struct _dumpFiles dumpFiles[] = {
+  {DUMP_RAW0, ".dumpraw0", NULL},
+  {DUMP_RAW1, ".dumpraw1", NULL},
+  {DUMP_CSE, ".dumpcse", NULL},
+  {DUMP_DFLOW, ".dumpdflow", NULL},
+  {DUMP_GCSE, ".dumpgcse", NULL},
+  {DUMP_DEADCODE, ".dumpdeadcode", NULL},
+  {DUMP_LOOP, ".dumploop", NULL},
+  {DUMP_LOOPG, ".dumploopg", NULL},
+  {DUMP_LOOPD, ".dumploopd", NULL},
+  {DUMP_RANGE, ".dumprange", NULL},
+  {DUMP_PACK, ".dumppack", NULL},
+  {DUMP_RASSGN, ".dumprassgn", NULL},
+  {DUMP_LRANGE, ".dumplrange", NULL},
+  {0, NULL, NULL}
+};
+
 /*-----------------------------------------------------------------*/
 /* printEntryLabel - prints entry label of a ebblock               */
 /*-----------------------------------------------------------------*/
@@ -67,30 +84,67 @@ newEdge (eBBlock * from, eBBlock * to)
   return ep;
 }
 
+/*-----------------------------------------------------------------*/
+/* appendDumpFile - if not already created, create the dump file   */
+/*-----------------------------------------------------------------*/
+FILE *appendDumpFile (int id) {
+  struct _dumpFiles *dumpFilesPtr=dumpFiles;
+
+  while (dumpFilesPtr->id) {
+    if (dumpFilesPtr->id==id)
+      break;
+    dumpFilesPtr++;
+  }
+
+  if (!dumpFilesPtr->id) {
+    fprintf (stdout, "internal error: appendDumpFile: unknown dump file.\n");
+    exit (1);
+  }
+
+  if (!dumpFilesPtr->filePtr) {
+    // not used before, create it
+    strcpy (buffer, srcFileName);
+    strcat (buffer, dumpFilesPtr->ext);
+    if (!(dumpFilesPtr->filePtr = fopen (buffer, "w"))) {
+      werror (E_FILE_OPEN_ERR, buffer);
+      exit (1);
+    }
+    //dprintf ("created: %s\n", buffer);
+  } else {
+    //dprintf ("appended: %s%s\n", srcFileName, dumpFilesPtr->ext);
+  }
+  return dumpFilesPtr->filePtr;
+}
+
+/*-----------------------------------------------------------------*/
+/* closeDumpFiles - close possible opened dumpfiles                */
+/*-----------------------------------------------------------------*/
+void closeDumpFiles() {
+  struct _dumpFiles *dumpFilesPtr;
+
+  for (dumpFilesPtr=dumpFiles; dumpFilesPtr->id; dumpFilesPtr++) {
+    if (dumpFilesPtr->filePtr) {
+      fclose (dumpFilesPtr->filePtr);
+      //dprintf ("closed %s\n", dumpFilesPtr->ext);
+    }
+  }
+}
+
 /*-----------------------------------------------------------------*/
 /* dumpLiveRanges - dump liverange information into a file         */
 /*-----------------------------------------------------------------*/
 void 
-dumpLiveRanges (char *ext, hTab * liveRanges)
+dumpLiveRanges (int id, hTab * liveRanges)
 {
   FILE *file;
   symbol *sym;
   int k;
 
-  if (ext)
-    {
-      /* create the file name */
-      strcpy (buffer, srcFileName);
-      strcat (buffer, ext);
-
-      if (!(file = fopen (buffer, "a+")))
-       {
-         werror (E_FILE_OPEN_ERR, buffer);
-         exit (1);
-       }
-    }
-  else
+  if (id) {
+    file=appendDumpFile(id);
+  } else {
     file = stdout;
+  }
 
   for (sym = hTabFirstItem (liveRanges, &k); sym;
        sym = hTabNextItem (liveRanges, &k))
@@ -139,31 +193,23 @@ dumpLiveRanges (char *ext, hTab * liveRanges)
       fprintf (file, "\n");
     }
 
-  fclose (file);
+  fflush(file);
 }
+
 /*-----------------------------------------------------------------*/
 /* dumpEbbsToFileExt - writeall the basic blocks to a file         */
 /*-----------------------------------------------------------------*/
 void 
-dumpEbbsToFileExt (char *ext, eBBlock ** ebbs, int count)
+dumpEbbsToFileExt (int id, eBBlock ** ebbs, int count)
 {
   FILE *of;
   int i;
 
-  if (ext)
-    {
-      /* create the file name */
-      strcpy (buffer, srcFileName);
-      strcat (buffer, ext);
-
-      if (!(of = fopen (buffer, "w")))
-       {
-         werror (E_FILE_OPEN_ERR, buffer);
-         exit (1);
-       }
-    }
-  else
+  if (id) {
+    of=appendDumpFile(id);
+  } else {
     of = stdout;
+  }
 
   for (i = 0; i < count; i++)
     {
@@ -182,7 +228,7 @@ dumpEbbsToFileExt (char *ext, eBBlock ** ebbs, int count)
       fprintf (of, "\n----------------------------------------------------------------\n");
       printiCChain (ebbs[i]->sch, of);
     }
-  fclose (of);
+  fflush(of);
 }
 
 /*-----------------------------------------------------------------*/
index 268a262ee6cbaa713843774e0419db41d70b7854..fab3f8986eb283aab6206ce20d6ef3f098eb3aca 100644 (file)
@@ -94,16 +94,8 @@ void replaceSymBySym (set *, operand *, operand *);
 iCode *iCodeFromeBBlock (eBBlock **, int);
 int otherPathsPresent (eBBlock **, eBBlock *);
 void replaceLabel (eBBlock *, symbol *, symbol *);
-void dumpEbbsToFileExt (char *, eBBlock **, int);
-
-//#if defined(_MSC_VER)
-
-/*-----------------------------------------------------------------*/
-/* dumpLiveRanges - dump liverange information into a file         */
-/*-----------------------------------------------------------------*/
-
-void dumpLiveRanges (char *ext, hTab * liveRanges);
-
-//#endif // _MSC_VER
+void dumpEbbsToFileExt (int, eBBlock **, int);
+void dumpLiveRanges (int, hTab * liveRanges);
+void closeDumpFiles();
 
 #endif
index ac513b55d074a61533cad0ddb7962d09b9d33dfc..c7cdc5f937f1efdfb78e1352a7440f4b22747490 100644 (file)
@@ -288,5 +288,26 @@ char *gc_strdup (const char *sz);
 
 #define wassert(a)    wassertl(a,"code generator internal error")
 
+#define DUMP_RAW0 1
+#define DUMP_RAW1 DUMP_RAW0+1
+#define DUMP_CSE DUMP_RAW1+1
+#define DUMP_DFLOW DUMP_CSE+1
+#define DUMP_GCSE DUMP_DFLOW+1
+#define DUMP_DEADCODE DUMP_GCSE+1
+#define DUMP_LOOP DUMP_DEADCODE+1
+#define DUMP_LOOPG DUMP_LOOP+1
+#define DUMP_LOOPD DUMP_LOOPG+1
+#define DUMP_RANGE DUMP_LOOPD+1
+#define DUMP_PACK DUMP_RANGE+1
+#define DUMP_RASSGN DUMP_PACK+1
+#define DUMP_LRANGE DUMP_RASSGN+1
+
+struct _dumpFiles {
+  int id;
+  char *ext;
+  FILE *filePtr;
+};
+
+extern struct _dumpFiles dumpFiles[];
 
 #endif
index 4d5396c2c9b8355c2daf226899457f6d1f114ec5..dbe820ca09ca87c786f468f085149af217a86123 100644 (file)
@@ -1383,7 +1383,8 @@ main (int argc, char **argv, char **envp)
   port->finaliseOptions ();
 
   /* if no input then printUsage & exit */
-  if ((!options.c1mode && !srcFileName && !nrelFiles) || (options.c1mode && !srcFileName && !options.out_name))
+  if ((!options.c1mode && !srcFileName && !nrelFiles) || 
+      (options.c1mode && !srcFileName && !options.out_name))
     {
       printUsage ();
       exit (0);
@@ -1454,6 +1455,8 @@ main (int argc, char **argv, char **envp)
 
     }
 
+  closeDumpFiles();
+
   if (cdbFile)
     fclose (cdbFile);
 
index 0a67c5bd9491a7fb494eae0002b2637b2ef37780..0a21e032896b8ec4a8077b12df842a9af8e49d55 100644 (file)
@@ -753,7 +753,7 @@ eBBlockFromiCode (iCode * ic)
 
   /* dumpraw if asked for */
   if (options.dump_raw)
-    dumpEbbsToFileExt (".dumpraw0", ebbs, count);
+    dumpEbbsToFileExt (DUMP_RAW0, ebbs, count);
 
   /* replace the local variables with their
      register equivalents : the liveRange computation
@@ -766,39 +766,39 @@ eBBlockFromiCode (iCode * ic)
 
   /* dumpraw if asked for */
   if (options.dump_raw)
-    dumpEbbsToFileExt (".dumpraw1", ebbs, count);
+    dumpEbbsToFileExt (DUMP_RAW1, ebbs, count);
 
   /* do common subexpression elimination for each block */
   change = cseAllBlocks (ebbs, saveCount);
 
   /* dumpraw if asked for */
   if (options.dump_raw)
-    dumpEbbsToFileExt (".dumpcse", ebbs, count);
+    dumpEbbsToFileExt (DUMP_CSE, ebbs, count);
 
   /* compute the data flow */
   computeDataFlow (ebbs, saveCount);
 
   /* dumpraw if asked for */
   if (options.dump_raw)
-    dumpEbbsToFileExt (".dumpdflow", ebbs, count);
+    dumpEbbsToFileExt (DUMP_DFLOW, ebbs, count);
 
   /* global common subexpression elimination  */
   if (optimize.global_cse)
     {
       change += cseAllBlocks (ebbs, saveCount);
       if (options.dump_gcse)
-       dumpEbbsToFileExt (".dumpgcse", ebbs, saveCount);
+       dumpEbbsToFileExt (DUMP_GCSE, ebbs, saveCount);
     }
   /* kill dead code */
   kchange = killDeadCode (ebbs, saveCount);
 
   if (options.dump_kill)
-    dumpEbbsToFileExt (".dumpdeadcode", ebbs, count);
+    dumpEbbsToFileExt (DUMP_DEADCODE, ebbs, count);
 
   /* do loop optimizations */
   change += (lchange = loopOptimizations (loops, ebbs, count));
   if (options.dump_loop)
-    dumpEbbsToFileExt (".dumploop", ebbs, count);
+    dumpEbbsToFileExt (DUMP_LOOP, ebbs, count);
 
   /* recompute the data flow and apply global cse again 
      if loops optimizations or dead code caused a change:
@@ -813,7 +813,7 @@ eBBlockFromiCode (iCode * ic)
       computeDataFlow (ebbs, saveCount);
       change += cseAllBlocks (ebbs, saveCount);
       if (options.dump_loop)
-       dumpEbbsToFileExt (".dumploopg", ebbs, count);
+       dumpEbbsToFileExt (DUMP_LOOPG, ebbs, count);
 
       /* if loop optimizations caused a change then do
          dead code elimination once more : this will
@@ -822,7 +822,7 @@ eBBlockFromiCode (iCode * ic)
       killDeadCode (ebbs, saveCount);
 
       if (options.dump_loop)
-       dumpEbbsToFileExt (".dumploopd", ebbs, count);
+       dumpEbbsToFileExt (DUMP_LOOPD, ebbs, count);
 
     }
 
@@ -846,7 +846,7 @@ eBBlockFromiCode (iCode * ic)
   computeLiveRanges (ebbs, count);
 
   if (options.dump_range)
-    dumpEbbsToFileExt (".dumprange", ebbs, count);
+    dumpEbbsToFileExt (DUMP_RANGE, ebbs, count);
 
   /* Now that we have the live ranges, discard parameter
    * receives for unused parameters.