GCC Middle and Back End API Reference
basic_block_def Struct Reference

#include <basic-block.h>

Collaboration diagram for basic_block_def:

Data Structures

union  basic_block_il_dependent

Data Fields

vec< edge, va_gc > * preds
vec< edge, va_gc > * succs
PTR aux
struct looploop_father
struct et_nodedom [2]
basic_block prev_bb
basic_block next_bb
union
basic_block_def::basic_block_il_dependent 
il
int flags
int index
gcov_type count
int frequency
int discriminator

Detailed Description

   A basic block is a sequence of instructions with only one entry and
   only one exit.  If any one of the instructions are executed, they
   will all be executed, and in sequence from first to last.

   There may be COND_EXEC instructions in the basic block.  The
   COND_EXEC *instructions* will be executed -- but if the condition
   is false the conditionally executed *expressions* will of course
   not be executed.  We don't consider the conditionally executed
   expression (which might have side-effects) to be in a separate
   basic block because the program counter will always be at the same
   location after the COND_EXEC instruction, regardless of whether the
   condition is true or not.

   Basic blocks need not start with a label nor end with a jump insn.
   For example, a previous basic block may just "conditionally fall"
   into the succeeding basic block, and the last basic block need not
   end with a jump insn.  Block 0 is a descendant of the entry block.

   A basic block beginning with two labels cannot have notes between
   the labels.

   Data for jump tables are stored in jump_insns that occur in no
   basic block even though these insns can follow or precede insns in
   basic blocks.  
   Basic block information indexed by block number.  

Field Documentation

int basic_block_def::discriminator
     The discriminator for this block.  The discriminator distinguishes
     among several basic blocks that share a common locus, allowing for
     more accurate sample-based profiling.  

Referenced by next_discriminator_for_locus().

struct et_node* basic_block_def::dom[2]
     The dominance and postdominance information node.  

Referenced by free_dominance_info(), get_dominated_by_region(), and get_dominated_to_depth().

int basic_block_def::frequency
union basic_block_def::basic_block_il_dependent basic_block_def::il
int basic_block_def::index
     The index of this block.  

Referenced by add_branch_dependences(), add_exit_phis(), add_forwarder_blocks(), add_label_notes(), associate_equivalences_with_edges(), bb_seen_p(), better_edge_p(), cfg_blocks_empty_p(), check_forbidden_calls(), code_motion_path_driver_cleanup(), compact_blocks(), compute_available(), compute_code_hoist_vbeinout(), compute_dominance_frontiers_1(), compute_partial_antic_aux(), compute_trg_info(), cond_exec_find_if_block(), cond_move_process_if_block(), connect_traces(), convert_jumps_to_returns(), copy_bb(), copy_original_table_clear(), correct_negative_edge_counts(), coverage_compute_profile_id(), cprop_into_successor_phis(), create_check_block_twin(), create_fixup_graph(), create_rdg_edges_for_scalar(), del_scev_info(), df_chain_create_bb_process_use(), df_chain_remove_problem(), df_get_bb_info(), df_grow_bb_info(), df_live_bb_local_compute(), df_live_confluence_n(), df_live_finalize(), df_live_free(), df_live_transfer_function(), df_live_verify_solution_end(), df_live_verify_solution_start(), df_lr_finalize(), df_lr_free(), df_lr_transfer_function(), df_mark_solutions_dirty(), df_set_bb_dirty(), df_set_regs_ever_live(), df_word_lr_bb_local_compute(), dfs_enumerate_from(), dfs_find_deadend(), disqualify_ops_if_throwing_stmt(), draw_cfg_node_succ_edges(), dse_optimize_stmt(), dse_step3(), dump_hwloops(), dump_live_info(), dump_split_point(), dump_tm_memopt_sets(), dump_var_map(), dup_block_and_redirect(), ebb_add_remove_insn(), emit_partition_copy(), emit_return_into_block(), fill_sons_in_loop(), find_group(), find_implicit_sets(), find_insn_before_first_wild_read(), find_max_flow(), find_partition_fixes(), find_refs_for_sm(), find_same_succ(), find_traces_1_round(), fixup_noreturn_call(), fixup_partitions(), flow_loops_cfg_dump(), free_code_hoist_mem(), free_cprop_mem(), free_original_copy_tables(), gate_ud_dce(), gather_region_statistics(), get_common_info(), get_rank(), initialize_flags_in_bb(), insert_rtx_to_part_on_edge(), insert_store(), instantiate_scev_1(), instrument_edges(), invalidate_memory(), ipa_tm_create_version(), ipa_tm_scan_calls_transaction(), ipa_uninstrument_transaction(), link_roots(), loe_visit_block(), loop_exit_at_end_p(), make_edges(), make_pass_df_finish(), mark_def_interesting(), mark_last_stmt_necessary(), maybe_instrument_assignment(), merge_blocks_move_predecessor_nojumps(), merge_blocks_move_successor_nojumps(), move_op_on_enter(), new_btr_user(), optimize_stmt(), outgoing_edges_match(), output_eh_regions(), partition_is_global(), post_order_compute(), pre_and_rev_post_order_compute(), predict_paths_for_bb(), prescan_insns_for_dce(), print_edge_list(), print_global_statistics(), print_hard_reg_set(), print_loop(), print_rtl_with_bb(), print_worklist(), process_insert_insn(), prune_expressions(), read_profile_edge_counts(), record_insns(), remap_decl_1(), remove_insn_from_stream(), reorder_loops(), rewrite_use_compare(), rgn_setup_region(), rtl_verify_bb_pointers(), rtl_verify_edges(), same_phi_alternatives_1(), scan_one_insn(), scan_stores_nospill(), set_var_live_on_entry(), setup_loop_tree_level(), single_def_use_dom_walker::single_def_use_dom_walker(), split_function(), strlen_optimize_stmt(), thread_prologue_and_epilogue_insns(), thread_through_normal_block(), tm_memopt_accumulate_memops(), unchecked_make_edge(), union_groups(), va_list_ptr_read(), valid_in_sets(), value_replacement(), verify_edge_list(), verify_expr_location_1(), verify_ssa(), and vop_phi().

vec<edge, va_gc>* basic_block_def::succs

The documentation for this struct was generated from the following file: