GCC Middle and Back End API Reference
basic-block.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  edge_def
union  edge_def::edge_def_insns
struct  profile_record
struct  rtl_bb_info
struct  gimple_bb_info
struct  basic_block_def
union  basic_block_def::basic_block_il_dependent
struct  control_flow_graph
struct  ce_if_block
struct  edge_list
struct  edge_iterator

Typedefs

typedef HOST_WIDEST_INT gcov_type
typedef unsigned HOST_WIDEST_INT gcov_type_unsigned
typedef int __assert_gimple_bb_smaller_rtl_bb [(int) sizeof(struct rtl_bb_info)-(int) sizeof(struct gimple_bb_info)]
typedef struct ce_if_block ce_if_block_t
typedef struct
gcov_working_set_info 
gcov_working_set_t

Enumerations

enum  cfg_edge_flags { LAST_CFG_EDGE_FLAG }
enum  cfg_bb_flags { LAST_CFG_BB_FLAG }
enum  dom_state { DOM_NONE, DOM_NO_FAST_QUERY, DOM_OK }
enum  profile_status_d { PROFILE_ABSENT, PROFILE_GUESSED, PROFILE_READ, PROFILE_LAST }
enum  replace_direction { dir_none, dir_forward, dir_backward, dir_both }
enum  cdi_direction { CDI_DOMINATORS = 1, CDI_POST_DOMINATORS = 2 }

Functions

void gt_ggc_mx (edge_def *e)
void gt_pch_nx (edge_def *e)
void gt_pch_nx (edge_def *e, gt_pointer_operator, void *)
void compute_bb_for_insn (void)
unsigned int free_bb_for_insn (void)
void update_bb_for_insn (basic_block)
void insert_insn_on_edge (rtx, edge)
basic_block split_edge_and_insert (edge, rtx)
void commit_one_edge_insertion (edge e)
void commit_edge_insertions (void)
edge unchecked_make_edge (basic_block, basic_block, int)
edge cached_make_edge (sbitmap, basic_block, basic_block, int)
edge make_edge (basic_block, basic_block, int)
edge make_single_succ_edge (basic_block, basic_block, int)
void remove_edge_raw (edge)
void redirect_edge_succ (edge, basic_block)
edge redirect_edge_succ_nodup (edge, basic_block)
void redirect_edge_pred (edge, basic_block)
basic_block create_basic_block_structure (rtx, rtx, rtx, basic_block)
void clear_bb_flags (void)
void dump_bb_info (FILE *, basic_block, int, int, bool, bool)
void dump_edge_info (FILE *, edge, int, int)
void debug (edge_def &ref)
void debug (edge_def *ptr)
void brief_dump_cfg (FILE *, int)
void clear_edges (void)
void scale_bbs_frequencies_int (basic_block *, int, int, int)
void scale_bbs_frequencies_gcov_type (basic_block *, int, gcov_type, gcov_type)
static bool single_succ_p ()
static bool single_pred_p ()
static edge single_succ_edge ()
static edge single_pred_edge ()
static basic_block single_succ ()
static basic_block single_pred ()
static vec< edge, va_gc > * ei_container ()
static edge_iterator ei_start_1 ()
static edge_iterator ei_last_1 ()
static bool ei_end_p ()
static bool ei_one_before_end_p ()
static void ei_next ()
static void ei_prev ()
static edge ei_edge ()
static edge ei_safe_edge ()
static bool ei_cond ()
void bitmap_intersection_of_succs (sbitmap, sbitmap *, basic_block)
void bitmap_intersection_of_preds (sbitmap, sbitmap *, basic_block)
void bitmap_union_of_succs (sbitmap, sbitmap *, basic_block)
void bitmap_union_of_preds (sbitmap, sbitmap *, basic_block)
struct edge_listpre_edge_lcm (int, sbitmap *, sbitmap *, sbitmap *, sbitmap *, sbitmap **, sbitmap **)
struct edge_listpre_edge_rev_lcm (int, sbitmap *, sbitmap *, sbitmap *, sbitmap *, sbitmap **, sbitmap **)
void compute_available (sbitmap *, sbitmap *, sbitmap *, sbitmap *)
bool maybe_hot_bb_p (struct function *, const_basic_block)
bool maybe_hot_edge_p (edge)
bool probably_never_executed_bb_p (struct function *, const_basic_block)
bool optimize_bb_for_size_p (const_basic_block)
bool optimize_bb_for_speed_p (const_basic_block)
bool optimize_edge_for_size_p (edge)
bool optimize_edge_for_speed_p (edge)
bool optimize_loop_for_size_p (struct loop *)
bool optimize_loop_for_speed_p (struct loop *)
bool optimize_loop_nest_for_size_p (struct loop *)
bool optimize_loop_nest_for_speed_p (struct loop *)
bool gimple_predicted_by_p (const_basic_block, enum br_predictor)
bool rtl_predicted_by_p (const_basic_block, enum br_predictor)
void gimple_predict_edge (edge, enum br_predictor, int)
void rtl_predict_edge (edge, enum br_predictor, int)
void predict_edge_def (edge, enum br_predictor, enum prediction)
void guess_outgoing_edge_probabilities (basic_block)
void remove_predictions_associated_with_edge (edge)
bool edge_probability_reliable_p (const_edge)
bool br_prob_note_reliable_p (const_rtx)
bool predictable_edge_p (edge)
void init_flow (struct function *)
void debug_bb (basic_block)
basic_block debug_bb_n (int)
void dump_flow_info (FILE *, int)
void expunge_block (basic_block)
void link_block (basic_block, basic_block)
void unlink_block (basic_block)
void compact_blocks (void)
basic_block alloc_block (void)
void alloc_aux_for_blocks (int)
void clear_aux_for_blocks (void)
void free_aux_for_blocks (void)
void alloc_aux_for_edge (edge, int)
void alloc_aux_for_edges (int)
void clear_aux_for_edges (void)
void free_aux_for_edges (void)
void find_unreachable_blocks (void)
bool mark_dfs_back_edges (void)
struct edge_listcreate_edge_list (void)
void free_edge_list (struct edge_list *)
void print_edge_list (FILE *, struct edge_list *)
void verify_edge_list (FILE *, struct edge_list *)
int find_edge_index (struct edge_list *, basic_block, basic_block)
edge find_edge (basic_block, basic_block)
void remove_fake_edges (void)
void remove_fake_exit_edges (void)
void add_noreturn_fake_exit_edges (void)
void connect_infinite_loops_to_exit (void)
int post_order_compute (int *, bool, bool)
basic_block dfs_find_deadend (basic_block)
int inverted_post_order_compute (int *)
int pre_and_rev_post_order_compute (int *, int *, bool)
int dfs_enumerate_from (basic_block, int, bool(*)(const_basic_block, const void *), basic_block *, int, const void *)
void compute_dominance_frontiers (struct bitmap_head_def *)
bitmap compute_idf (bitmap, struct bitmap_head_def *)
rtx block_label (basic_block)
rtx bb_note (basic_block)
bool purge_all_dead_edges (void)
bool purge_dead_edges (basic_block)
bool fixup_abnormal_edges (void)
basic_block force_nonfallthru_and_redirect (edge, basic_block, rtx)
bool contains_no_active_insn_p (const_basic_block)
bool forwarder_block_p (const_basic_block)
bool can_fallthru (basic_block, basic_block)
void emit_barrier_after_bb (basic_block bb)
void find_many_sub_basic_blocks (sbitmap)
void rtl_make_eh_edge (sbitmap, basic_block, rtx)
bool cleanup_cfg (int)
int flow_find_cross_jump (basic_block, basic_block, rtx *, rtx *, enum replace_direction *)
int flow_find_head_matching_sequence (basic_block, basic_block, rtx *, rtx *, int)
bool delete_unreachable_blocks (void)
void update_br_prob_note (basic_block)
bool inside_basic_block_p (const_rtx)
bool control_flow_insn_p (const_rtx)
rtx get_last_bb_insn (basic_block)
enum dom_state dom_info_state (enum cdi_direction)
void set_dom_info_availability (enum cdi_direction, enum dom_state)
bool dom_info_available_p (enum cdi_direction)
void calculate_dominance_info (enum cdi_direction)
void free_dominance_info (enum cdi_direction)
basic_block nearest_common_dominator (enum cdi_direction, basic_block, basic_block)
basic_block nearest_common_dominator_for_set (enum cdi_direction, bitmap)
void set_immediate_dominator (enum cdi_direction, basic_block, basic_block)
basic_block get_immediate_dominator (enum cdi_direction, basic_block)
bool dominated_by_p (enum cdi_direction, const_basic_block, const_basic_block)
vec< basic_blockget_dominated_by (enum cdi_direction, basic_block)
vec< basic_blockget_dominated_by_region (enum cdi_direction, basic_block *, unsigned)
vec< basic_blockget_dominated_to_depth (enum cdi_direction, basic_block, int)
vec< basic_blockget_all_dominated_blocks (enum cdi_direction, basic_block)
void add_to_dominance_info (enum cdi_direction, basic_block)
void delete_from_dominance_info (enum cdi_direction, basic_block)
basic_block recompute_dominator (enum cdi_direction, basic_block)
void redirect_immediate_dominators (enum cdi_direction, basic_block, basic_block)
void iterate_fix_dominators (enum cdi_direction, vec< basic_block >, bool)
void verify_dominators (enum cdi_direction)
basic_block first_dom_son (enum cdi_direction, basic_block)
basic_block next_dom_son (enum cdi_direction, basic_block)
unsigned bb_dom_dfs_in (enum cdi_direction, basic_block)
unsigned bb_dom_dfs_out (enum cdi_direction, basic_block)
edge try_redirect_by_replacing_jump (edge, basic_block, bool)
void break_superblocks (void)
void relink_block_chain (bool)
void update_bb_profile_for_threading (basic_block, int, gcov_type, edge)
void init_rtl_bb_info (basic_block)
void initialize_original_copy_tables (void)
void free_original_copy_tables (void)
void set_bb_original (basic_block, basic_block)
basic_block get_bb_original (basic_block)
void set_bb_copy (basic_block, basic_block)
basic_block get_bb_copy (basic_block)
void set_loop_copy (struct loop *, struct loop *)
struct loopget_loop_copy (struct loop *)
static bool bb_has_eh_pred ()
static bool bb_has_abnormal_pred ()
static edge find_fallthru_edge ()
bool mfb_keep_just (edge)
void rtl_profile_for_bb (basic_block)
void rtl_profile_for_edge (edge)
void default_rtl_profile (void)
gcov_working_set_tfind_working_set (unsigned pct_times_10)
static void check_probability ()
static int combine_probabilities ()
static gcov_type apply_scale ()
static gcov_type apply_probability ()
static int inverse_probability ()

