Added support fun for long shifts
[fw/sdcc] / src / SDCCBBlock.h
index 51d53726f0519172e588782f9fe646f1086d19fd..fab3f8986eb283aab6206ce20d6ef3f098eb3aca 100644 (file)
 #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