+extern void df_insn_debug_regno (struct df *, rtx, FILE *);
+
+
+/* Meet over any path (UNION) or meet over all paths (INTERSECTION). */
+enum df_confluence_op
+ {
+ DF_UNION,
+ DF_INTERSECTION
+ };
+
+
+/* Dataflow direction. */
+enum df_flow_dir
+ {
+ DF_FORWARD,
+ DF_BACKWARD
+ };
+
+
+typedef void (*transfer_function) (int, int *, void *, void *,
+ void *, void *, void *);
+
+/* The description of a dataflow problem to solve. */
+
+enum set_representation
+{
+ SR_SBITMAP, /* Represent sets by bitmaps. */
+ SR_BITMAP /* Represent sets by sbitmaps. */
+};
+
+struct dataflow
+{
+ enum set_representation repr; /* The way the sets are represented. */
+
+ /* The following arrays are indexed by block indices, so they must always
+ be large enough even if we restrict ourselves just to a subset of cfg. */
+ void **gen, **kill; /* Gen and kill sets. */
+ void **in, **out; /* Results. */
+
+ enum df_flow_dir dir; /* Dataflow direction. */
+ enum df_confluence_op conf_op; /* Confluence operator. */
+ unsigned n_blocks; /* Number of basic blocks in the
+ order. */
+ int *order; /* The list of basic blocks to work
+ with, in the order they should
+ be processed in. */
+ transfer_function transfun; /* The transfer function. */
+ void *data; /* Data used by the transfer
+ function. */
+};