From 677acf94ea50645d09ce1f764aba4679de762bd8 Mon Sep 17 00:00:00 2001 From: johanknol Date: Thu, 24 May 2001 11:52:44 +0000 Subject: [PATCH] create/append dumpfiles on a per session base git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@850 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- src/SDCCBBlock.c | 106 +++++++++++++++++++++++++++++++++-------------- src/SDCCBBlock.h | 14 ++----- src/SDCCglobl.h | 21 ++++++++++ src/SDCCmain.c | 5 ++- src/SDCCopt.c | 20 ++++----- 5 files changed, 114 insertions(+), 52 deletions(-) diff --git a/src/SDCCBBlock.c b/src/SDCCBBlock.c index 1fb1097b..c1a2b172 100644 --- a/src/SDCCBBlock.c +++ b/src/SDCCBBlock.c @@ -29,6 +29,23 @@ 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); } /*-----------------------------------------------------------------*/ diff --git a/src/SDCCBBlock.h b/src/SDCCBBlock.h index 268a262e..fab3f898 100644 --- a/src/SDCCBBlock.h +++ b/src/SDCCBBlock.h @@ -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 diff --git a/src/SDCCglobl.h b/src/SDCCglobl.h index ac513b55..c7cdc5f9 100644 --- a/src/SDCCglobl.h +++ b/src/SDCCglobl.h @@ -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 diff --git a/src/SDCCmain.c b/src/SDCCmain.c index 4d5396c2..dbe820ca 100644 --- a/src/SDCCmain.c +++ b/src/SDCCmain.c @@ -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); diff --git a/src/SDCCopt.c b/src/SDCCopt.c index 0a67c5bd..0a21e032 100644 --- a/src/SDCCopt.c +++ b/src/SDCCopt.c @@ -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. -- 2.30.2