X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2FSDCCBBlock.h;h=fab3f8986eb283aab6206ce20d6ef3f098eb3aca;hb=f1c68aa47ba2acd63adb06bedc687344488a40ad;hp=51d53726f0519172e588782f9fe646f1086d19fd;hpb=501951f3d5ada07ff193eac6551984c473864626;p=fw%2Fsdcc diff --git a/src/SDCCBBlock.h b/src/SDCCBBlock.h index 51d53726..fab3f898 100644 --- a/src/SDCCBBlock.h +++ b/src/SDCCBBlock.h @@ -27,68 +27,75 @@ #define SDCCBBLOCK_H 1 /* definition of a basic block */ -typedef struct eBasicBlock { - int dfnum ; /* depth first number */ - int bbnum ; /* index into array of numbers */ - int depth ; /* loop depth of this block */ - int fSeq ; /* sequence number of first iCode */ - int lSeq ; /* sequence number of the last iCode */ - unsigned int visited:1; /* visitied flag */ - 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 */ - symbol *entryLabel ; /* entry label */ - - iCode *sch ; /* pointer to start of code chain */ - iCode *ech ; /* pointer to last of code chain */ +typedef struct eBBlock + { + int dfnum; /* depth first number */ + int bbnum; /* index into array of numbers */ + int depth; /* loop depth of this block */ + int fSeq; /* sequence number of first iCode */ + int lSeq; /* sequence number of the last iCode */ + unsigned int visited:1; /* visitied flag */ + 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 */ + symbol *entryLabel; /* entry label */ - struct eBasicBlock *preHeader ; /* preheader if this is a loop entry */ - struct region *partOfLoop; /* pointer to the loop region this block is part of */ + iCode *sch; /* pointer to start of code chain */ + iCode *ech; /* pointer to last of code chain */ + + struct eBBlock *preHeader; /* preheader if this is a loop entry */ + struct region *partOfLoop; /* pointer to the loop region this block is part of */ /* control flow analysis */ - set *succList ; /* list eBBlocks which are successors */ - bitVect *succVect ; /* bitVector of successors */ - set *predList ; /* predecessors of this basic block */ - bitVect *domVect ; /* list of nodes this is dominated by */ + set *succList; /* list eBBlocks which are successors */ + bitVect *succVect; /* bitVector of successors */ + set *predList; /* predecessors of this basic block */ + bitVect *domVect; /* list of nodes this is dominated by */ /* data flow analysis */ - set *inExprs ; /* in coming common expressions */ - set *outExprs ; /* out going common expressions */ - bitVect *inDefs; /* in coming defintions */ - bitVect *outDefs; /* out going defintions */ - bitVect *defSet; /* symbols defined in block */ - bitVect *ldefs ; /* local definitions only */ - bitVect *usesDefs;/* which definitions are used in this block */ - bitVect *ptrsSet; /* pointers assigned values in the block */ - bitVect *inPtrsSet;/* in coming pointers assigned values */ - bitVect *ndompset; /* pointers set by non-dominating basic blocks */ - set *addrOf ; /* symbols for which addres has been taken in the block */ - bitVect *linds ; /* if loop exit this contains defNumbers - for the inductions */ -} eBBlock ; + set *inExprs; /* in coming common expressions */ + set *outExprs; /* out going common expressions */ + bitVect *inDefs; /* in coming defintions */ + bitVect *outDefs; /* out going defintions */ + bitVect *defSet; /* symbols defined in block */ + bitVect *ldefs; /* local definitions only */ + bitVect *usesDefs; /* which definitions are used in this block */ + bitVect *ptrsSet; /* pointers assigned values in the block */ + bitVect *inPtrsSet; /* in coming pointers assigned values */ + bitVect *ndompset; /* pointers set by non-dominating basic blocks */ + set *addrOf; /* symbols for which addres has been taken in the block */ + bitVect *linds; /* if loop exit this contains defNumbers + for the inductions */ + } +eBBlock; + +typedef struct edge + { + + eBBlock *from; /* from basic block */ + eBBlock *to; /* to Basic Block */ + } +edge; -typedef struct edge { - - eBBlock *from ; /* from basic block */ - eBBlock *to ; /* to Basic Block */ -} edge ; +extern int eBBNum; +extern set *graphEdges; -extern int eBBNum ; -extern set *graphEdges ; +DEFSETFUNC (printEntryLabel); +eBBlock *neweBBlock (); +edge *newEdge (eBBlock *, eBBlock *); +eBBlock *eBBWithEntryLabel (eBBlock **, symbol *, int); +DEFSETFUNC (ifFromIs); +set *edgesTo (eBBlock *); +void remiCodeFromeBBlock (eBBlock *, iCode *); +void addiCodeToeBBlock (eBBlock *, iCode *, iCode *); +eBBlock **iCodeBreakDown (iCode *, int *); +void replaceSymBySym (set *, operand *, operand *); +iCode *iCodeFromeBBlock (eBBlock **, int); +int otherPathsPresent (eBBlock **, eBBlock *); +void replaceLabel (eBBlock *, symbol *, symbol *); +void dumpEbbsToFileExt (int, eBBlock **, int); +void dumpLiveRanges (int, hTab * liveRanges); +void closeDumpFiles(); -DEFSETFUNC(printEntryLabel) ; -eBBlock *neweBBlock () ; -edge *newEdge (eBBlock *, eBBlock *) ; -eBBlock *eBBWithEntryLabel ( eBBlock **, symbol *, int); -DEFSETFUNC(ifFromIs) ; -set *edgesTo ( eBBlock *); -void remiCodeFromeBBlock (eBBlock *, iCode *); -void addiCodeToeBBlock ( eBBlock *,iCode *,iCode *); -eBBlock **iCodeBreakDown (iCode *, int *); -void replaceSymBySym (set *, operand *, operand *); -iCode *iCodeFromeBBlock ( eBBlock **,int); -int otherPathsPresent (eBBlock **,eBBlock *); -void replaceLabel(eBBlock *,symbol *,symbol *); -void dumpEbbsToFileExt (char *,eBBlock **,int); #endif