OSDN Git Service

* config/s390/s390.c (s390_emit_epilogue): Always restore registers
[pf3gnuchains/gcc-fork.git] / gcc / basic-block.h
index 1a0cab6..24d2af8 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, 2002
+   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.  */
@@ -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.  */
 
@@ -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,15 @@ 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 int flow_delete_block_noexpunge 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 +567,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 +579,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 +592,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));
@@ -629,15 +638,16 @@ extern void debug_regset          PARAMS ((regset));
 extern void allocate_reg_life_data      PARAMS ((void));
 extern void allocate_bb_life_data      PARAMS ((void));
 extern void expunge_block              PARAMS ((basic_block));
+extern void expunge_block_nocompact    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));
@@ -648,9 +658,11 @@ 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
@@ -686,6 +698,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 */