OSDN Git Service

* config/xtensa/xtensa.md: Remove unused type attributes.
[pf3gnuchains/gcc-fork.git] / gcc / basic-block.h
index 9b215c5..c9fc4b8 100644 (file)
@@ -1,5 +1,6 @@
 /* Define control and data flow tables, and regsets.
-   Copyright (C) 1987, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+   Copyright (C) 1987, 1997, 1998, 1999, 2000, 2001
+   Free Software Foundation, Inc.
 
 This file is part of GCC.
 
@@ -26,11 +27,6 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 #include "varray.h"
 #include "partition.h"
 
-#ifndef TREE_CODE
-union tree_node;
-#define tree union tree_node *
-#endif
-
 /* Head of register set linked list.  */
 typedef bitmap_head regset_head;
 /* A pointer to a regset_head.  */
@@ -83,19 +79,19 @@ do {                                                                        \
 } while (0)
 
 /* Loop over all registers in REGSET, starting with MIN, setting REGNUM to the
-   register number and executing CODE for all registers that are set. */
+   register number and executing CODE for all registers that are set.  */
 #define EXECUTE_IF_SET_IN_REG_SET(REGSET, MIN, REGNUM, CODE)           \
   EXECUTE_IF_SET_IN_BITMAP (REGSET, MIN, REGNUM, CODE)
 
 /* Loop over all registers in REGSET1 and REGSET2, starting with MIN, setting
    REGNUM to the register number and executing CODE for all registers that are
-   set in the first regset and not set in the second. */
+   set in the first regset and not set in the second.  */
 #define EXECUTE_IF_AND_COMPL_IN_REG_SET(REGSET1, REGSET2, MIN, REGNUM, CODE) \
   EXECUTE_IF_AND_COMPL_IN_BITMAP (REGSET1, REGSET2, MIN, REGNUM, CODE)
 
 /* Loop over all registers in REGSET1 and REGSET2, starting with MIN, setting
    REGNUM to the register number and executing CODE for all registers that are
-   set in both regsets. */
+   set in both regsets.  */
 #define EXECUTE_IF_AND_IN_REG_SET(REGSET1, REGSET2, MIN, REGNUM, CODE) \
   EXECUTE_IF_AND_IN_BITMAP (REGSET1, REGSET2, MIN, REGNUM, CODE)
 
