diff options
author | Andrew MacLeod <amacleod@cygnus.com> | 1999-08-16 22:14:51 +0000 |
---|---|---|
committer | Andrew Macleod <amacleod@gcc.gnu.org> | 1999-08-16 22:14:51 +0000 |
commit | 410538ea80a50d7e16bb169230a05606fbda8315 (patch) | |
tree | 51264c076578e2c29019399f0d2a2a72f1378908 /gcc/basic-block.h | |
parent | b0d065155dcf58badec4abea8652c1b06b66a2e1 (diff) | |
download | gcc-410538ea80a50d7e16bb169230a05606fbda8315.zip gcc-410538ea80a50d7e16bb169230a05606fbda8315.tar.gz gcc-410538ea80a50d7e16bb169230a05606fbda8315.tar.bz2 |
basic-block.h (struct edge_list): Stucture to maintain a vector of edges.
* basic-block.h (struct edge_list): Stucture to maintain a vector
of edges.
(EDGE_INDEX_NO_EDGE, EDGE_INDEX, INDEX_EDGE_PRED_BB, INDEX_EDGE_SUCC_BB,
INDEX_EDGE, NUM_EDGES): New Macros for accessing edge list.
(create_edge_list, free_edge-List, print_edge_list, verify_edge_list):
New function prototypes.
* flow.c (create_edge_list): Function to create an edge list.
(free_edge_list): Discards memory used by an edge list.
(print_edge_list): Debug output showing an edge list.
(verify_edge_list): Internal consistency check for an edge list.
From-SVN: r28732
Diffstat (limited to 'gcc/basic-block.h')
-rw-r--r-- | gcc/basic-block.h | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/gcc/basic-block.h b/gcc/basic-block.h index fa3d56f..c6a9065 100644 --- a/gcc/basic-block.h +++ b/gcc/basic-block.h @@ -244,6 +244,38 @@ extern basic_block split_edge PROTO ((edge)); extern void insert_insn_on_edge PROTO ((rtx, edge)); extern void commit_edge_insertions PROTO ((void)); +/* This structure maintains an edge list vector. */ +struct edge_list +{ + int num_blocks; + int num_edges; + edge *index_to_edge; +}; + +/* This is the value which indicates no edge is present. */ +#define EDGE_INDEX_NO_EDGE -1 + +/* EDGE_INDEX returns an integer index for an edge, or EDGE_INDEX_NO_EDGE + if there is no edge between the 2 basic blocks. */ +#define EDGE_INDEX(el, pred, succ) (find_edge_index ((el), (pred), (succ))) + +/* INDEX_EDGE_PRED_BB and INDEX_EDGE_SUCC_BB return a pointer to the basic + block which is either the pred or succ end of the indexed edge. */ +#define INDEX_EDGE_PRED_BB(el, index) ((el)->index_to_edge[(index)]->src) +#define INDEX_EDGE_SUCC_BB(el, index) ((el)->index_to_edge[(index)]->dest) + +/* INDEX_EDGE returns a pointer to the edge. */ +#define INDEX_EDGE(el, index) ((el)->index_to_edge[(index)]) + +/* Number of edges in the compressed edge list. */ +#define NUM_EDGES(el) ((el)->num_edges) + +struct edge_list * create_edge_list PROTO ((void)); +void free_edge_list PROTO ((struct edge_list *)); +void print_edge_list PROTO ((FILE *, struct edge_list *)); +void verify_edge_list PROTO ((FILE *, struct edge_list *)); +int find_edge_index PROTO ((struct edge_list *, int, int)); + extern void compute_preds_succs PROTO ((int_list_ptr *, int_list_ptr *, int *, int *)); extern void compute_dominators PROTO ((sbitmap *, sbitmap *, |