Mon Jun 10 20:42:34 CEST 2002 Jan Hubicka <jh@suse.cz>
[gcc.git] / gcc / basic-block.h
index 4fe64d44c92d2b7a74ae04e822dadf16259617d9..9e3e7a546834be7247675b85ceeae77655afa894 100644 (file)
@@ -33,7 +33,7 @@ typedef bitmap_head regset_head;
 typedef bitmap regset;
 
 /* Initialize a new regset.  */
-#define INIT_REG_SET(HEAD) bitmap_initialize (HEAD)
+#define INIT_REG_SET(HEAD) bitmap_initialize (HEAD, 1)
 
 /* Clear a register set by freeing up the linked list.  */
 #define CLEAR_REG_SET(HEAD) bitmap_clear (HEAD)
@@ -99,7 +99,7 @@ do {                                                                  \
 #define OBSTACK_ALLOC_REG_SET(OBSTACK) BITMAP_OBSTACK_ALLOC (OBSTACK)
 
 /* Initialize a register set.  Returns the new register set.  */
-#define INITIALIZE_REG_SET(HEAD) bitmap_initialize (&HEAD)
+#define INITIALIZE_REG_SET(HEAD) bitmap_initialize (&HEAD, 1)
 
 /* Do any cleanup needed on a regset when it is no longer used.  */
 #define FREE_REG_SET(REGSET) BITMAP_FREE(REGSET)
@@ -303,14 +303,12 @@ extern struct basic_block_def entry_exit_blocks[2];
 #define ENTRY_BLOCK_PTR        (&entry_exit_blocks[0])
 #define EXIT_BLOCK_PTR (&entry_exit_blocks[1])
 
-extern varray_type basic_block_for_insn;
-#define BLOCK_FOR_INSN(INSN)  VARRAY_BB (basic_block_for_insn, INSN_UID (INSN))
 #define BLOCK_NUM(INSN)              (BLOCK_FOR_INSN (INSN)->index + 0)
+#define set_block_for_insn(INSN, BB)  (BLOCK_FOR_INSN (INSN) = BB)
 
-extern void compute_bb_for_insn                PARAMS ((int));
+extern void compute_bb_for_insn                PARAMS ((void));
 extern void free_bb_for_insn           PARAMS ((void));
 extern void update_bb_for_insn         PARAMS ((basic_block));
-extern void set_block_for_insn         PARAMS ((rtx, basic_block));
 
 extern void free_basic_block_vars      PARAMS ((int));
 
@@ -335,7 +333,7 @@ extern void remove_edge                     PARAMS ((edge));
 extern void redirect_edge_succ         PARAMS ((edge, basic_block));
 extern edge redirect_edge_succ_nodup   PARAMS ((edge, basic_block));
 extern void redirect_edge_pred         PARAMS ((edge, basic_block));
-extern basic_block create_basic_block_structure PARAMS ((int, rtx, rtx, rtx, basic_block));
+extern basic_block create_basic_block_structure PARAMS ((rtx, rtx, rtx, basic_block));
 extern basic_block create_basic_block  PARAMS ((rtx, rtx, basic_block));
 extern int flow_delete_block           PARAMS ((basic_block));
 extern int flow_delete_block_noexpunge PARAMS ((basic_block));
@@ -352,6 +350,10 @@ extern void clear_edges                    PARAMS ((void));
 extern void mark_critical_edges                PARAMS ((void));
 extern rtx first_insn_after_basic_block_note   PARAMS ((basic_block));
 
+/* Dominator information for basic blocks.  */
+
+typedef struct dominance_info *dominance_info;
+
 /* Structure to hold information for each natural loop.  */
 struct loop
 {
@@ -500,7 +502,7 @@ struct loops
   struct cfg
   {
     /* The bitmap vector of dominators or NULL if not computed.  */
-    sbitmap *dom;
+    dominance_info dom;
 
     /* The ordering of the basic blocks in a depth first search.  */
     int *dfs_order;
@@ -772,7 +774,21 @@ enum cdi_direction
   CDI_POST_DOMINATORS
 };
 
-extern void calculate_dominance_info   PARAMS ((int *, sbitmap *,
-                                                enum cdi_direction));
-
+extern dominance_info calculate_dominance_info PARAMS ((enum cdi_direction));
+extern void free_dominance_info                        PARAMS ((dominance_info));
+extern basic_block nearest_common_dominator    PARAMS ((dominance_info,
+                                                basic_block, basic_block));
+extern void set_immediate_dominator    PARAMS ((dominance_info,
+                                                basic_block, basic_block));
+extern basic_block get_immediate_dominator     PARAMS ((dominance_info,
+                                                basic_block));
+extern bool dominated_by_p     PARAMS ((dominance_info, basic_block, basic_block));
+extern int get_dominated_by PARAMS ((dominance_info, basic_block, basic_block **));
+extern void add_to_dominance_info PARAMS ((dominance_info, basic_block));
+extern void delete_from_dominance_info PARAMS ((dominance_info, basic_block));
+basic_block recount_dominator PARAMS ((dominance_info, basic_block));
+extern void redirect_immediate_dominators PARAMS ((dominance_info, basic_block,
+                                                basic_block));
+void iterate_fix_dominators PARAMS ((dominance_info, basic_block *, int));
+extern void verify_dominators PARAMS ((dominance_info));
 #endif /* GCC_BASIC_BLOCK_H */