Variables

struct gcov_ctr_summaryprofile_info
edge mfb_kj_edge

Typedef Documentation

typedef int __assert_gimple_bb_smaller_rtl_bb[(int) sizeof(struct rtl_bb_info)-(int) sizeof(struct gimple_bb_info)]
This ensures that struct gimple_bb_info is smaller than
   struct rtl_bb_info, so that inlining the former into basic_block_def
   is the better choice.   
typedef struct ce_if_block ce_if_block_t
Structure to group all of the information to process IF-THEN and
   IF-THEN-ELSE blocks for the conditional execution support.  This
   needs to be in a public file in case the IFCVT macros call
   functions passing the ce_if_block data structure.   
Type we use to hold basic block counters.  Should be at least
   64bit.  Although a counter cannot be negative, we use a signed
   type, because erroneous negative counts can be generated when the
   flow graph is manipulated by various optimizations.  A signed type
   makes those easy to detect.   
In profile.c.   

Enumeration Type Documentation

In dominance.c  
Enumerator:
CDI_DOMINATORS 
CDI_POST_DOMINATORS 
Enumerator:
LAST_CFG_BB_FLAG 
Enumerator:
LAST_CFG_EDGE_FLAG 
enum dom_state
State of dominance information.   
Enumerator:
DOM_NONE 
DOM_NO_FAST_QUERY 
DOM_OK 
What sort of profiling information we have.   
Enumerator:
PROFILE_ABSENT 
PROFILE_GUESSED 
PROFILE_READ 
PROFILE_LAST 
Enumerator:
dir_none 
dir_forward 
dir_backward 
dir_both 

Function Documentation

void add_noreturn_fake_exit_edges ( void  )
This function will add a fake edge between any block which has no
   successors, and the exit block. Some data flow equations require these
   edges to exist.   

References make_single_succ_edge(), and basic_block_def::succs.

Referenced by branch_prob(), cleanup_cfg(), one_pre_gcse_pass(), one_store_motion_pass(), rebuild_frequencies(), and tree_estimate_probability().

void add_to_dominance_info ( enum  cdi_direction,
basic_block   
)

Referenced by create_basic_block().

void alloc_aux_for_edge ( edge  ,
int   
)
void alloc_aux_for_edges ( int  )
basic_block alloc_block ( void  )
Allocate memory for basic_block.   

Referenced by create_basic_block_structure(), create_bb(), and make_new_block().

static gcov_type apply_scale ( )
inlinestatic
Apply scale factor SCALE on frequency or count FREQ. Use this
   interface when potentially scaling up, so that SCALE is not
   constrained to be < REG_BR_PROB_BASE.   

Referenced by copy_bb(), copy_cfg_body(), copy_edges_for_bb(), execute_fixup_cfg(), input_bb(), input_cfg(), ipa_profile(), and merge_profile_summaries().

unsigned bb_dom_dfs_in ( enum  cdi_direction,
basic_block   
)

Referenced by prune_unused_phi_nodes().

unsigned bb_dom_dfs_out ( enum  cdi_direction,
basic_block   
)

Referenced by prune_unused_phi_nodes().

static bool bb_has_abnormal_pred ( )
inlinestatic
static bool bb_has_eh_pred ( )
inlinestatic
void bitmap_intersection_of_preds ( sbitmap  ,
sbitmap ,
basic_block   
)

Referenced by compute_available().

void bitmap_intersection_of_succs ( sbitmap  ,
sbitmap ,
basic_block   
)
In cfganal.c  

