X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Fbasic-block.h;h=05f41c01948873fff6fc8b1e0c4fcf5c07cfa3cc;hb=6720e96c010817b0078e02afb7017d0e476a9bc3;hp=e801baf48c7c3f4da20ee1cf5bac274f72fff230;hpb=a8349c62da4e62b8ab039f14ee293e6a24c56026;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/basic-block.h b/gcc/basic-block.h index e801baf48c7..05f41c01948 100644 --- a/gcc/basic-block.h +++ b/gcc/basic-block.h @@ -288,6 +288,17 @@ extern varray_type basic_block_info; #define FOR_EACH_BB_REVERSE(BB) \ FOR_BB_BETWEEN (BB, EXIT_BLOCK_PTR->prev_bb, ENTRY_BLOCK_PTR, prev_bb) +/* For iterating over insns in basic block. */ +#define FOR_BB_INSNS(BB, INSN) \ + for ((INSN) = BB_HEAD (BB); \ + (INSN) != NEXT_INSN (BB_END (BB)); \ + (INSN) = NEXT_INSN (INSN)) + +#define FOR_BB_INSNS_REVERSE(BB, INSN) \ + for ((INSN) = BB_END (BB); \ + (INSN) != PREV_INSN (BB_HEAD (BB)); \ + (INSN) = PREV_INSN (INSN)) + /* Cycles through _all_ basic blocks, even the fake ones (entry and exit block). */ @@ -363,8 +374,6 @@ extern edge redirect_edge_succ_nodup (edge, basic_block); extern void redirect_edge_pred (edge, basic_block); extern basic_block create_basic_block_structure (rtx, rtx, rtx, basic_block); extern void clear_bb_flags (void); -extern void tidy_fallthru_edge (edge, basic_block, basic_block); -extern void tidy_fallthru_edges (void); extern void flow_reverse_top_sort_order_compute (int *); extern int flow_depth_first_order_compute (int *, int *); extern void flow_preorder_transversal_compute (int *); @@ -480,6 +489,10 @@ enum update_life_extent | PROP_SCAN_DEAD_CODE | PROP_AUTOINC \ | PROP_ALLOW_CFG_CHANGES \ | PROP_SCAN_DEAD_STORES) +#define PROP_POSTRELOAD (PROP_DEATH_NOTES \ + | PROP_KILL_DEAD_CODE \ + | PROP_SCAN_DEAD_CODE | PROP_AUTOINC \ + | PROP_SCAN_DEAD_STORES) #define CLEANUP_EXPENSIVE 1 /* Do relatively expensive optimizations except for edge forwarding */ @@ -495,6 +508,7 @@ enum update_life_extent #define CLEANUP_NO_INSN_DEL 128 /* Do not try to delete trivially dead insns. */ #define CLEANUP_CFGLAYOUT 256 /* Do cleanup in cfglayout mode. */ +#define CLEANUP_LOG_LINKS 512 /* Update log links. */ extern void life_analysis (rtx, FILE *, int); extern int update_life_info (sbitmap, enum update_life_extent, int); extern int update_life_info_in_dirty_blocks (enum update_life_extent, int); @@ -532,7 +546,6 @@ extern bool probably_never_executed_bb_p (basic_block); /* In flow.c */ extern void init_flow (void); -extern void dump_bb (basic_block, FILE *); extern void debug_bb (basic_block); extern basic_block debug_bb_n (int); extern void dump_regset (regset, FILE *); @@ -553,6 +566,7 @@ extern bool purge_all_dead_edges (int); extern bool purge_dead_edges (basic_block); extern void find_sub_basic_blocks (basic_block); extern void find_many_sub_basic_blocks (sbitmap); +extern void make_eh_edge (sbitmap *, basic_block, rtx); extern bool can_fallthru (basic_block, basic_block); extern void flow_nodes_print (const char *, const sbitmap, FILE *); extern void flow_edge_list_print (const char *, const edge *, int, FILE *); @@ -565,11 +579,6 @@ extern void alloc_aux_for_edges (int); extern void clear_aux_for_edges (void); extern void free_aux_for_edges (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. */ -extern void verify_flow_info (void); - typedef struct conflict_graph_def *conflict_graph; /* Callback function when enumerating conflicts. The arguments are @@ -641,6 +650,7 @@ extern void verify_dominators (enum cdi_direction); extern basic_block first_dom_son (enum cdi_direction, basic_block); extern basic_block next_dom_son (enum cdi_direction, basic_block); extern bool try_redirect_by_replacing_jump (edge, basic_block, bool); +extern void break_superblocks (void); #include "cfghooks.h"