X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2FSDCCBBlock.h;h=1f853df87d61af37a5e8aaa9092e3453b6b67e94;hb=80972b2e54c9b88f11c27b878874fd2a6a681391;hp=c455ed7b9798d8915a0cc71a2a3a48c20b48e353;hpb=40cd2beaddfccdd440379feea8eaa52ab65c040c;p=fw%2Fsdcc diff --git a/src/SDCCBBlock.h b/src/SDCCBBlock.h index c455ed7b..1f853df8 100644 --- a/src/SDCCBBlock.h +++ b/src/SDCCBBlock.h @@ -38,7 +38,7 @@ typedef struct eBBlock unsigned int hasFcall:1; /* has a function call */ unsigned int noPath:1; /* there is no path from _entry to this block */ unsigned int isLastInLoop:1; /* is the last block in a loop */ - unsigned int hasConditionalExit; /* this block ends with a return or goto from a conditional block*/ + struct eBBlock *isConditionalExitFrom; /* this block ends with a return or goto from a conditional block*/ symbol *entryLabel; /* entry label */ iCode *sch; /* pointer to start of code chain */ @@ -49,13 +49,14 @@ typedef struct eBBlock /* control flow analysis */ set *succList; /* list eBBlocks which are successors */ - bitVect *succVect; /* bitVector of successors */ + bitVect *succVect; /* bitVector of successors (index is bbnum) */ set *predList; /* predecessors of this basic block */ - bitVect *domVect; /* list of nodes this is dominated by */ + bitVect *domVect; /* list of nodes this is dominated by (index is bbnum) */ /* data flow analysis */ set *inExprs; /* in coming common expressions */ set *outExprs; /* out going common expressions */ + set *killedExprs; /* killed common expressions */ bitVect *inDefs; /* in coming defintions */ bitVect *outDefs; /* out going defintions */ bitVect *defSet; /* symbols defined in block */ @@ -70,6 +71,14 @@ typedef struct eBBlock } eBBlock; +typedef struct ebbIndex + { + int count; /* number of blocks in the index */ + eBBlock **bbOrder; /* blocks in bbnum order */ + eBBlock **dfOrder; /* blocks in dfnum (depth first) order */ + } +ebbIndex; + typedef struct edge { @@ -78,6 +87,7 @@ typedef struct edge } edge; + extern int eBBNum; extern set *graphEdges; @@ -85,17 +95,17 @@ extern set *graphEdges; DEFSETFUNC (printEntryLabel); eBBlock *neweBBlock (); edge *newEdge (eBBlock *, eBBlock *); -eBBlock *eBBWithEntryLabel (eBBlock **, symbol *, int); +eBBlock *eBBWithEntryLabel (ebbIndex *, symbol *); DEFSETFUNC (ifFromIs); set *edgesTo (eBBlock *); void remiCodeFromeBBlock (eBBlock *, iCode *); void addiCodeToeBBlock (eBBlock *, iCode *, iCode *); -eBBlock **iCodeBreakDown (iCode *, int *); +ebbIndex *iCodeBreakDown (iCode *); void replaceSymBySym (set *, operand *, operand *); iCode *iCodeFromeBBlock (eBBlock **, int); int otherPathsPresent (eBBlock **, eBBlock *); void replaceLabel (eBBlock *, symbol *, symbol *); -void dumpEbbsToFileExt (int, eBBlock **, int); +void dumpEbbsToFileExt (int, ebbIndex *); void dumpLiveRanges (int, hTab * liveRanges); void closeDumpFiles();