Referenced by compute_antinout_edge(), and compute_code_hoist_vbeinout().

void bitmap_union_of_preds ( sbitmap  ,
sbitmap ,
basic_block   
)

Referenced by compute_out(), and link_btr_uses().

void bitmap_union_of_succs ( sbitmap  ,
sbitmap ,
basic_block   
)
bool br_prob_note_reliable_p ( const_rtx  )
void brief_dump_cfg ( FILE *  ,
int   
)

Referenced by gimple_dump_cfg(), and tracer().

edge cached_make_edge ( sbitmap  ,
basic_block  ,
basic_block  ,
int   
)

Referenced by make_edges(), and make_label_edge().

static void check_probability ( )
inlinestatic
Check tha probability is sane.   
void clear_aux_for_edges ( void  )
void clear_bb_flags ( void  )
Clear all basic block flags that do not have to be preserved.   

References basic_block_def::flags.

Referenced by combine_instructions(), duplicate_computed_gotos(), and try_optimize_cfg().

void clear_edges ( void  )
Free the memory associated with the edge structures.   

References free_edge(), basic_block_def::preds, basic_block_def::succs, and vec_safe_truncate().

Referenced by release_function_body().

static int combine_probabilities ( )
inlinestatic
Given PROB1 and PROB2, return PROB1*PROB2/REG_BR_PROB_BASE. 
   Used to combine BB probabilities.   

Referenced by compute_dom_prob_ps(), duplicate_loop_to_header_edge(), remap_edge_change_prob(), and slpeel_tree_peel_loop_to_edge().

void commit_one_edge_insertion ( edge  e)
void compact_blocks ( void  )
Sequentially order blocks and compact the arrays.   

References df, df_compact_blocks(), and basic_block_def::index.

Referenced by analyze_function(), branch_prob(), cleanup_cfg(), cleanup_tree_cfg_noloop(), and relink_block_chain().

void compute_available ( sbitmap avloc,
sbitmap kill,
sbitmap avout,
sbitmap avin 
)
Compute the AVIN and AVOUT vectors from the AVLOC and KILL vectors.
   Return the number of passes we performed to iterate to a solution.   

References basic_block_def::aux, bitmap_clear(), bitmap_intersection_of_preds(), bitmap_ior_and_compl(), bitmap_vector_ones(), clear_aux_for_blocks(), clear_aux_for_edges(), edge_def::dest, free(), basic_block_def::index, basic_block_def::succs, and worklist.

Referenced by compute_cprop_data(), pre_edge_lcm(), and pre_edge_rev_lcm().

void compute_bb_for_insn ( void  )
Records the basic block struct in BLOCK_FOR_INSN for every insn.   

Referenced by schedule_ebbs_init().

void compute_dominance_frontiers ( struct bitmap_head_def )
bitmap compute_idf ( bitmap  ,
struct bitmap_head_def  
)
void connect_infinite_loops_to_exit ( void  )
This function adds a fake edge between any infinite loops to the
   exit block.  Some optimizations require a path from each node to
   the exit node.

   See also Morgan, Figure 3.10, pp. 82-83.

   The current implementation is ugly, not attempting to minimize the
   number of inserted fake edges.  To reduce the number of fake edges
   to insert, add fake edges from _innermost_ loops containing only
   nodes not reachable from the exit block.   

References dfs_find_deadend(), flow_dfs_compute_reverse_add_bb(), flow_dfs_compute_reverse_execute(), flow_dfs_compute_reverse_finish(), flow_dfs_compute_reverse_init(), and make_edge().

Referenced by execute_sink_code(), init_pre(), one_store_motion_pass(), rebuild_frequencies(), and tree_estimate_probability().

bool contains_no_active_insn_p ( const_basic_block  )
basic_block create_basic_block_structure ( rtx  ,
rtx  ,
rtx  ,
basic_block   
)

Referenced by rtl_create_basic_block().

struct edge_list* create_edge_list ( void  )
read
Functions to access an edge list with a vector representation.
   Enough data is kept such that given an index number, the
   pred and succ that edge represents can be determined, or
   given a pred and a succ, its index number can be returned.
   This allows algorithms which consume a lot of memory to
   represent the normally full matrix of edge (pred,succ) with a
   single indexed vector,  edge (EDGE_INDEX (pred, succ)), with no
   wasted space in the client code due to sparse flow graphs.   
This functions initializes the edge list. Basically the entire
   flowgraph is processed, and all edges are assigned a number,
   and the data structure is filled in.   

References edge_list::index_to_edge, edge_list::num_edges, and basic_block_def::succs.

Referenced by branch_prob(), perform_tree_ssa_dce(), pre_edge_lcm(), and pre_edge_rev_lcm().

void debug ( edge_def ref)
void debug ( edge_def ptr)
void debug_bb ( basic_block  )

Referenced by debug_bb_n().

basic_block debug_bb_n ( int  )
void default_rtl_profile ( void  )
void delete_from_dominance_info ( enum  cdi_direction,
basic_block   
)
int dfs_enumerate_from ( basic_block  bb,
int  reverse,
bool(*)(const_basic_block, const void *)  predicate,
basic_block rslt,
int  rslt_max,
const void *  data 
)
Performs dfs search from BB over vertices satisfying PREDICATE;
   if REVERSE, go against direction of edges.  Returns number of blocks
   found and their list in RSLT.  RSLT can contain at most RSLT_MAX items.   

References bitmap_clear(), edge_def::dest, free(), basic_block_def::preds, sbitmap_alloc(), sbitmap_resize(), depth_first_search_dsS::sp, edge_def::src, basic_block_def::succs, and visited.

Referenced by determine_bb_domination_status(), find_path(), get_loop_body_with_size(), new_loop_vec_info(), and thread_through_loop_header().

enum dom_state dom_info_state ( enum  cdi_direction)
bool dominated_by_p ( enum  cdi_direction,
const_basic_block  ,
const_basic_block   
)

