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 */
+ 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 */
/* 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 */
}
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
{
}
edge;
+
extern int eBBNum;
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 (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, ebbIndex *);
+void dumpLiveRanges (int, hTab * liveRanges);
+void closeDumpFiles();
#endif