/* Basic block information indexed by block number. */
struct basic_block_def GTY((chain_next ("%h.next_bb"), chain_prev ("%h.prev_bb")))
{
- /* Pointers to the first and last trees of the block. */
- tree stmt_list;
-
/* The edges into and out of the block. */
VEC(edge,gc) *preds;
VEC(edge,gc) *succs;
PTR GTY ((skip (""))) aux;
/* Innermost loop containing the block. */
- struct loop * GTY ((skip (""))) loop_father;
+ struct loop *loop_father;
/* The dominance and postdominance information node. */
struct et_node * GTY ((skip (""))) dom[2];
struct basic_block_def *next_bb;
union basic_block_il_dependent {
+ struct tree_bb_info * GTY ((tag ("0"))) tree;
struct rtl_bb_info * GTY ((tag ("1"))) rtl;
} GTY ((desc ("((%1.flags & BB_RTL) != 0)"))) il;
- /* Chain of PHI nodes for this block. */
- tree phi_nodes;
-
- /* A list of predictions. */
- struct edge_prediction *predictions;
-
/* Expected number of executions: calculated in profile.c. */
gcov_type count;
int visited;
};
+struct tree_bb_info GTY(())
+{
+ /* Pointers to the first and last trees of the block. */
+ tree stmt_list;
+
+ /* Chain of PHI nodes for this block. */
+ tree phi_nodes;
+};
+
typedef struct basic_block_def *basic_block;
DEF_VEC_P(basic_block);
extern void compute_available (sbitmap *, sbitmap *, sbitmap *, sbitmap *);
/* In predict.c */
-extern void expected_value_to_br_prob (void);
extern bool maybe_hot_bb_p (basic_block);
extern bool probably_cold_bb_p (basic_block);
extern bool probably_never_executed_bb_p (basic_block);
extern bool delete_unreachable_blocks (void);
extern bool merge_seq_blocks (void);
-typedef struct conflict_graph_def *conflict_graph;
-
-/* Callback function when enumerating conflicts. The arguments are
- the smaller and larger regno in the conflict. Returns zero if
- enumeration is to continue, nonzero to halt enumeration. */
-typedef int (*conflict_graph_enum_fn) (int, int, void *);
-
-
-/* Prototypes of operations on conflict graphs. */
-
-extern conflict_graph conflict_graph_new
- (int);
-extern void conflict_graph_delete (conflict_graph);
-extern int conflict_graph_add (conflict_graph, int, int);
-extern int conflict_graph_conflict_p (conflict_graph, int, int);
-extern void conflict_graph_enum (conflict_graph, int, conflict_graph_enum_fn,
- void *);
-extern void conflict_graph_merge_regs (conflict_graph, int, int);
-extern void conflict_graph_print (conflict_graph, FILE*);
extern bool mark_dfs_back_edges (void);
extern void set_edge_can_fallthru_flag (void);
extern void update_br_prob_note (basic_block);
extern rtx get_last_bb_insn (basic_block);
/* In bb-reorder.c */
-extern void reorder_basic_blocks (unsigned int);
+extern void reorder_basic_blocks (void);
/* In dominance.c */
enum cdi_direction
{
- CDI_DOMINATORS,
- CDI_POST_DOMINATORS
+ CDI_DOMINATORS = 1,
+ CDI_POST_DOMINATORS = 2
};
enum dom_state
DOM_OK /* Everything is ok. */
};
-extern enum dom_state dom_computed[2];
-
+extern enum dom_state dom_info_state (enum cdi_direction);
+extern void set_dom_info_availability (enum cdi_direction, enum dom_state);
extern bool dom_info_available_p (enum cdi_direction);
extern void calculate_dominance_info (enum cdi_direction);
extern void free_dominance_info (enum cdi_direction);
extern edge try_redirect_by_replacing_jump (edge, basic_block, bool);
extern void break_superblocks (void);
+extern void relink_block_chain (bool);
extern void check_bb_profile (basic_block, FILE *);
extern void update_bb_profile_for_threading (basic_block, int, gcov_type, edge);
extern void init_rtl_bb_info (basic_block);
extern basic_block get_bb_original (basic_block);
extern void set_bb_copy (basic_block, basic_block);
extern basic_block get_bb_copy (basic_block);
+void set_loop_copy (struct loop *, struct loop *);
+struct loop *get_loop_copy (struct loop *);
+
extern rtx insert_insn_end_bb_new (rtx, basic_block);
extern bool condjump_equiv_p (struct equiv_info *, bool);
/* Return true when one of the predecessor edges of BB is marked with EDGE_EH. */
-static inline bool bb_has_eh_pred (basic_block bb)
+static inline bool
+bb_has_eh_pred (basic_block bb)
{
edge e;
edge_iterator ei;
return false;
}
+/* In cfgloopmanip.c. */
+extern edge mfb_kj_edge;
+bool mfb_keep_just (edge);
+
#endif /* GCC_BASIC_BLOCK_H */