Referenced by add_autoinc_candidates(), adjust_debug_stmts_now(), all_non_dominated_preds_marked_p(), analyze_insns_in_loop(), and_comparisons_1(), augment_live_range(), bb_in_region(), bb_loop_header_p(), check_dependency(), check_simple_exit(), collect_phi_def_edges(), combine_btr_defs(), compute_always_reached(), compute_live_loop_exits(), compute_merit(), create_single_entry_edge(), deps_ok_for_redirect_from_bb_to_bb(), do_invalidate(), do_warn_aggressive_loop_optimizations(), dominated_by_forbidden(), dr_indices_valid_in_loop(), dse_possible_dead_store_p(), duplicate_loop_to_header_edge(), expr_invariant_in_region_p(), extract_true_false_args_from_phi(), fill_always_executed_in_1(), fill_sons_in_loop(), find_basis_for_base_expr(), find_basis_for_candidate(), find_control_equiv_block(), find_if_case_2(), find_predicates(), find_subloop_latch_edge_by_ivs(), flow_loop_nodes_find(), get_continuation_for_phi(), get_continuation_for_phi_1(), get_loop_latch_edges(), gimple_duplicate_sese_region(), glb_enum_p(), haifa_find_rgns(), idx_infer_loop_bounds(), if_convertible_bb_p(), infer_loop_bounds_from_undefined(), insert_updated_phi_nodes_for(), insn_dominated_by_p(), instantiate_scev_name(), invariant_for_use(), is_non_loop_exit_postdominating(), iv_get_reaching_def(), just_once_each_iteration_p(), lhs_of_dominating_assert(), mark_aliased_reaching_defs_necessary_1(), may_eliminate_iv(), maybe_record_sincos(), merge_phi_nodes(), move_sese_region_to_fn(), not_dominated_by(), number_of_iterations_exit(), or_comparisons_1(), phi_add_costs(), phivn_valid_p(), predict_paths_for_bb(), predict_paths_leading_to_edge(), propagate_with_phi(), prune_bbs_to_update_dominators(), prune_clobbered_mems(), reachable_at_most_once(), recompute_dominator(), record_estimate(), record_increment(), register_new_assert_for(), remove_edge_and_dominated_blocks(), remove_insns_that_need_bookkeeping(), remove_path(), rewrite_debug_stmt_uses(), rpe_enum_p(), scopdet_basic_block_info(), set_livein_block(), single_incoming_edge_ignoring_loop_edges(), split_data_refs_to_components(), split_edge(), statement_sink_location(), stmt_after_inc_pos(), stmt_dominates_stmt_p(), suitable_component_p(), thread_private_new_memory(), tm_log_add(), transaction_invariant_address_p(), tree_estimate_loop_size(), tree_estimate_probability_bb(), update_debug_stmt(), update_dep_bb(), update_rep_bb(), use_killed_between(), vect_recog_rotate_pattern(), verify_loop_structure(), verify_use(), and warn_uninitialized_vars().

void dump_bb_info ( FILE *  outf,
basic_block  bb,
int  indent,
int  flags,
bool  do_header,
bool  do_footer 
)
Dumps cfg related information about basic block BB to OUTF.
   If HEADER is true, dump things that appear before the instructions
   contained in BB.  If FOOTER is true, dump things that appear after.
   Flags are the TDF_* masks as documented in dumpfile.h.
   NB: With TDF_DETAILS, it is assumed that cfun is available, so
   that maybe_hot_bb_p and probably_never_executed_bb_p don't ICE.   

References bb_loop_depth(), check_bb_profile(), basic_block_def::count, current_function_decl, dump_edge_info(), first, basic_block_def::flags, basic_block_def::frequency, HOST_WIDEST_INT, HOST_WIDEST_INT_PRINT_DEC, indent, basic_block_def::index, maybe_hot_bb_p(), memset(), basic_block_def::next_bb, basic_block_def::preds, basic_block_def::prev_bb, probably_never_executed_bb_p(), and basic_block_def::succs.

Referenced by brief_dump_cfg(), dump_bb(), and print_rtl_with_bb().

void dump_edge_info ( FILE *  ,
edge  ,
int  ,
int   
)
bool edge_probability_reliable_p ( const_edge  )
static bool ei_cond ( )
inlinestatic
Return 1 if we should continue to iterate.  Return 0 otherwise.
   *Edge P is set to the next edge if we are to continue to iterate
   and NULL otherwise.   

Referenced by _succ_iter_cond().

