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_exit_phis(), add_label_notes(), associate_equivalences_with_edges(), bb_seen_p(), better_edge_p(), cfg_blocks_empty_p(), check_forbidden_calls(), compact_blocks(), compute_available(), compute_code_hoist_vbeinout(), compute_dominance_frontiers_1(), compute_partial_antic_aux(), cond_exec_find_if_block(), cond_move_process_if_block(), connect_traces(), copy_bb(), copy_original_table_clear(), correct_negative_edge_counts(), coverage_compute_profile_id(), cprop_into_successor_phis(), 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_live_info(), dump_split_point(), dump_tm_memopt_sets(), dump_var_map(), emit_partition_copy(), 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(), 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(), mark_def_interesting(), mark_last_stmt_necessary(), maybe_instrument_assignment(), merge_blocks_move_predecessor_nojumps(), merge_blocks_move_successor_nojumps(), 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_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(), rewrite_use_compare(), 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().

basic_block basic_block_def::prev_bb

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