This wasn't true
[fw/sdcc] / src / SDCCBBlock.c
index a656fb77c6c992e04a6f919be3af242706c747d3..dfa15ce269fef7bce0f310eff85c2bda68111fe4 100644 (file)
@@ -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, srcFileName);
-    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,37 @@ 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): loop Depth = %d noPath = %d lastinLoop = %d\n",
               ebbs[i]->entryLabel->name,
+              ebbs[i]->dfnum, ebbs[i]->bbnum,
               ebbs[i]->depth,
               ebbs[i]->noPath,
               ebbs[i]->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; d<ebbs[i]->domVect->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 +242,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 +445,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 +589,7 @@ replaceSymBySym (set * sset, operand * src, operand * dest)
            {
              bitVectUnSetBit (OP_USES (IC_COND (ic)), ic->key);
              IC_COND (ic) = operandFromOperand (dest);
-             OP_USES (dest) = bitVectSetBit (OP_USES (dest), ic->key);
+             OP_USES(dest)=bitVectSetBit (OP_USES (dest), ic->key);
              continue;
            }
 
@@ -571,7 +598,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 (dest) = bitVectSetBit (OP_USES (dest), ic->key);
+             OP_USES(dest)=bitVectSetBit (OP_USES (dest), ic->key);
            }
 
          if (isOperandEqual (IC_LEFT (ic), src))
@@ -587,7 +614,7 @@ replaceSymBySym (set * sset, operand * src, operand * dest)
                  IC_LEFT (ic) = operandFromOperand (dest);
                  IC_LEFT (ic)->isaddr = 0;
                }
-             OP_USES (dest) = bitVectSetBit (OP_USES (dest), ic->key);
+             OP_USES(dest)=bitVectSetBit (OP_USES (dest), ic->key);
            }
 
          /* special case for pointer sets */
@@ -597,7 +624,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 (dest) = bitVectSetBit (OP_USES (dest), ic->key);
+             OP_USES(dest)=bitVectSetBit (OP_USES (dest), ic->key);
            }
        }
     }