static vec<edge, va_gc>* ei_container ( )
inlinestatic
static bool ei_end_p ( )
inlinestatic
Is the iterator `i' at the end of the sequence?   

Referenced by calc_dfs_tree_nonrec(), calc_idoms(), and remove_reachable_equiv_notes().

static edge_iterator ei_last_1 ( )
inlinestatic
Return an iterator pointing to the last element of an edge
   vector.   
static bool ei_one_before_end_p ( )
inlinestatic
static void ei_prev ( )
inlinestatic
Move the iterator to the previous element.   
static edge_iterator ei_start_1 ( )
inlinestatic
Return an iterator pointing to the start of an edge vector.   
void expunge_block ( basic_block  )

Referenced by delete_basic_block(), and merge_blocks().

edge find_edge ( basic_block  ,
basic_block   
)

Referenced by add_phi_args_after_copy_edge(), associate_equivalences_with_edges(), build_constructors(), bypass_block(), cached_make_edge(), cleanup_empty_eh_merge_phis(), collect_switch_conv_info(), compute_cases_per_edge(), cond_move_process_if_block(), convert_jumps_to_returns(), copy_phis_for_bb(), create_cond_insert_point(), cse_extended_basic_block(), cse_find_path(), disambiguate_multiple_latches(), emit_case_bit_tests(), execute_sm_if_changed(), expand_case(), expand_omp_for_generic(), expand_omp_for_static_chunk(), expand_omp_for_static_nochunk(), find_implicit_sets(), find_switch_asserts(), find_taken_edge_computed_goto(), find_taken_edge_switch_expr(), force_single_succ_latches(), gather_default_values(), get_cases_for_edge(), gimple_flow_call_edges_add(), gimple_lv_adjust_loop_header_phi(), gimple_redirect_edge_and_branch(), is_inconsistent(), loop_latch_edge(), lower_eh_dispatch(), make_edge(), make_edges(), make_forwarder_block(), maybe_optimize_range_tests(), mf_build_check_statement_for(), noce_process_if_block(), phi_translate_1(), predict_loops(), propagate_freq(), prune_bbs_to_update_dominators(), redirect_edge_and_branch_force(), redirect_edge_succ_nodup(), remove_dead_stmt(), remove_forwarder_block(), remove_forwarder_block_with_phi(), rtl_flow_call_edges_add(), same_phi_alternatives(), same_phi_args_p(), same_succ_hash(), set_switch_stmt_execution_predicate(), simplify_switch_using_ranges(), split_edge_bb_loc(), ssa_fix_duplicate_block_edges(), suitable_cond_bb(), tail_duplicate(), thread_across_edge(), translate_vuse_through_block(), tree_transform_and_unroll_loop(), unsplit_eh(), update_destination_phis(), update_ssa_across_abnormal_edges(), verify_eh_dispatch_edge(), verify_loop_structure(), vrp_visit_switch_stmt(), and vt_initialize().

int find_edge_index ( struct edge_list ,
basic_block  ,
basic_block   
)
void find_many_sub_basic_blocks ( sbitmap  )
void find_unreachable_blocks ( void  )
In cfganal.c   
Find unreachable blocks.  An unreachable block will have 0 in
   the reachable bit in block->flags.  A nonzero value indicates the
   block is reachable.   

References edge_def::dest, basic_block_def::flags, free(), basic_block_def::succs, and worklist.

Referenced by delete_unreachable_blocks(), delete_unreachable_blocks_update_callgraph(), and eliminate_unnecessary_stmts().

gcov_working_set_t* find_working_set ( unsigned  pct_times_10)

Referenced by get_hot_bb_threshold().

bool fixup_abnormal_edges ( void  )
This is used by a few passes that emit some instructions after abnormal
   calls, moving the basic block's end, while they in fact do want to emit
   them on the fallthru edge.  Look for abnormal call edges, find backward
   the call in the block and insert the instructions on the edge instead.

   Similarly, handle instructions throwing exceptions internally.

   Return true when instructions have been found and inserted on edges.   

References can_throw_internal(), delete_insn(), find_fallthru_edge(), edge_def::flags, insert_insn_on_edge(), inserted, purge_dead_edges(), and basic_block_def::succs.

Referenced by convert_regs(), lra(), and reload().

int flow_find_cross_jump ( basic_block  bb1,
basic_block  bb2,
rtx f1,
rtx f2,
enum replace_direction dir_p 
)
Look through the insns at the end of BB1 and BB2 and find the longest
   sequence that are either equivalent, or allow forward or backward
   replacement.  Store the first insns for that sequence in *F1 and *F2 and
   return the sequence length.

   DIR_P indicates the allowed replacement direction on function entry, and
   the actual replacement direction on function exit.  If NULL, only equivalent
   sequences are allowed.

   To simplify callers of this function, if the blocks match exactly,
   store the head of the blocks in *F1 and *F2.   

References cc0_rtx, dir_backward, dir_both, dir_forward, dir_none, i1, i2, merge_dir(), merge_memattrs(), merge_notes(), old_insns_match_p(), onlyjump_p(), reg_mentioned_p(), returnjump_p(), sets_cc0_p(), side_effects_p(), simplejump_p(), and walk_to_nondebug_insn().

Referenced by cond_exec_process_if_block(), and try_crossjump_to_edge().

int flow_find_head_matching_sequence ( basic_block  bb1,
basic_block  bb2,
rtx f1,
rtx f2,
int  stop_after 
)
Like flow_find_cross_jump, except start looking for a matching sequence from
   the head of the two blocks.  Do not include jumps at the end.
   If STOP_AFTER is nonzero, stop after finding that many matching
   instructions.   

References cc0_rtx, dir_both, edge_def::flags, i1, i2, merge_memattrs(), merge_notes(), old_insns_match_p(), reg_mentioned_p(), sets_cc0_p(), and basic_block_def::succs.

Referenced by cond_exec_process_if_block(), and try_head_merge_bb().

void free_aux_for_blocks ( void  )
Free data allocated in block_aux_obstack and clear AUX pointers
   of all blocks.   

References block_aux_obstack, and clear_aux_for_blocks().

Referenced by compute_branch_probabilities(), delete_worklist(), estimate_bb_frequencies(), fini_pre(), one_code_hoisting_pass(), reg_to_stack(), and vt_finalize().

void free_aux_for_edges ( void  )
Free data allocated in edge_aux_obstack and clear AUX pointers
   of all edges.   

References clear_aux_for_edges(), and edge_aux_obstack.

Referenced by branch_prob(), estimate_bb_frequencies(), and tree_ssa_lim_finalize().

unsigned int free_bb_for_insn ( void  )
Release the basic_block_for_insn array.   

References get_insns().

Referenced by rest_of_clean_state(), and rest_of_pass_free_cfg().

vec<basic_block> get_dominated_by_region ( enum cdi_direction  dir,
basic_block region,
unsigned  n_region 
)
Returns the list of basic blocks that are immediately dominated (in
   direction DIR) by some block between N_REGION ones stored in REGION,
   except for blocks in the REGION itself.   

References dom, first_dom_son(), basic_block_def::flags, next_dom_son(), and vNULL.

Referenced by gimple_duplicate_sese_region(), gimple_duplicate_sese_tail(), and move_sese_region_to_fn().

vec<basic_block> get_dominated_to_depth ( enum  cdi_direction,
basic_block  ,
int   
)
struct loop* get_loop_copy ( struct loop )
read

Referenced by duplicate_block().

void gimple_predict_edge ( edge  ,
enum  br_predictor,
int   
)
bool gimple_predicted_by_p ( const_basic_block  ,
enum  br_predictor 
)
void gt_ggc_mx ( edge_def e)
Garbage collection and PCH support for edge_def.   

Referenced by gt_ggc_mx().

void gt_pch_nx ( edge_def e)

Referenced by gt_pch_nx().

void gt_pch_nx ( edge_def e,
gt_pointer_operator  ,
void *   
)
void guess_outgoing_edge_probabilities ( basic_block  )
void init_flow ( struct function )
In cfg.c   

Referenced by init_empty_tree_cfg_for_function().

bool inside_basic_block_p ( const_rtx  )
static int inverse_probability ( )
inlinestatic
int inverted_post_order_compute ( int *  )
void iterate_fix_dominators ( enum cdi_direction  dir,
vec< basic_block bbs,
bool  conservative 
)
Recompute dominance information for basic blocks in the set BBS.  The
   function assumes that the immediate dominators of all the other blocks
   in CFG are correct, and that there are no unreachable blocks.

   If CONSERVATIVE is true, we additionally assume that all the ancestors of
   a block of BBS in the current dominance tree dominate it.   

References add_edge(), bitmap_set_bit(), CDI_DOMINATORS, pointer_map< T >::contains(), vertex::data, determine_dominators_for_sons(), dom, dom_convert_dir_to_idx(), free(), free_graph(), g, graphds_domtree(), pointer_map< T >::insert(), map, graph::n_vertices, new_graph(), basic_block_def::preds, prune_bbs_to_update_dominators(), recompute_dominator(), root_of_dom_tree(), set_immediate_dominator(), edge_def::src, and graph::vertices.

Referenced by emit_case_bit_tests(), gen_inbound_check(), gimple_duplicate_sese_region(), gimple_duplicate_sese_tail(), make_forwarder_block(), remove_edge_and_dominated_blocks(), remove_path(), unroll_loop_runtime_iterations(), and update_dominators_in_loop().

edge make_edge ( basic_block  ,
basic_block  ,
int   
)

Referenced by add_test(), branch_prob(), cached_make_edge(), cfg_layout_split_edge(), combine_blocks(), connect_infinite_loops_to_exit(), construct_exit_block(), construct_init_block(), copy_cfg_body(), copy_edges_for_bb(), create_cond_insert_point(), create_edge_and_update_destination_phis(), create_empty_if_region_on_edge(), create_empty_loop_on_edge(), create_parallel_loop(), dw2_build_landing_pads(), emit_case_bit_tests(), execute_sm_if_changed(), expand_complex_div_wide(), expand_gimple_cond(), expand_gimple_tailcall(), expand_omp_atomic_pipeline(), expand_omp_for_generic(), expand_omp_for_init_counts(), expand_omp_for_static_chunk(), expand_omp_for_static_nochunk(), expand_omp_sections(), expand_omp_simd(), expand_omp_taskreg(), expand_parallel_call(), expand_thunk(), expand_transaction(), extract_omp_for_update_vars(), find_bb_boundaries(), fix_crossing_conditional_branches(), fix_up_crossing_landing_pad(), force_nonfallthru_and_redirect(), gen_inbound_check(), gimple_divmod_fixed_value(), gimple_duplicate_sese_tail(), gimple_flow_call_edges_add(), gimple_ic(), gimple_mod_pow2(), gimple_mod_subtract(), gimple_split_edge(), gimple_stringop_fixed_value(), init_lowered_empty_function(), input_cfg(), ipa_uninstrument_transaction(), lower_resx(), lv_adjust_loop_entry_edge(), make_abnormal_goto_edges(), make_cond_expr_edges(), make_edges(), make_eh_dispatch_edges(), make_eh_edges(), make_gimple_asm_edges(), make_gimple_switch_edges(), make_goto_expr_edges(), make_single_succ_edge(), mf_build_check_statement_for(), move_sese_region_to_fn(), peep2_attempt(), rtl_flow_call_edges_add(), sched_create_recovery_edges(), shrink_wrap_one_built_in_call(), sjlj_emit_dispatch_table(), slpeel_add_loop_guard(), split_bb_make_tm_edge(), split_function(), thread_prologue_and_epilogue_insns(), tree_transform_and_unroll_loop(), unloop_loops(), unroll_loop_runtime_iterations(), and unswitch_loop().

bool mark_dfs_back_edges ( void  )
Mark the back edges in DFS traversal.
   Return nonzero if a loop (natural or otherwise) is present.
   Inspired by Depth_First_Search_PP described in:

     Advanced Compiler Design and Implementation
     Steven Muchnick
     Morgan Kaufmann, 1997

   and heavily borrowed from pre_and_rev_post_order_compute.   

References bitmap_bit_p(), bitmap_clear(), bitmap_set_bit(), edge_def::dest, ei_edge(), ei_next(), ei_one_before_end_p(), edge_def::flags, free(), basic_block_def::index, sbitmap_alloc(), sbitmap_free(), depth_first_search_dsS::sp, edge_def::src, stack, basic_block_def::succs, and visited.

Referenced by analyze_function(), bypass_conditional_jumps(), compute_antic(), draw_cfg_edges(), estimate_bb_frequencies(), execute_split_functions(), execute_vrp(), identify_jump_threads(), insert_backedge_copies(), perform_tree_ssa_dce(), reg_to_stack(), reorder_basic_blocks(), tracer(), tree_ssa_dominator_optimize(), and variable_tracking_main_1().

bool maybe_hot_bb_p ( struct function ,
const_basic_block   
)
bool maybe_hot_edge_p ( edge  )
bool mfb_keep_just ( edge  )
basic_block nearest_common_dominator_for_set ( enum  cdi_direction,
bitmap   
)
bool optimize_edge_for_size_p ( edge  )
bool optimize_edge_for_speed_p ( edge  )
bool optimize_loop_nest_for_size_p ( struct loop )
bool optimize_loop_nest_for_speed_p ( struct loop )
int post_order_compute ( int *  post_order,
bool  include_entry_exit,
bool  delete_unreachable 
)
Compute reverse top sort order.  This is computing a post order
   numbering of the graph.  If INCLUDE_ENTRY_EXIT is true, then
   ENTRY_BLOCK and EXIT_BLOCK are included.  If DELETE_UNREACHABLE is
   true, unreachable blocks are deleted.   

References bitmap_bit_p(), bitmap_clear(), bitmap_set_bit(), count, delete_basic_block(), edge_def::dest, ei_edge(), ei_next(), ei_one_before_end_p(), free(), basic_block_def::index, basic_block_def::next_bb, sbitmap_alloc(), sbitmap_free(), depth_first_search_dsS::sp, edge_def::src, stack, basic_block_def::succs, tidy_fallthru_edges(), and visited.

Referenced by df_analyze(), extend_rgns(), and rest_of_handle_df_initialize().

int pre_and_rev_post_order_compute ( int *  pre_order,
int *  rev_post_order,
bool  include_entry_exit 
)
Compute the depth first search order and store in the array
  PRE_ORDER if nonzero, marking the nodes visited in VISITED.  If
  REV_POST_ORDER is nonzero, return the reverse completion number for each
  node.  Returns the number of nodes visited.  A depth first search
  tries to get as far away from the starting point as quickly as
  possible.

  pre_order is a really a preorder numbering of the graph.
  rev_post_order is really a reverse postorder numbering of the graph.

References bitmap_bit_p(), bitmap_clear(), bitmap_set_bit(), edge_def::dest, ei_edge(), ei_next(), ei_one_before_end_p(), free(), basic_block_def::index, sbitmap_alloc(), sbitmap_free(), depth_first_search_dsS::sp, edge_def::src, stack, basic_block_def::succs, and visited.

Referenced by add_scope_conflicts(), cse_main(), draw_cfg_nodes_no_loops(), estimate_function_body_sizes(), find_assert_locations(), flow_loops_find(), init_alias_analysis(), init_reassoc(), init_scc_vn(), regrename_analyze(), and vt_find_locations().

struct edge_list* pre_edge_lcm ( int  n_exprs,
sbitmap transp,
sbitmap avloc,
sbitmap antloc,
sbitmap kill,
sbitmap **  insert,
sbitmap **  del 
)
read
In lcm.c  
Given local properties TRANSP, ANTLOC, AVOUT, KILL return the insert and
   delete vectors for edge based LCM.  Returns an edgelist which is used to
   map the insert vector to what edge an expression should be inserted on.   

References bitmap_vector_clear(), compute_antinout_edge(), compute_available(), compute_earliest(), compute_insert_delete(), compute_laterin(), create_edge_list(), dump_bitmap_vector(), dump_file, edge_list, edge_list::num_edges, print_edge_list(), sbitmap_vector_alloc(), sbitmap_vector_free(), and verify_edge_list().

Referenced by compute_pre_data(), and optimize_mode_switching().

struct edge_list* pre_edge_rev_lcm ( int  n_exprs,
sbitmap transp,
sbitmap st_avloc,
sbitmap st_antloc,
sbitmap kill,
sbitmap **  insert,
sbitmap **  del 
)
read
Given local properties TRANSP, ST_AVLOC, ST_ANTLOC, KILL return the
   insert and delete vectors for edge based reverse LCM.  Returns an
   edgelist which is used to map the insert vector to what edge
   an expression should be inserted on.   

References bitmap_vector_clear(), compute_antinout_edge(), compute_available(), compute_farthest(), compute_nearerout(), compute_rev_insert_delete(), create_edge_list(), dump_bitmap_vector(), dump_file, edge_list, edge_list::num_edges, print_edge_list(), sbitmap_vector_alloc(), sbitmap_vector_free(), and verify_edge_list().

Referenced by one_store_motion_pass().

void predict_edge_def ( edge  e,
enum br_predictor  predictor,
enum prediction  taken 
)
bool predictable_edge_p ( edge  )
void print_edge_list ( FILE *  ,
struct edge_list  
)

Referenced by pre_edge_lcm(), and pre_edge_rev_lcm().

bool purge_all_dead_edges ( void  )
Search all basic blocks for potentially dead edges and purge them.  Return
   true if some edge has been eliminated.   

References purge_dead_edges().

Referenced by combine_instructions(), gimple_expand_cfg(), ira(), rest_of_handle_cse_after_global_opts(), and rest_of_handle_postreload().

void redirect_immediate_dominators ( enum cdi_direction  dir,
basic_block  bb,
basic_block  to 
)
Redirect all edges pointing to BB to TO.   

References basic_block_def::dom, dom_convert_dir_to_idx(), DOM_NO_FAST_QUERY, DOM_OK, et_set_father(), et_split(), and et_node::son.

Referenced by merge_blocks(), and split_block().

void relink_block_chain ( bool  )
void remove_edge_raw ( edge  )

Referenced by remove_edge().

void remove_fake_edges ( void  )
This routine will remove all fake edges from the flow graph.  If
   we remove all fake successors, it will automatically remove all
   fake predecessors.   

References basic_block_def::next_bb, and remove_fake_predecessors().

Referenced by branch_prob().

void remove_fake_exit_edges ( void  )
This routine will remove all fake edges to the EXIT_BLOCK.   

References remove_fake_predecessors().

Referenced by cleanup_cfg(), do_pre(), execute_sink_code(), one_pre_gcse_pass(), one_store_motion_pass(), rebuild_frequencies(), and tree_estimate_probability().

void remove_predictions_associated_with_edge ( edge  )

Referenced by remove_edge_raw().

void rtl_make_eh_edge ( sbitmap  ,
basic_block  ,
rtx   
)
void rtl_predict_edge ( edge  ,
enum  br_predictor,
int   
)
bool rtl_predicted_by_p ( const_basic_block  ,
enum  br_predictor 
)
void rtl_profile_for_edge ( edge  )

Referenced by optimize_mode_switching().

void scale_bbs_frequencies_gcov_type ( basic_block bbs,
int  nbbs,
gcov_type  num,
gcov_type  den 
)
Multiply all frequencies of basic blocks in array BBS of length NBBS
   by NUM/DEN, in gcov_type arithmetic.  More accurate than previous
   function but considerably slower.   

References count, edge_def::count, basic_block_def::count, frequency, and basic_block_def::frequency.

Referenced by gimple_duplicate_sese_region(), and gimple_duplicate_sese_tail().

void set_bb_copy ( basic_block  ,
basic_block   
)

Referenced by duplicate_block().

void set_bb_original ( basic_block  ,
basic_block   
)

Referenced by duplicate_block().

void set_dom_info_availability ( enum  cdi_direction,
enum  dom_state 
)

Referenced by verify_ssa().

void set_immediate_dominator ( enum cdi_direction  dir,
basic_block  bb,
basic_block  dominated_by 
)
static bool single_pred_p ( )
inlinestatic
Returns true if BB has precisely one predecessor.   

Referenced by blocks_in_phiopt_order(), bound_difference(), bypass_conditional_jumps(), canonicalize_loop_closed_ssa(), cfg_layout_can_merge_blocks_p(), check_final_bb(), collect_switch_conv_info(), combine_instructions(), commit_one_edge_insertion(), compute_complex_ancestor_jump_func(), cond_exec_find_if_block(), copy_loop_headers(), copyprop_hardreg_forward(), create_block_for_bookkeeping(), create_empty_if_region_on_edge(), cse_find_path(), duplicate_computed_gotos(), eliminate_temp_copies(), emit_case_bit_tests(), emit_mfence_after_loop(), execute_sm_if_changed(), expand_omp_sections(), expand_phi_nodes(), extract_new_fences_from(), extract_true_false_args_from_phi(), find_comparisons_in_bb(), find_if_case_1(), find_if_case_2(), find_implicit_sets(), find_return_bb(), find_traces_1_round(), fixup_reorder_chain(), gimple_can_merge_blocks_p(), gimple_find_edge_insert_loc(), gimple_make_forwarder_block(), insert_aux(), ip_normal_pos(), ipa_analyze_indirect_call_uses(), is_cfg_nonregular(), is_non_loop_exit_postdominating(), maybe_move_debug_stmts_to_successors(), maybe_optimize_range_tests(), maybe_register_def(), noce_find_if_block(), phi_result_unknown_predicate(), potentially_threadable_block(), propagate_threaded_block_debug_into(), prune_bbs_to_update_dominators(), remove_forwarder_block(), remove_path(), rtl_can_merge_blocks(), scev_const_prop(), scopdet_basic_block_info(), set_location_for_edge(), should_duplicate_loop_header_p(), simplify_using_entry_checks(), simplify_using_initial_conditions(), simplify_using_initial_values(), single_pred_cond_non_loop_exit(), sink_clobbers(), split_critical_edges(), split_region_for_bb(), thread_around_empty_block(), thread_single_edge(), transform_statements(), tree_optimize_tail_calls_1(), tree_ssa_ifcombine_bb(), tree_ssa_phiopt_worker(), try_crossjump_to_edge(), try_optimize_cfg(), try_simplify_condjump(), unsplit_eh(), use_killed_between(), vect_analyze_loop_form(), vect_update_ivs_after_vectorizer(), and vt_initialize().

static basic_block single_succ ( )
inlinestatic
Returns the single successor block of basic block BB.  Aborts
   if BB does not have exactly one successor.   

Referenced by bb_next_bb(), build_and_add_sum(), build_scops(), cfg_layout_can_merge_blocks_p(), cleanup_tree_cfg_bb(), collect_switch_conv_info(), compute_antic_aux(), compute_partial_antic_aux(), cond_exec_find_if_block(), create_block_for_bookkeeping(), create_empty_loop_on_edge(), dead_or_predicable(), determine_parallel_type(), dom_opt_leave_block(), dse_step1(), duplicate_computed_gotos(), eliminate_tail_call(), eliminate_unnecessary_stmts(), expand_gimple_basic_block(), expand_omp_atomic(), expand_omp_atomic_fetch_op(), expand_omp_atomic_load(), expand_omp_atomic_pipeline(), expand_omp_atomic_store(), expand_omp_for_generic(), expand_omp_for_static_chunk(), expand_omp_for_static_nochunk(), expand_omp_sections(), expand_omp_simd(), expand_omp_taskreg(), extract_new_fences_from(), find_control_dependence(), find_tail_calls(), find_traces_1_round(), fix_up_crossing_landing_pad(), force_nonfallthru(), gate_tm_init(), get_all_loop_exits(), get_ws_args_for(), gimple_can_merge_blocks_p(), gimple_verify_flow_info(), haifa_find_rgns(), if_region_set_false_region(), independent_of_stmt_p(), instrument_func_entry(), ipa_analyze_indirect_call_uses(), ipa_tm_scan_irr_function(), ipa_tm_transform_clone(), make_edges(), maybe_optimize_range_tests(), merge_if_block(), merge_phi_nodes(), noce_find_if_block(), outgoing_edges_match(), predicate_bbs(), redirect_edge_and_branch_force(), remap_ssa_name(), rewrite_debug_stmt_uses(), rotate_loop(), rtl_can_merge_blocks(), scopdet_basic_block_info(), slsr_process_phi(), split_edge(), split_function(), split_region_for_bb(), sra_ipa_reset_debug_stmts(), suitable_cond_bb(), thread_prologue_and_epilogue_insns(), thread_through_loop_header(), tm_region_init(), transform_to_exit_first_loop(), tree_forwarder_block_p(), tree_optimize_tail_calls_1(), tree_ssa_dominator_optimize(), tree_ssa_phiprop(), try_crossjump_to_edge(), try_forward_edges(), try_optimize_cfg(), try_simplify_condjump(), verify_loop_structure(), and warn_uninitialized_vars().

static edge single_succ_edge ( )
inlinestatic
Returns the single successor edge of basic block BB.  Aborts if
   BB does not have exactly one successor.   

Referenced by add_test(), branch_prob(), build_constructors(), canonicalize_loop_closed_ssa(), cfg_layout_can_merge_blocks_p(), cleanup_control_expr_graph(), cleanup_empty_eh(), combine_predictions_for_insn(), commit_one_edge_insertion(), compute_outgoing_frequencies(), compute_partial_antic_aux(), cond_exec_find_if_block(), cond_move_process_if_block(), copy_bb_and_scalar_dependences(), create_empty_if_region_on_edge(), create_empty_loop_on_edge(), create_if_region_on_edge(), create_parallel_loop(), create_preheader(), create_single_exit_edge(), cse_find_path(), decrease_profile(), doloop_modify(), dom_opt_leave_block(), duplicate_computed_gotos(), eliminate_tail_call(), emit_return_for_exit(), estimate_bb_frequencies(), expand_gimple_basic_block(), expand_omp_atomic_pipeline(), expand_omp_for_static_chunk(), expand_omp_sections(), expand_omp_simd(), expand_omp_single(), expand_omp_synch(), expand_omp_taskreg(), expand_thunk(), final_range_test_p(), find_cond_trap(), find_if_case_1(), find_if_case_2(), find_tail_calls(), find_traces_1_round(), finish_eh_generation(), fix_up_fall_thru_edges(), gather_default_values(), gimple_can_merge_blocks_p(), gimple_duplicate_sese_tail(), gimple_gen_ic_func_profiler(), gimple_lv_add_condition_to_bb(), gimple_merge_blocks(), gimple_verify_flow_info(), gsi_commit_edge_inserts(), infinite_empty_loop_p(), initialize_parameter_reductions(), insert_insn_end_basic_block(), limit_scops(), loop_version(), lower_eh_dispatch(), lower_resx(), lv_adjust_loop_entry_edge(), make_edges(), merge_if_block(), merge_phi_nodes(), move_sese_in_condition(), noce_find_if_block(), noce_process_if_block(), optimize_mode_switching(), optimize_stack_restore(), outgoing_edges_match(), purge_dead_edges(), remove_forwarder_block(), remove_forwarder_block_with_phi(), rotate_loop(), rtl_can_merge_blocks(), rtl_split_edge(), separate_decls_in_region(), sink_clobbers(), sjlj_emit_function_enter(), slpeel_tree_duplicate_loop_to_edge_cfg(), slpeel_tree_peel_loop_to_edge(), split_edge(), split_loop_exit_edge(), split_region_for_bb(), thread_prologue_and_epilogue_insns(), thread_single_edge(), thread_through_loop_header(), tidy_fallthru_edges(), transform_to_exit_first_loop(), translate_clast_assignment(), translate_clast_for_loop(), tree_estimate_probability_bb(), tree_forwarder_block_p(), tree_function_versioning(), tree_optimize_tail_calls_1(), tree_ssa_dominator_optimize(), try_crossjump_to_edge(), try_forward_edges(), try_optimize_cfg(), try_redirect_by_replacing_jump(), unloop(), unroll_loop_runtime_iterations(), unsplit_eh(), unswitch_loop(), update_cfg_for_uncondjump(), update_parameter_components(), and value_replacement().

static bool single_succ_p ( )
inlinestatic
Returns true if BB has precisely one successor.   

Referenced by add_labels_and_missing_jumps(), branch_prob(), cfg_layout_can_merge_blocks_p(), cleanup_control_expr_graph(), cleanup_tree_cfg_bb(), collect_switch_conv_info(), combine_predictions_for_insn(), commit_one_edge_insertion(), compute_antic_aux(), compute_outgoing_frequencies(), compute_partial_antic_aux(), cond_exec_find_if_block(), contains_no_active_insn_p(), convert_jumps_to_returns(), create_add_on_incoming_edge(), create_block_for_bookkeeping(), create_preheader(), cse_find_path(), dead_or_predicable(), decrease_profile(), dom_opt_leave_block(), dse_step1(), duplicate_computed_gotos(), expand_gimple_basic_block(), extract_new_fences_from(), final_range_test_p(), find_if_case_1(), find_if_case_2(), find_tail_calls(), find_traces_1_round(), force_single_succ_latches(), get_bb_type(), gimple_can_merge_blocks_p(), gimple_expand_cfg(), gimple_find_edge_insert_loc(), gimple_verify_flow_info(), haifa_find_rgns(), infinite_empty_loop_p(), insert_insn_end_basic_block(), ipa_analyze_indirect_call_uses(), is_non_loop_exit_postdominating(), limit_scops(), merge_if_block(), noce_find_if_block(), outgoing_edges_match(), phi_result_unknown_predicate(), potentially_threadable_block(), predicate_bbs(), purge_dead_edges(), remap_ssa_name(), rewrite_debug_stmt_uses(), rotate_loop(), rtl_can_merge_blocks(), rtl_tidy_fallthru_edge(), scopdet_basic_block_info(), should_duplicate_loop_header_p(), sink_clobbers(), split_region_for_bb(), sra_ipa_reset_debug_stmts(), thread_around_empty_block(), thread_prologue_and_epilogue_insns(), thread_through_loop_header(), tidy_fallthru_edges(), tree_estimate_probability_bb(), tree_forwarder_block_p(), tree_ssa_dominator_optimize(), tree_ssa_phiopt_worker(), try_forward_edges(), try_optimize_cfg(), try_redirect_by_replacing_jump(), unsplit_eh(), verify_loop_structure(), and walk_to_nondebug_insn().

basic_block split_edge_and_insert ( edge  ,
rtx   
)
edge unchecked_make_edge ( basic_block  ,
basic_block  ,
int   
)
void update_bb_profile_for_threading ( basic_block  bb,
int  edge_frequency,
gcov_type  count,
edge  taken_edge 
)
An edge originally destinating BB of FREQUENCY and COUNT has been proved to
   leave the block by TAKEN_EDGE.  Update profile of BB such that edge E can be
   redirected to destination of TAKEN_EDGE.

   This function may leave the profile inconsistent in the case TAKEN_EDGE
   frequency or count is believed to be lower than FREQUENCY or COUNT
   respectively.   

References count, edge_def::count, basic_block_def::count, edge_def::dest, dump_file, ei_next(), ei_safe_edge(), basic_block_def::frequency, basic_block_def::index, prob, edge_def::probability, edge_def::src, and basic_block_def::succs.

Referenced by thread_block(), thread_single_edge(), and try_forward_edges().

void verify_edge_list ( FILE *  ,
struct edge_list  
)

Referenced by pre_edge_lcm(), and pre_edge_rev_lcm().


Variable Documentation

edge mfb_kj_edge
In cfgloopmanip.c.   
A callback for make_forwarder block, to redirect all edges except for
   MFB_KJ_EDGE to the entry part.  E is the edge for that we should decide
   whether to redirect it.   

Referenced by mfb_keep_just(), and thread_through_loop_header().