@@ -225,7 +221,9 @@ typedef struct basic_block_def {
 #define BB_FREQ_MAX 10000
 
 /* Masks for basic_block.flags.  */
-#define BB_REACHABLE           1
+#define BB_DIRTY               1
+#define BB_NEW                 2
+#define BB_REACHABLE           4
 
 /* Number of basic blocks in the current function.  */
 
@@ -275,7 +273,7 @@ extern struct obstack flow_obstack;
 #define ENTRY_BLOCK (-1)
 #define EXIT_BLOCK (-2)
 
-/* Special block number not valid for any block. */
+/* Special block number not valid for any block.  */
 #define INVALID_BLOCK (-3)
 
 /* Similarly, block pointers for the edge list.  */
@@ -297,7 +295,10 @@ extern void free_basic_block_vars  PARAMS ((int));
 extern edge split_block                        PARAMS ((basic_block, rtx));
 extern basic_block split_edge          PARAMS ((edge));
 extern void insert_insn_on_edge                PARAMS ((rtx, edge));
+
 extern void commit_edge_insertions     PARAMS ((void));
+extern void commit_edge_insertions_watch_calls PARAMS ((void));
+
 extern void remove_fake_edges          PARAMS ((void));
 extern void add_noreturn_fake_exit_edges       PARAMS ((void));
 extern void connect_infinite_loops_to_exit     PARAMS ((void));
@@ -315,12 +316,14 @@ extern void redirect_edge_pred            PARAMS ((edge, basic_block));
 extern basic_block create_basic_block_structure PARAMS ((int, rtx, rtx, rtx));
 extern basic_block create_basic_block  PARAMS ((int, rtx, rtx));
 extern int flow_delete_block           PARAMS ((basic_block));
+extern void clear_bb_flags             PARAMS ((void));
 extern void merge_blocks_nomove                PARAMS ((basic_block, basic_block));
 extern void tidy_fallthru_edge         PARAMS ((edge, basic_block,
                                                 basic_block));
 extern void tidy_fallthru_edges                PARAMS ((void));
 extern void flow_reverse_top_sort_order_compute        PARAMS ((int *));
 extern int flow_depth_first_order_compute      PARAMS ((int *, int *));
+extern void flow_preorder_transversal_compute  PARAMS ((int *));
 extern void dump_edge_info             PARAMS ((FILE *, edge, int));
 extern void clear_edges                        PARAMS ((void));
 extern void mark_critical_edges                PARAMS ((void));
@@ -563,6 +566,7 @@ enum update_life_extent
 #define PROP_ALLOW_CFG_CHANGES 32      /* Allow the CFG to be changed
                                           by dead code removal.  */
 #define PROP_AUTOINC           64      /* Create autoinc mem references.  */
+#define PROP_EQUAL_NOTES       128     /* Take into account REG_EQUAL notes.  */
 #define PROP_FINAL             127     /* All of the above.  */
 
 #define CLEANUP_EXPENSIVE      1       /* Do relativly expensive optimizations
@@ -574,6 +578,8 @@ enum update_life_extent
                                           inside call_placeholders..  */
 #define CLEANUP_PRE_LOOP       16      /* Take care to preserve syntactic loop
                                           notes.  */
+#define CLEANUP_UPDATE_LIFE    32      /* Keep life information up to date.  */
+#define CLEANUP_THREADING      64      /* Do jump threading.  */
 /* Flags for loop discovery.  */
 
 #define LOOP_TREE              1       /* Build loop hierarchy tree.  */
@@ -585,8 +591,10 @@ enum update_life_extent
 #define LOOP_ALL              31       /* All of the above  */
 
 extern void life_analysis      PARAMS ((rtx, FILE *, int));
-extern void update_life_info   PARAMS ((sbitmap, enum update_life_extent,
+extern int update_life_info    PARAMS ((sbitmap, enum update_life_extent,
                                         int));
+extern int update_life_info_in_dirty_blocks PARAMS ((enum update_life_extent,
+                                                     int));
 extern int count_or_remove_death_notes PARAMS ((sbitmap, int));
 extern int propagate_block     PARAMS ((basic_block, regset, regset, regset,
                                         int));
@@ -631,15 +639,16 @@ extern void allocate_bb_life_data PARAMS ((void));
 extern void expunge_block              PARAMS ((basic_block));
 extern basic_block alloc_block         PARAMS ((void));
 extern void find_unreachable_blocks    PARAMS ((void));
-extern void delete_noop_moves          PARAMS ((rtx));
+extern int delete_noop_moves           PARAMS ((rtx));
 extern basic_block redirect_edge_and_branch_force PARAMS ((edge, basic_block));
 extern basic_block force_nonfallthru   PARAMS ((edge));
 extern bool redirect_edge_and_branch   PARAMS ((edge, basic_block));
 extern rtx block_label                 PARAMS ((basic_block));
 extern bool forwarder_block_p          PARAMS ((basic_block));
-extern bool purge_all_dead_edges       PARAMS ((void));
+extern bool purge_all_dead_edges       PARAMS ((int));
 extern bool purge_dead_edges           PARAMS ((basic_block));
 extern void find_sub_basic_blocks      PARAMS ((basic_block));
+extern void find_many_sub_basic_blocks PARAMS ((sbitmap));
 extern bool can_fallthru               PARAMS ((basic_block, basic_block));
 extern void flow_nodes_print           PARAMS ((const char *, const sbitmap,
                                                 FILE *));
@@ -647,14 +656,16 @@ extern void flow_edge_list_print  PARAMS ((const char *, const edge *,
                                                 int, FILE *));
 extern void alloc_aux_for_block                PARAMS ((basic_block, int));
 extern void alloc_aux_for_blocks       PARAMS ((int));
+extern void clear_aux_for_blocks       PARAMS ((void));
 extern void free_aux_for_blocks                PARAMS ((void));
 extern void alloc_aux_for_edge         PARAMS ((edge, int));
 extern void alloc_aux_for_edges                PARAMS ((int));
+extern void clear_aux_for_edges                PARAMS ((void));
 extern void free_aux_for_edges         PARAMS ((void));
 
 /* This function is always defined so it can be called from the
    debugger, and it is declared extern so we don't get warnings about
-   it being unused. */
+   it being unused.  */
 extern void verify_flow_info           PARAMS ((void));
 extern int flow_loop_outside_edge_p    PARAMS ((const struct loop *, edge));
 
@@ -685,6 +696,8 @@ extern conflict_graph conflict_graph_compute
                                         PARAMS ((regset,
                                                 partition));
 extern bool mark_dfs_back_edges                PARAMS ((void));
+extern void update_br_prob_note                PARAMS ((basic_block));
+extern void fixup_abnormal_edges       PARAMS ((void));
 
 /* In dominance.c */