GCC Middle and Back End API Reference
|
Enumerations | |
enum | state { BLOCK_NEW = 0, BLOCK_ORIGINAL, BLOCK_TO_SPLIT } |
Functions | |
static void | make_edges (basic_block, basic_block, int) |
static void | make_label_edge (sbitmap, basic_block, rtx, int) |
static void | find_bb_boundaries (basic_block) |
static void | compute_outgoing_frequencies (basic_block) |
bool | inside_basic_block_p () |
bool | control_flow_insn_p () |
static void | make_label_edge () |
void | rtl_make_eh_edge () |
static void | make_edges () |
static void | mark_tablejump_edge () |
static void | purge_dead_tablejump_edges () |
static void | find_bb_boundaries () |
static void | compute_outgoing_frequencies () |
void | find_many_sub_basic_blocks () |
enum state |
|
static |
Referenced by find_many_sub_basic_blocks().
|
static |
Assume that frequency of basic block B is known. Compute frequencies and probabilities of outgoing edges.
References apply_probability(), edge_def::count, basic_block_def::count, find_reg_note(), edge_def::flags, guess_outgoing_edge_probabilities(), edge_def::probability, single_succ_edge(), single_succ_p(), and basic_block_def::succs.
bool control_flow_insn_p | ( | ) |
Return true if INSN may cause control flow transfer, so it should be last in the basic block.
References can_nonlocal_goto(), can_throw_internal(), function::can_throw_non_call_exceptions, cfun, and find_reg_note().
|
static |
Referenced by find_many_sub_basic_blocks().
|
static |
Scan basic block BB for possible BB boundaries inside the block and create new basic blocks in the progress.
References control_flow_insn_p(), edge_def::dest, inside_basic_block_p(), make_edge(), prev_nonnote_insn_bb(), purge_dead_edges(), purge_dead_tablejump_edges(), remove_edge(), split_block(), table, and tablejump_p().
void find_many_sub_basic_blocks | ( | ) |
Assume that some pass has inserted labels or control flow instructions within a basic block. Split basic blocks as needed and create edges.
References bitmap_bit_p(), BLOCK_NEW, BLOCK_ORIGINAL, BLOCK_TO_SPLIT, compute_outgoing_frequencies(), edge_def::count, basic_block_def::count, find_bb_boundaries(), basic_block_def::frequency, basic_block_def::index, make_edges(), basic_block_def::next_bb, basic_block_def::preds, and PROFILE_ABSENT.
bool inside_basic_block_p | ( | ) |
Return true if insn is something that should be contained inside basic block.
|
static |
@verbatim Control flow graph building code for GNU compiler.
Copyright (C) 1987-2013 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/.
Referenced by find_many_sub_basic_blocks().
|
static |
Identify the edges going out of basic blocks between MIN and MAX, inclusive, that have their states set to BLOCK_NEW or BLOCK_TO_SPLIT. UPDATE_P should be nonzero if we are updating CFG and zero if we are building CFG from scratch.
References bitmap_clear(), bitmap_set_bit(), BLOCK_ORIGINAL, cached_make_edge(), can_nonlocal_goto(), function::can_throw_non_call_exceptions, function::cfg, cfun, computed_jump_p(), edge_def::dest, extract_asm_operands(), find_edge(), find_reg_note(), edge_def::flags, basic_block_def::index, make_edge(), make_label_edge(), control_flow_graph::max_jumptable_ents, basic_block_def::next_bb, pc_rtx, returnjump_p(), rtl_make_eh_edge(), sbitmap_alloc(), sbitmap_free(), basic_block_def::succs, and tablejump_p().
|
static |
Referenced by make_edges(), and rtl_make_eh_edge().
|
static |
Create an edge between two basic blocks. FLAGS are auxiliary information about the edge that is accumulated between calls.
Create an edge from a basic block to a label.
References cached_make_edge().
|
static |
Referenced by purge_dead_tablejump_edges().
|
static |
References edge_def::dest, ei_next(), ei_safe_edge(), edge_def::flags, mark_tablejump_edge(), pc_rtx, remove_edge(), and basic_block_def::succs.
Referenced by find_bb_boundaries().
void rtl_make_eh_edge | ( | ) |
Create the edges generated by INSN in REGION.
References get_eh_landing_pad_from_rtx(), label_rtx(), eh_landing_pad_d::landing_pad, make_label_edge(), and eh_landing_pad_d::post_landing_pad.