Mercurial > hg > CbC > CbC_gcc
diff gcc/basic-block.h @ 55:77e2b8dfacca gcc-4.4.5
update it from 4.4.3 to 4.5.0
author | ryoma <e075725@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 12 Feb 2010 23:39:51 +0900 |
parents | a06113de4d67 |
children | b7f97abdc517 |
line wrap: on
line diff
--- a/gcc/basic-block.h Sun Feb 07 18:28:00 2010 +0900 +++ b/gcc/basic-block.h Fri Feb 12 23:39:51 2010 +0900 @@ -1,6 +1,6 @@ /* Define control and data flow tables, and regsets. Copyright (C) 1987, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, - 2005, 2006, 2007, 2008 Free Software Foundation, Inc. + 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of GCC. @@ -119,8 +119,7 @@ typedef HOST_WIDEST_INT gcov_type; /* Control flow edge information. */ -struct edge_def GTY(()) -{ +struct GTY(()) edge_def { /* The two blocks at the ends of the edge. */ struct basic_block_def *src; struct basic_block_def *dest; @@ -148,8 +147,6 @@ in profile.c */ }; -typedef struct edge_def *edge; -typedef const struct edge_def *const_edge; DEF_VEC_P(edge); DEF_VEC_ALLOC_P(edge,gc); DEF_VEC_ALLOC_P(edge,heap); @@ -217,8 +214,7 @@ basic blocks. */ /* Basic block information indexed by block number. */ -struct basic_block_def GTY((chain_next ("%h.next_bb"), chain_prev ("%h.prev_bb"))) -{ +struct GTY((chain_next ("%h.next_bb"), chain_prev ("%h.prev_bb"))) basic_block_def { /* The edges into and out of the block. */ VEC(edge,gc) *preds; VEC(edge,gc) *succs; @@ -253,12 +249,14 @@ /* Expected frequency. Normalized to be in range 0 to BB_FREQ_MAX. */ int frequency; + /* The discriminator for this block. */ + int discriminator; + /* Various flags. See BB_* below. */ int flags; }; -struct rtl_bb_info GTY(()) -{ +struct GTY(()) rtl_bb_info { /* The first and last insns of the block. */ rtx head_; rtx end_; @@ -272,8 +270,7 @@ int visited; }; -struct gimple_bb_info GTY(()) -{ +struct GTY(()) gimple_bb_info { /* Sequence of statements in this block. */ gimple_seq seq; @@ -281,9 +278,6 @@ gimple_seq phi_nodes; }; -typedef struct basic_block_def *basic_block; -typedef const struct basic_block_def *const_basic_block; - DEF_VEC_P(basic_block); DEF_VEC_ALLOC_P(basic_block,gc); DEF_VEC_ALLOC_P(basic_block,heap); @@ -365,12 +359,19 @@ DOM_OK /* Everything is ok. */ }; +/* What sort of profiling information we have. */ +enum profile_status_d +{ + PROFILE_ABSENT, + PROFILE_GUESSED, + PROFILE_READ +}; + /* A structure to group all the per-function control flow graph data. The x_* prefixing is necessary because otherwise references to the fields of this struct are interpreted as the defines for backward source compatibility following the definition of this struct. */ -struct control_flow_graph GTY(()) -{ +struct GTY(()) control_flow_graph { /* Block pointers for the exit and entry of a function. These are always the head and tail of the basic block list. */ basic_block x_entry_block_ptr; @@ -392,11 +393,7 @@ only used for the gimple CFG. */ VEC(basic_block,gc) *x_label_to_block_map; - enum profile_status { - PROFILE_ABSENT, - PROFILE_GUESSED, - PROFILE_READ - } x_profile_status; + enum profile_status_d x_profile_status; /* Whether the dominators and the postdominators are available. */ enum dom_state x_dom_computed[2]; @@ -466,7 +463,7 @@ for ((INSN) = BB_HEAD (BB), (CURR) = (INSN) ? NEXT_INSN ((INSN)): NULL; \ (INSN) && (INSN) != NEXT_INSN (BB_END (BB)); \ (INSN) = (CURR), (CURR) = (INSN) ? NEXT_INSN ((INSN)) : NULL) - + #define FOR_BB_INSNS_REVERSE(BB, INSN) \ for ((INSN) = BB_END (BB); \ (INSN) && (INSN) != PREV_INSN (BB_HEAD (BB)); \ @@ -494,7 +491,8 @@ #define BB_HEAD(B) (B)->il.rtl->head_ #define BB_END(B) (B)->il.rtl->end_ -/* Special block numbers [markers] for entry and exit. */ +/* Special block numbers [markers] for entry and exit. + Neither of them is supposed to hold actual statements. */ #define ENTRY_BLOCK (0) #define EXIT_BLOCK (1) @@ -512,6 +510,7 @@ extern void insert_insn_on_edge (rtx, edge); basic_block split_edge_and_insert (edge, rtx); +extern void commit_one_edge_insertion (edge e); extern void commit_edge_insertions (void); extern void remove_fake_edges (void); @@ -858,8 +857,6 @@ extern bool predictable_edge_p (edge); /* In cfg.c */ -extern void dump_regset (regset, FILE *); -extern void debug_regset (regset); extern void init_flow (struct function *); extern void debug_bb (basic_block); extern basic_block debug_bb_n (int); @@ -896,7 +893,6 @@ /* In cfgbuild.c. */ extern void find_many_sub_basic_blocks (sbitmap); extern void rtl_make_eh_edge (sbitmap, basic_block, rtx); -extern void find_basic_blocks (rtx); /* In cfgcleanup.c. */ extern bool cleanup_cfg (int); @@ -938,6 +934,8 @@ extern VEC (basic_block, heap) *get_dominated_by_region (enum cdi_direction, basic_block *, unsigned); +extern VEC (basic_block, heap) *get_all_dominated_blocks (enum cdi_direction, + basic_block); extern void add_to_dominance_info (enum cdi_direction, basic_block); extern void delete_from_dominance_info (enum cdi_direction, basic_block); basic_block recompute_dominator (enum cdi_direction, basic_block);