GCC Middle and Back End API Reference
|
Go to the source code of this file.
|
extern |
Return the NOTE_INSN_BASIC_BLOCK of BB.
References as_a(), BB_HEAD, gcc_assert, LABEL_P, NEXT_INSN(), and NOTE_INSN_BASIC_BLOCK_P.
Referenced by _succ_iter_cond(), create_basic_block_structure(), delete_insn(), emit_common_heads_for_components(), inherit_in_ebb(), move_insn_for_shrink_wrap(), and split_live_ranges_for_shrink_wrap().
|
extern |
Return the label in the head of basic block BLOCK. Create one if it doesn't exist.
References as_a(), BB_HEAD, cfun, emit_label_before(), EXIT_BLOCK_PTR_FOR_FN, gen_label_rtx(), LABEL_P, and NULL.
Referenced by add_labels_and_missing_jumps(), add_test(), block_has_preserve_label(), create_eh_forwarder_block(), dead_or_predicable(), doloop_modify(), doloop_optimize(), fix_crossing_conditional_branches(), fix_up_fall_thru_edges(), force_nonfallthru_and_redirect(), label_for_bb(), label_rtx_for_bb(), patch_jump_insn(), rtl_lv_add_condition_to_bb(), try_optimize_cfg(), try_redirect_by_replacing_jump(), try_simplify_condjump(), and unroll_loop_runtime_iterations().
|
extern |
Splits superblocks.
References bitmap_clear(), bitmap_set_bit, cfun, find_many_sub_basic_blocks(), basic_block_def::flags, FOR_EACH_BB_FN, get_insns(), basic_block_def::index, last_basic_block_for_fn, and rebuild_jump_labels().
Referenced by finish_eh_generation().
|
extern |
Return nonzero if we can reach target from src by falling through.
FIXME: Make this a cfg hook, the result is only valid in cfgrtl mode.
References active_insn_p(), BB_END, BB_HEAD, cfun, EXIT_BLOCK_PTR_FOR_FN, FOR_EACH_EDGE, next_active_insn(), basic_block_def::next_bb, NULL, basic_block_def::succs, and tablejump_p().
Referenced by expand_gimple_basic_block(), expand_gimple_tailcall(), fixup_reorder_chain(), try_redirect_by_replacing_jump(), and try_simplify_condjump().
|
extern |
Finalize the changes: reorder insn list according to the sequence specified by aux pointers, enter compensation code, rebuild scope forest.
References CDI_DOMINATORS, checking_verify_flow_info(), delete_dead_jumptables(), fixup_fallthru_exit_predecessor(), fixup_reorder_chain(), force_one_exit_fallthru(), free_dominance_info(), get_insns(), rebuild_jump_labels(), reload_completed, rtl_register_cfg_hooks(), targetm, and verify_insn_chain().
Referenced by reorder_loops(), and thread_prologue_and_epilogue_insns().
|
extern |
Main entry point to this module - initialize the datastructures for CFG layout changes. It keeps LOOPS up-to-date if not null. FLAGS is a set of additional flags to pass to cleanup_cfg().
References BLOCK_FOR_INSN(), cfg_layout_rtl_register_cfg_hooks(), cleanup_cfg(), CLEANUP_CFGLAYOUT, crtl, basic_block_def::flags, gcc_assert, initialize_original_copy_tables(), rtx_insn_list::insn(), rtx_insn_list::next(), nonlocal_goto_handler_labels, and record_effective_endpoints().
Referenced by reorder_loops(), and thread_prologue_and_epilogue_insns().
|
extern |
Update the CFG for all queued instructions.
References cfun, checking_verify_flow_info(), commit_one_edge_insertion(), currently_expanding_to_rtl, ENTRY_BLOCK_PTR_FOR_FN, EXIT_BLOCK_PTR_FOR_FN, fixup_partitions(), FOR_BB_BETWEEN, FOR_EACH_EDGE, rebuild_jump_labels_chain(), and basic_block_def::succs.
Referenced by bypass_conditional_jumps(), eliminate_partially_redundant_loads(), emit_insn_at_entry(), finish_eh_generation(), insert_prologue_epilogue_for_components(), ira(), ira_emit(), lra(), one_store_motion_pass(), pre_gcse(), reload(), rtl_flow_call_edges_add(), and thread_prologue_and_epilogue_insns().
|
extern |
Update the CFG for the instructions queued on edge E.
References BB_END, BB_HEAD, cfun, currently_expanding_to_rtl, delete_insn(), emit_barrier_after(), emit_insn_after_noloc(), emit_insn_before_noloc(), ENTRY_BLOCK_PTR_FOR_FN, EXIT_BLOCK_PTR_FOR_FN, find_sub_basic_blocks(), gcc_assert, get_last_insn(), insns, JUMP_P, LABEL_P, last, NEXT_INSN(), NOTE_INSN_BASIC_BLOCK_P, NULL, PREV_INSN(), prev_nonnote_insn(), rebuild_jump_labels_chain(), returnjump_p(), simplejump_p(), single_pred_p(), single_succ_edge(), single_succ_p(), and split_edge().
Referenced by commit_edge_insertions().
|
extern |
Records the basic block struct in BLOCK_FOR_INSN for every insn.
References BB_END, BB_HEAD, BLOCK_FOR_INSN(), cfun, end(), FOR_EACH_BB_FN, and NEXT_INSN().
|
extern |
Return true if the block has no effect and only forwards control flow to its single destination.
References BB_END, BB_HEAD, cfun, ENTRY_BLOCK_PTR_FOR_FN, EXIT_BLOCK_PTR_FOR_FN, flow_active_insn_p(), INSN_P, JUMP_P, NEXT_INSN(), simplejump_p(), single_succ_edge(), and single_succ_p().
Referenced by doloop_optimize(), and forwarder_block_p().
|
extern |
Create a new basic block consisting of the instructions between HEAD and END inclusive. This function is designed to allow fast BB construction - reuses the note and basic block struct in BB_NOTE, if any and do not grow BASIC_BLOCK chain and should be used directly only by CFG construction code. END can be NULL in to create new empty basic block before HEAD. Both END and HEAD can be NULL to create basic block at the end of INSN chain. AFTER is the basic block we should be put after.
References alloc_block(), basic_block_def::aux, BB_END, BB_HEAD, bb_note(), BB_SET_PARTITION, BB_UNPARTITIONED, cfun, df_bb_refs_record(), emit_note_after(), emit_note_before(), end(), basic_block_def::flags, get_last_insn(), basic_block_def::index, init_rtl_bb_info(), LABEL_P, last_basic_block_for_fn, link_block(), NEXT_INSN(), NOTE_BASIC_BLOCK, NULL, PREV_INSN(), reorder_insns_nobb(), SET_BASIC_BLOCK_FOR_FN, and update_bb_for_insn().
Referenced by rtl_create_basic_block().
|
extern |
Define control flow data structures for the CFG. Copyright (C) 2014-2024 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see <http://www.gnu.org/licenses/>.
Delete INSN by patching it out.
References as_a(), BB_END, BB_HEAD, bb_note(), BLOCK_FOR_INSN(), can_delete_label_p(), rtx_insn::deleted(), df_insn_delete(), dyn_cast(), find_reg_note(), gcc_assert, GET_NUM_ELEM, i, INSN_P, JUMP_LABEL, JUMP_P, LABEL_NAME, LABEL_NUSES, LABEL_P, NEXT_INSN(), nonlocal_goto_handler_labels, NOTE_DELETED_LABEL_NAME, NOTE_INSN_BASIC_BLOCK_P, NOTE_KIND, NOTE_P, NULL, NULL_RTX, PUT_CODE, remove_insn(), remove_node_from_insn_list(), remove_note(), reorder_insns_nobb(), RTVEC_ELT, rtx_insn::set_deleted(), table, and XEXP.
Referenced by add_test(), attempt_change(), find_comparison_dom_walker::before_dom_children(), calculate_needs_all_insns(), cfg_layout_merge_blocks(), cfg_layout_redirect_edge_and_branch(), cleanup_barriers(), combine_and_move_insns(), combine_stack_adjustments_for_block(), commit_one_edge_insertion(), copyprop_hardreg_forward_1(), cprop_jump(), cse_cc_succs(), dead_or_predicable(), delete_address_reloads_1(), delete_caller_save_insns(), delete_dead_jumptables(), delete_dead_store_insn(), delete_insn_and_edges(), delete_insn_chain(), delete_output_reload(), delete_redundant_insns_1(), delete_related_insns(), delete_vta_debug_insn(), doloop_modify(), dse_step5(), duplicate_insn_chain(), eliminate_partially_redundant_load(), expand_gimple_tailcall(), final_1(), final_scan_insn_1(), find_and_remove_re(), find_bb_boundaries(), find_cond_trap(), fix_crossing_unconditional_branches(), fixup_abnormal_edges(), fixup_reorder_chain(), hoist_code(), instantiate_virtual_regs_in_insn(), lra_final_code_change(), maybe_cleanup_end_of_block(), merge_blocks_move_predecessor_nojumps(), merge_blocks_move_successor_nojumps(), merge_if_block(), move_insn_for_shrink_wrap(), move_invariant_reg(), move_unallocated_pseudos(), pre_delete(), reemit_insn_block_notes(), reemit_marker_as_note(), reload(), reload_as_needed(), reload_combine_recognize_const_pattern(), reload_combine_recognize_pattern(), reload_cse_move2add(), replace_store_insn(), resolve_shift_zext(), resolve_simple_move(), resolve_use(), rtl_tidy_fallthru_edge(), split_iv(), try_eliminate_compare(), try_merge_compare(), try_optimize_cfg(), try_split(), and update_cfg_for_uncondjump().
Like delete_insn but also purge dead edges from BB. Return true if any edges are eliminated.
References BB_END, BLOCK_FOR_INSN(), DEBUG_INSN_P, delete_insn(), NEXT_INSN(), NONDEBUG_INSN_P, and purge_dead_edges().
Referenced by cse_cc_succs(), cse_insn(), delete_noop_moves(), delete_trivially_dead_insns(), delete_unmarked_insns(), discover_loops(), reload_cse_simplify(), split_all_insns(), and split_all_insns_noflow().
Unlink a chain of insns between START and FINISH, leaving notes that must be paired. If CLEAR_BB is true, we set bb field for insns that cannot be removed to NULL.
References as_a(), can_delete_note_p(), delete_insn(), rtx_insn::deleted(), NOTE_P, NULL, PREV_INSN(), and set_block_for_insn().
Referenced by cond_exec_process_if_block(), peep2_attempt(), rtl_delete_block(), rtl_merge_blocks(), rtl_tidy_fallthru_edge(), try_head_merge_bb(), and try_redirect_by_replacing_jump().
|
extern |
References ALL, ANY_RETURN_P, as_a(), BARRIER_P, cfun, DEBUG_BIND_INSN_P, DEBUG_INSN_P, delete_insn(), emit_barrier(), emit_copy_of_insn_after(), emit_note(), emit_note_copy(), FOR_EACH_SUBRTX, gcc_assert, gcc_unreachable, GET_CODE, get_last_insn(), get_new_clique(), hash_map< KeyId, Value, Traits >::get_or_insert(), handled_component_p(), INSN_VAR_LOCATION_DECL, JUMP_LABEL, JUMP_P, last, maybe_copy_prologue_epilogue_insn(), MEM_EXPR, MEM_P, MR_DEPENDENCE_CLIQUE, NEXT_INSN(), NOTE_KIND, NULL_RTX, loop::owned_clique, PATTERN(), set_mem_expr(), TREE_CODE, TREE_OPERAND, and unshare_expr().
Referenced by cfg_layout_duplicate_bb(), and expand_asm_stmt().
|
extern |
Emit a barrier after BB, into the footer if we are in CFGLAYOUT mode.
References BARRIER_P, BB_END, BB_FOOTER, current_ir_type(), emit_barrier_after(), gcc_assert, IR_RTL_CFGLAYOUT, IR_RTL_CFGRTL, NEXT_INSN(), SET_NEXT_INSN(), SET_PREV_INSN(), and unlink_insn_chain().
Referenced by add_labels_and_missing_jumps(), create_eh_forwarder_block(), fix_crossing_conditional_branches(), fix_up_fall_thru_edges(), force_nonfallthru_and_redirect(), handle_simple_exit(), local_cprop_pass(), maybe_duplicate_computed_goto(), one_cprop_pass(), try_combine(), try_optimize_cfg(), and try_shrink_wrapping().
|
extern |
Return RTX to emit after when we want to emit code on the entry of function.
References BB_HEAD, cfun, ENTRY_BLOCK_PTR_FOR_FN, get_insns(), n_basic_blocks_for_fn, and NUM_FIXED_BLOCKS.
Referenced by expand_builtin_apply_args(), expand_builtin_saveregs(), and get_arg_pointer_save_area().
|
extern |
Add all BBs reachable from entry via hot paths into the SET.
References BB_PARTITION, cfun, ENTRY_BLOCK_PTR_FOR_FN, FOR_EACH_EDGE, basic_block_def::succs, and worklist.
Referenced by find_partition_fixes(), and find_rarely_executed_basic_blocks_and_crossing_edges().
|
extern |
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 BARRIER_P, BB_END, BB_HEAD, CALL_P, can_throw_internal(), cfun, delete_insn(), find_fallthru_edge(), FOR_EACH_BB_FN, FOR_EACH_EDGE, insert_insn_on_edge(), INSN_P, NEXT_INSN(), NONJUMP_INSN_P, NOTE_P, NULL, NULL_RTX, PREV_INSN(), purge_dead_edges(), set_block_for_insn(), SET_NEXT_INSN(), SET_PREV_INSN(), rtx_insn::set_undeleted(), and basic_block_def::succs.
|
extern |
Perform cleanup on the hot/cold bb partitioning after optimization passes that modify the cfg.
References BB_HEAD, BB_PARTITION, BB_UNPARTITIONED, cfun, crtl, current_ir_type(), delete_unreachable_blocks(), find_partition_fixes(), fixup_new_cold_bb(), FOR_EACH_BB_FN, gcc_assert, IR_RTL_CFGRTL, basic_block_def::next_bb, NULL, basic_block_def::prev_bb, PREV_INSN(), SET_NEXT_INSN(), and SET_PREV_INSN().
Referenced by commit_edge_insertions(), duplicate_computed_gotos(), if_convert(), rest_of_handle_thread_prologue_and_epilogue(), and try_optimize_cfg().
|
extern |
Like force_nonfallthru below, but additionally performs redirection Used by redirect_edge_and_branch_force. JUMP_LABEL is used only when redirecting to the EXIT_BLOCK, it is either ret_rtx or simple_return_rtx, indicating which kind of returnjump to create. It should be NULL otherwise.
References add_reg_note(), profile_probability::always(), any_condjump_p(), as_a(), ASM_OPERANDS_LABEL, ASM_OPERANDS_LABEL_LENGTH, b, BB_COPY_PARTITION, BB_END, BB_HEAD, block_label(), cfun, basic_block_def::count, count, create_basic_block(), df_mark_solutions_dirty(), EDGE_COUNT, ei_next(), ei_safe_edge(), ei_start, emit_barrier_after_bb(), emit_jump_insn_after_setloc(), ENTRY_BLOCK_PTR_FOR_FN, EXIT_BLOCK_PTR_FOR_FN, extract_asm_operands(), find_reg_note(), fixup_partition_crossing(), basic_block_def::flags, profile_probability::from_reg_br_prob_note(), gcc_assert, i, edge_iterator::index, JUMP_LABEL, JUMP_P, LABEL_NUSES, make_edge(), make_single_succ_edge(), NEXT_INSN(), NULL, NULL_RTX, PATTERN(), redirect_edge_pred(), redirect_edge_succ_nodup(), redirect_jump(), remove_note(), ret_rtx, set_return_jump_label(), simple_return_rtx, basic_block_def::succs, table, tablejump_p(), targetm, unchecked_make_edge(), vec_safe_push(), XEXP, and XINT.
Referenced by find_if_case_1(), fixup_reorder_chain(), rtl_force_nonfallthru(), and rtl_redirect_edge_and_branch_force().
|
extern |
Likewise, but protect loop latches, headers and preheaders.
FIXME: Make this a cfg hook.
References contains_no_active_insn_p(), current_loops, EDGE_SUCC, loop::header, and basic_block_def::loop_father.
Referenced by add_forwarder_blocks(), find_if_case_1(), notice_new_block(), relink_block_chain(), and update_forwarder_flag().
|
extern |
Release the basic_block_for_insn array.
References BARRIER_P, BLOCK_FOR_INSN(), get_insns(), NEXT_INSN(), and NULL.
Referenced by rest_of_clean_state().
|
extern |
Get the last insn associated with block BB (that includes barriers and tablejumps after BB).
References BARRIER_P, BB_END, end(), next_nonnote_nondebug_insn_bb(), NULL, table, and tablejump_p().
Referenced by cond_exec_process_if_block(), rtl_delete_block(), rtl_split_edge(), and try_optimize_cfg().
|
extern |
References gcc_assert, ggc_cleared_alloc(), basic_block_def::basic_block_il_dependent::head_, basic_block_def::il, NULL, basic_block_def::basic_block_il_dependent::rtl, and basic_block_def::basic_block_il_dependent::x.
Referenced by construct_init_block(), create_basic_block_structure(), function_reader::create_function(), expand_gimple_basic_block(), and function_reader::parse_block().
Queue instructions for insertion on an edge between two basic blocks. The new instructions and basic blocks (if any) will not appear in the CFG until commit_edge_insertions is called. If there are already queued instructions on the edge, PATTERN is appended to them.
References EDGE_CRITICAL_P, emit_insn(), end_sequence(), gcc_assert, get_insns(), NULL_RTX, push_to_sequence(), and start_sequence().
Referenced by bypass_block(), eliminate_partially_redundant_load(), emit_insn_at_entry(), emit_moves(), fixup_abnormal_edges(), insert_part_to_rtx_on_edge(), insert_partition_copy_on_edge(), insert_prologue_epilogue_for_components(), insert_rtx_to_part_on_edge(), insert_store(), insert_value_copy_on_edge(), ira(), pre_edge_insert(), rtl_flow_call_edges_add(), sjlj_emit_function_enter(), and thread_prologue_and_epilogue_insns().
Like insert_insn_on_edge, but if there are already queued instructions on the edge, PATTERN is prepended to them.
References EDGE_CRITICAL_P, emit_insn(), end_sequence(), gcc_assert, get_insns(), and start_sequence().
Referenced by expand_asm_stmt().
|
extern |
Like dump_function_to_file, but for RTL. Print out dataflow information for the start of each basic block. FLAGS are the TDF_* masks documented in dumpfile.h.
References BARRIER_P, BB_END, BB_HEAD, cfun, df, df_dump_bottom(), df_dump_insn_bottom(), df_dump_insn_top(), df_dump_start(), df_dump_top(), dump_bb_info(), dump_flags, dump_insn_slim(), EDGE_COUNT, end(), find_fallthru_edge(), FOR_EACH_BB_REVERSE_FN, free(), gcc_assert, get_max_uid(), basic_block_def::index, INSN_UID(), max_uid, NEXT_INSN(), NONDEBUG_INSN_P, NOTE_P, NULL, NULL_RTX, print_rtl_single(), print_rtx_head, PROP_cfg, basic_block_def::succs, TDF_BLOCKS, TDF_DETAILS, and TDF_SLIM.
Referenced by execute_function_dump(), if_convert(), and rtl_verify_edges().
|
extern |
Search all basic blocks for potentially dead edges and purge them. Return true if some edge has been eliminated.
References cfun, FOR_EACH_BB_FN, and purge_dead_edges().
Referenced by combine_instructions(), indirect_jump_optimize(), rest_of_handle_cse_after_global_opts(), rest_of_handle_dse(), and rest_of_handle_thread_prologue_and_epilogue().
|
extern |
Assume that the preceding pass has possibly eliminated jump instructions or converted the unconditional jumps. Eliminate the edges from CFG. Return true if any edges are eliminated.
References profile_probability::always(), any_condjump_p(), b, BB_END, BB_HEAD, BRANCH_EDGE, CALL_P, can_nonlocal_goto(), can_throw_internal(), cfun, DEBUG_INSN_P, df_set_bb_dirty(), dump_file, EDGE_COMPLEX, EDGE_COUNT, ei_next(), ei_safe_edge(), ei_start, EXIT_BLOCK_PTR_FOR_FN, FALLTHRU_EDGE, find_reg_equal_equiv_note(), find_reg_note(), FOR_EACH_EDGE, profile_probability::from_reg_br_prob_note(), gcc_assert, basic_block_def::index, JUMP_LABEL, JUMP_P, may_trap_p(), NONJUMP_INSN_P, NOTE_P, NULL, PATTERN(), PREV_INSN(), remove_edge(), remove_note(), returnjump_p(), SIBLING_CALL_P, simplejump_p(), single_succ_edge(), single_succ_p(), basic_block_def::succs, XEXP, and XINT.
Referenced by find_comparison_dom_walker::before_dom_children(), cprop_jump(), cse_extended_basic_block(), delete_insn_and_edges(), find_bb_boundaries(), fixup_abnormal_edges(), peep2_attempt(), purge_all_dead_edges(), and update_cfg_for_uncondjump().
|
extern |
Link the basic blocks in the correct order, compacting the basic block queue while at it. If STAY_IN_CFGLAYOUT_MODE is false, this function also clears the basic block header and footer fields. This function is usually called after a pass (e.g. tracer) finishes some transformations while in cfglayout mode. The required sequence of the basic blocks is in a linked list along the bb->aux field. This functions re-links the basic block prev_bb and next_bb pointers accordingly, and it compacts and renumbers the blocks. FIXME: This currently works only for RTL, but the only RTL-specific bits are the STAY_IN_CFGLAYOUT_MODE bits. The tracer pass was moved to GIMPLE a long time ago, but it doesn't relink the basic block chain. It could do that (to give better initial RTL) if this function is made IR-agnostic (and moved to cfganal.cc or cfg.cc while at it).
References basic_block_def::aux, BB_FOOTER, BB_HEAD, BB_HEADER, cfun, compact_blocks(), dump_file, ENTRY_BLOCK_PTR_FOR_FN, EXIT_BLOCK_PTR_FOR_FN, FOR_ALL_BB_FN, forwarder_block_p(), free_original_copy_tables(), get_bb_original(), basic_block_def::index, initialize_original_copy_tables(), LABEL_P, basic_block_def::next_bb, NULL, NUM_FIXED_BLOCKS, original_copy_tables_initialized_p(), and basic_block_def::prev_bb.
Referenced by fixup_reorder_chain(), and reorder_basic_blocks().
|
extern |
Attempt to perform edge redirection by replacing possibly complex jump instruction by unconditional jump or removing jump completely. This can apply only if all edges now point to the same block. The parameters and return values are equivalent to redirect_edge_and_branch.
References profile_probability::always(), as_a(), BARRIER_P, BB_END, BB_HEAD, BB_PARTITION, block_label(), can_fallthru(), cfun, delete_insn_chain(), dump_file, EDGE_COUNT, EDGE_SUCC, emit_barrier_after(), emit_jump_insn_after_noloc(), EXIT_BLOCK_PTR_FOR_FN, gcc_assert, basic_block_def::index, INSN_UID(), JUMP_LABEL, LABEL_NUSES, NEXT_INSN(), next_nonnote_nondebug_insn(), NULL, onlyjump_p(), PREV_INSN(), redirect_edge_succ(), redirect_jump(), reload_completed, remove_barriers_from_footer(), remove_edge(), SET_NEXT_INSN(), SET_PREV_INSN(), side_effects_p(), simplejump_p(), single_set(), single_succ_edge(), single_succ_p(), basic_block_def::succs, table, tablejump_p(), targetm, and update_bb_for_insn_chain().
Referenced by cfg_layout_merge_blocks(), cfg_layout_redirect_edge_and_branch(), rtl_redirect_edge_and_branch(), and try_optimize_cfg().
Cut the insns from FIRST to LAST out of the insns stream.
References last, NEXT_INSN(), NULL, PREV_INSN(), set_first_insn(), set_last_insn(), SET_NEXT_INSN(), and SET_PREV_INSN().
Referenced by cfg_layout_delete_block(), cfg_layout_duplicate_bb(), cfg_layout_merge_blocks(), emit_barrier_after_bb(), record_effective_endpoints(), and reload_as_needed().
|
extern |
Update BLOCK_FOR_INSN of insns in BB to BB, and notify df of the change.
References BB_END, BB_HEAD, and update_bb_for_insn_chain().
Referenced by construct_exit_block(), construct_init_block(), create_basic_block_structure(), emit_to_new_bb_before(), expand_gimple_basic_block(), expand_gimple_cond(), and expand_gimple_tailcall().
|
extern |
Update the branch probability of BB if a REG_BR_PROB is present.
References BB_END, BRANCH_EDGE, find_reg_note(), JUMP_P, NULL_RTX, REG_NOTES, XEXP, and XINT.
Referenced by add_test(), dead_or_predicable(), find_many_sub_basic_blocks(), fix_up_fall_thru_edges(), fixup_reorder_chain(), force_edge_cold(), try_crossjump_to_edge(), try_forward_edges(), try_optimize_cfg(), try_simplify_condjump(), and unroll_loop_constant_iterations().
|
extern |
Delete the unconditional jump INSN and adjust the CFG correspondingly. Note that the INSN should be deleted *after* removing dead edges, so that the kept edge is the fallthrough edge for a (set (pc) (pc)) but not for a (set (pc) (label_ref FOO)).
References BARRIER_P, BB_END, BB_FOOTER, BLOCK_FOR_INSN(), current_ir_type(), delete_insn(), EDGE_COUNT, emit_barrier_after(), find_fallthru_edge(), gcc_assert, IR_RTL_CFGLAYOUT, LABEL_P, NEXT_INSN(), next_nonnote_nondebug_insn(), PREV_INSN(), purge_dead_edges(), SET_NEXT_INSN(), SET_PREV_INSN(), single_succ_edge(), and basic_block_def::succs.
Referenced by try_combine().