aboutsummaryrefslogtreecommitdiff
path: root/gcc/basic-block.h
diff options
context:
space:
mode:
authorAndrew MacLeod <amacleod@cygnus.com>1999-08-16 22:14:51 +0000
committerAndrew Macleod <amacleod@gcc.gnu.org>1999-08-16 22:14:51 +0000
commit410538ea80a50d7e16bb169230a05606fbda8315 (patch)
tree51264c076578e2c29019399f0d2a2a72f1378908 /gcc/basic-block.h
parentb0d065155dcf58badec4abea8652c1b06b66a2e1 (diff)
downloadgcc-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.h32
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 *,