37 lines
1.4 KiB
C
37 lines
1.4 KiB
C
#ifndef BASICBLOCK_H
|
|
#define BASICBLOCK_H
|
|
/*
|
|
* Copyright 1991 Silicon Graphics, Inc. All rights reserved.
|
|
*
|
|
* Basic blocks are linked using a first-successor/next-sibling scheme,
|
|
* with non-null previous-sibling links for all but the first successor.
|
|
* The predecessor link points at the last sibling to which this block
|
|
* is a successor.
|
|
*/
|
|
|
|
typedef struct basicblock BasicBlock;
|
|
|
|
struct basicblock {
|
|
struct scope *bb_scope; /* closest enclosing scope */
|
|
struct treenode *bb_leader; /* first node in block list */
|
|
BasicBlock *bb_next; /* next sibling in DAG */
|
|
BasicBlock *bb_prev; /* and previous sibling */
|
|
BasicBlock *bb_succ; /* list of successor blocks */
|
|
BasicBlock *bb_pred; /* and predecessor blocks */
|
|
unsigned short bb_prefcnt; /* counts predecessor references */
|
|
unsigned short bb_dfnum; /* depth-first number */
|
|
unsigned short bb_visited:1; /* flag for depth-first search */
|
|
unsigned short bb_formal:1; /* protocol formal argument bb */
|
|
short bb_width; /* width of all fields in this bb */
|
|
struct bitset *bb_gen; /* set of defs in bb that leave it */
|
|
struct bitset *bb_out; /* set of all defs that leave bb */
|
|
struct bitset *bb_in; /* set of defs that reach bb */
|
|
};
|
|
|
|
extern BasicBlock *basicblock(struct context *, struct treenode *,
|
|
BasicBlock *, BasicBlock *);
|
|
extern int checkblocks(BasicBlock *, struct context *);
|
|
extern void destroyblocks(BasicBlock *);
|
|
|
|
#endif
|