OSDN Git Service

2002-11-15 Eric Botcazou <ebotcazou@libertysurf.fr>
[pf3gnuchains/gcc-fork.git] / gcc / basic-block.h
index a3c97f9..10c8954 100644 (file)
@@ -135,13 +135,16 @@ typedef struct edge_def {
                                   in profile.c  */
 } *edge;
 
-#define EDGE_FALLTHRU          1
-#define EDGE_ABNORMAL          2
-#define EDGE_ABNORMAL_CALL     4
-#define EDGE_EH                        8
-#define EDGE_FAKE              16
-#define EDGE_DFS_BACK          32
-#define EDGE_CAN_FALLTHRU      64
+#define EDGE_FALLTHRU          1       /* 'Straight line' flow */
+#define EDGE_ABNORMAL          2       /* Strange flow, like computed
+                                          label, or eh */
+#define EDGE_ABNORMAL_CALL     4       /* Call with abnormal exit
+                                          like an exception, or sibcall */
+#define EDGE_EH                        8       /* Exception throw */
+#define EDGE_FAKE              16      /* Not a real edge (profile.c) */
+#define EDGE_DFS_BACK          32      /* A backwards edge */
+#define EDGE_CAN_FALLTHRU      64      /* Candidate for straight line
+                                          flow.  */
 
 #define EDGE_COMPLEX   (EDGE_ABNORMAL | EDGE_ABNORMAL_CALL | EDGE_EH)
 
@@ -432,7 +435,7 @@ struct loop
   /* Link to the next (sibling) loop.  */
   struct loop *next;
 
-  /* Non-zero if the loop is invalid (e.g., contains setjmp.).  */
+  /* Nonzero if the loop is invalid (e.g., contains setjmp.).  */
   int invalid;
 
   /* Auxiliary info specific to a pass.  */
@@ -441,16 +444,13 @@ struct loop
   /* The following are currently used by loop.c but they are likely to
      disappear as loop.c is converted to use the CFG.  */
 
-  /* Non-zero if the loop has a NOTE_INSN_LOOP_VTOP.  */
+  /* Nonzero if the loop has a NOTE_INSN_LOOP_VTOP.  */
   rtx vtop;
 
-  /* Non-zero if the loop has a NOTE_INSN_LOOP_CONT.
+  /* Nonzero if the loop has a NOTE_INSN_LOOP_CONT.
      A continue statement will generate a branch to NEXT_INSN (cont).  */
   rtx cont;
 
-  /* The dominator of cont.  */
-  rtx cont_dominator;
-
   /* The NOTE_INSN_LOOP_BEG.  */
   rtx start;
 
@@ -523,6 +523,33 @@ struct loops
   sbitmap shared_headers;
 };
 
+/* Structure to group all of the information to process IF-THEN and
+   IF-THEN-ELSE blocks for the conditional execution support.  This
+   needs to be in a public file in case the IFCVT macros call
+   functions passing the ce_if_block data structure.  */
+
+typedef struct ce_if_block
+{
+  basic_block test_bb;                 /* First test block.  */
+  basic_block then_bb;                 /* THEN block.  */
+  basic_block else_bb;                 /* ELSE block or NULL.  */
+  basic_block join_bb;                 /* Join THEN/ELSE blocks.  */
+  basic_block last_test_bb;            /* Last bb to hold && or || tests.  */
+  int num_multiple_test_blocks;                /* # of && and || basic blocks.  */
+  int num_and_and_blocks;              /* # of && blocks.  */
+  int num_or_or_blocks;                        /* # of || blocks.  */
+  int num_multiple_test_insns;         /* # of insns in && and || blocks.  */
+  int and_and_p;                       /* Complex test is &&.  */
+  int num_then_insns;                  /* # of insns in THEN block.  */
+  int num_else_insns;                  /* # of insns in ELSE block.  */
+  int pass;                            /* Pass number.  */
+
+#ifdef IFCVT_EXTRA_FIELDS
+  IFCVT_EXTRA_FIELDS                   /* Any machine dependent fields.  */
+#endif
+
+} ce_if_block_t;
+
 extern int flow_loops_find PARAMS ((struct loops *, int flags));
 extern int flow_loops_update PARAMS ((struct loops *, int flags));
 extern void flow_loops_free PARAMS ((struct loops *));
@@ -743,7 +770,7 @@ typedef struct conflict_graph_def *conflict_graph;
 
 /* Callback function when enumerating conflicts.  The arguments are
    the smaller and larger regno in the conflict.  Returns zero if
-   enumeration is to continue, non-zero to halt enumeration.  */
+   enumeration is to continue, nonzero to halt enumeration.  */
 typedef int (*conflict_graph_enum_fn) PARAMS ((int, int, void *));