GCC Middle and Back End API Reference
cfgbuild.c File 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 ()

Enumeration Type Documentation

enum state
States of basic block as seen by find_many_sub_basic_blocks.   
Enumerator:
BLOCK_NEW 
BLOCK_ORIGINAL 
BLOCK_TO_SPLIT 

Function Documentation

static void compute_outgoing_frequencies ( basic_block  )
static
static void compute_outgoing_frequencies ( )
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 void find_bb_boundaries ( basic_block  )
static
static void find_bb_boundaries ( )
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 void make_edges ( basic_block  ,
basic_block  ,
int   
)
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 void make_edges ( void  )
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 void make_label_edge ( sbitmap  ,
basic_block  ,
rtx  ,
int   
)
static

Referenced by make_edges(), and rtl_make_eh_edge().

static void make_label_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 void mark_tablejump_edge ( )
static
static void purge_dead_tablejump_edges ( )
static
void rtl_make_eh_edge ( )