X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2FSDCCBBlock.c;h=42c1703f956d1a18457260e380d21e1ab64e4184;hb=d78670def0d8de75614601941b3e69ce937b2714;hp=9b809bed9cfbaca434bc1752508f9e7191917a96;hpb=9b6292c6f1828886ea5bacb609e63403823e3c06;p=fw%2Fsdcc diff --git a/src/SDCCBBlock.c b/src/SDCCBBlock.c index 9b809bed..42c1703f 100644 --- a/src/SDCCBBlock.c +++ b/src/SDCCBBlock.c @@ -84,9 +84,9 @@ newEdge (eBBlock * from, eBBlock * to) } /*-----------------------------------------------------------------*/ -/* appendDumpFile - if not already created, create the dump file */ +/* createDumpFile - create the dump file */ /*-----------------------------------------------------------------*/ -FILE *appendDumpFile (int id) { +FILE *createDumpFile (int id) { struct _dumpFiles *dumpFilesPtr=dumpFiles; while (dumpFilesPtr->id) { @@ -96,14 +96,14 @@ FILE *appendDumpFile (int id) { } if (!dumpFilesPtr->id) { - fprintf (stdout, "internal error: appendDumpFile: unknown dump file.\n"); + fprintf (stdout, "internal error: createDumpFile: unknown dump file.\n"); exit (1); } if (!dumpFilesPtr->filePtr) { // not used before, create it - strcpy (scratchFileName, dstFileName); - strcat (scratchFileName, dumpFilesPtr->ext); + strncpyz (scratchFileName, dstFileName, PATH_MAX); + strncatz (scratchFileName, dumpFilesPtr->ext, PATH_MAX); if (!(dumpFilesPtr->filePtr = fopen (scratchFileName, "w"))) { werror (E_FILE_OPEN_ERR, scratchFileName); exit (1); @@ -121,7 +121,6 @@ void closeDumpFiles() { for (dumpFilesPtr=dumpFiles; dumpFilesPtr->id; dumpFilesPtr++) { if (dumpFilesPtr->filePtr) { fclose (dumpFilesPtr->filePtr); - //dprintf ("closed %s\n", dumpFilesPtr->ext); } } } @@ -137,7 +136,7 @@ dumpLiveRanges (int id, hTab * liveRanges) int k; if (id) { - file=appendDumpFile(id); + file=createDumpFile(id); } else { file = stdout; } @@ -178,9 +177,10 @@ dumpEbbsToFileExt (int id, eBBlock ** ebbs, int count) { FILE *of; int i; + eBBlock *bb; if (id) { - of=appendDumpFile(id); + of=createDumpFile(id); } else { of = stdout; } @@ -188,11 +188,38 @@ dumpEbbsToFileExt (int id, eBBlock ** ebbs, int count) for (i = 0; i < count; i++) { fprintf (of, "\n----------------------------------------------------------------\n"); - fprintf (of, "Basic Block %s : loop Depth = %d noPath = %d , lastinLoop = %d\n", + fprintf (of, "Basic Block %s (df:%d bb:%d lvl:%d): loopDepth=%d%s%s%s\n", ebbs[i]->entryLabel->name, + ebbs[i]->dfnum, ebbs[i]->bbnum, ebbs[i]->entryLabel->level, ebbs[i]->depth, - ebbs[i]->noPath, - ebbs[i]->isLastInLoop); + ebbs[i]->noPath ? " noPath" : "", + ebbs[i]->partOfLoop ? " partOfLoop" : "", + ebbs[i]->isLastInLoop ? " isLastInLoop" : ""); + + // a --nolabelopt makes this more readable + fprintf (of, "\nsuccessors: "); + for (bb=setFirstItem(ebbs[i]->succList); + bb; + bb=setNextItem(ebbs[i]->succList)) { + fprintf (of, "%s ", bb->entryLabel->name); + } + fprintf (of, "\npredecessors: "); + for (bb=setFirstItem(ebbs[i]->predList); + bb; + bb=setNextItem(ebbs[i]->predList)) { + fprintf (of, "%s ", bb->entryLabel->name); + } + { + int d; + fprintf (of, "\ndominators: "); + for (d=0; ddomVect->size; d++) { + if (bitVectBitValue(ebbs[i]->domVect, d)) { + fprintf (of, "%s ", ebbs[d]->entryLabel->name); + } + } + } + fprintf (of, "\n"); + fprintf (of, "\ndefines bitVector :"); bitVectDebugOn (ebbs[i]->defSet, of); fprintf (of, "\nlocal defines bitVector :"); @@ -216,17 +243,17 @@ eBBlock * iCode2eBBlock (iCode * ic) { iCode *loop; - eBBlock *ebb = neweBBlock (); /* a llocate an entry */ + eBBlock *ebb = neweBBlock (); /* allocate an entry */ /* put the first one unconditionally */ ebb->sch = ic; /* if this is a label then */ if (ic->op == LABEL) - ebb->entryLabel = ic->argLabel.label; + ebb->entryLabel = ic->label; else { - sprintf (buffer, "_eBBlock%d", eBBNum++); + SNPRINTF (buffer, sizeof(buffer), "_eBBlock%d", eBBNum++); ebb->entryLabel = newSymbol (buffer, 1); ebb->entryLabel->key = labelKey++; } @@ -419,6 +446,7 @@ addiCodeToeBBlock (eBBlock * ebp, iCode * ic, iCode * ip) void remiCodeFromeBBlock (eBBlock * ebb, iCode * ic) { + wassert (ic->seq>=ebb->fSeq && ic->seq<=ebb->lSeq); if (ic->prev) ic->prev->next = ic->next; else @@ -562,7 +590,7 @@ replaceSymBySym (set * sset, operand * src, operand * dest) { bitVectUnSetBit (OP_USES (IC_COND (ic)), ic->key); IC_COND (ic) = operandFromOperand (dest); - OP_USES_SET ((dest), bitVectSetBit (OP_USES (dest), ic->key)); + OP_USES(dest)=bitVectSetBit (OP_USES (dest), ic->key); continue; } @@ -571,7 +599,7 @@ replaceSymBySym (set * sset, operand * src, operand * dest) bitVectUnSetBit (OP_USES (IC_RIGHT (ic)), ic->key); IC_RIGHT (ic) = operandFromOperand (dest); IC_RIGHT (ic)->isaddr = 0; - OP_USES_SET ((dest), bitVectSetBit (OP_USES (dest), ic->key)); + OP_USES(dest)=bitVectSetBit (OP_USES (dest), ic->key); } if (isOperandEqual (IC_LEFT (ic), src)) @@ -587,7 +615,7 @@ replaceSymBySym (set * sset, operand * src, operand * dest) IC_LEFT (ic) = operandFromOperand (dest); IC_LEFT (ic)->isaddr = 0; } - OP_USES_SET ((dest), bitVectSetBit (OP_USES (dest), ic->key)); + OP_USES(dest)=bitVectSetBit (OP_USES (dest), ic->key); } /* special case for pointer sets */ @@ -597,7 +625,7 @@ replaceSymBySym (set * sset, operand * src, operand * dest) bitVectUnSetBit (OP_USES (IC_RESULT (ic)), ic->key); IC_RESULT (ic) = operandFromOperand (dest); IC_RESULT (ic)->isaddr = 1; - OP_USES_SET ((dest), bitVectSetBit (OP_USES (dest), ic->key)); + OP_USES(dest)=bitVectSetBit (OP_USES (dest), ic->key); } } }