osprey-gcc/gcc/tree-cfg.c File Reference

#include "config.h"
#include "system.h"
#include "coretypes.h"
#include "tm.h"
#include "tree.h"
#include "rtl.h"
#include "tm_p.h"
#include "hard-reg-set.h"
#include "basic-block.h"
#include "output.h"
#include "errors.h"
#include "flags.h"
#include "function.h"
#include "expr.h"
#include "ggc.h"
#include "langhooks.h"
#include "diagnostic.h"
#include "tree-flow.h"
#include "timevar.h"
#include "tree-dump.h"
#include "tree-pass.h"
#include "toplev.h"
#include "except.h"
#include "cfgloop.h"
#include "cfglayout.h"
#include "hashtab.h"
#include "gt-tree-cfg.h"

Include dependency graph for tree-cfg.c:

Go to the source code of this file.

Data Types

type  cfg_stats_d
type  rus_data
type  ssa_name_map_entry

Defines

#define CHECK_OP(N, MSG)

Functions/Subroutines

static GTY (())
static basic_block create_bb (void *, void *, basic_block)
static void create_block_annotation (basic_block)
static void free_blocks_annotations (void)
static void clear_blocks_annotations (void)
static void make_blocks (tree)
static void factor_computed_gotos (void)
static void make_edges (void)
static void make_ctrl_stmt_edges (basic_block)
static void make_exit_edges (basic_block)
static void make_cond_expr_edges (basic_block)
static void make_switch_expr_edges (basic_block)
static void make_goto_expr_edges (basic_block)
static edge tree_redirect_edge_and_branch (edge, basic_block)
static edge tree_try_redirect_by_replacing_jump (edge, basic_block)
static void split_critical_edges (void)
static bool remove_fallthru_edge (VEC(edge)*)
static bool stmt_starts_bb_p (tree, tree)
static int tree_verify_flow_info (void)
static void tree_make_forwarder_block (edge)
static bool tree_forwarder_block_p (basic_block, bool)
static void tree_cfg2vcg (FILE *)
static void tree_merge_blocks (basic_block, basic_block)
static bool tree_can_merge_blocks_p (basic_block, basic_block)
static void remove_bb (basic_block)
static bool cleanup_control_flow (void)
static bool cleanup_control_expr_graph (basic_block, block_stmt_iterator)
static edge find_taken_edge_cond_expr (basic_block, tree)
static edge find_taken_edge_switch_expr (basic_block, tree)
static tree find_case_label_for_value (tree, tree)
static bool phi_alternatives_equal (basic_block, edge, edge)
static bool cleanup_forwarder_blocks (void)
static void build_tree_cfg (tree *tp)
static void execute_build_cfg (void)
static void fold_cond_expr_cond (void)
static hashval_t edge_to_cases_hash (const void *p)
static int edge_to_cases_eq (const void *p1, const void *p2)
static void edge_to_cases_cleanup (void *p)
static void start_recording_case_labels (void)
static bool recording_case_labels_p (void)
static void end_recording_case_labels (void)
static void record_switch_edge (edge e, tree case_label)
static tree get_cases_for_edge (edge e, tree t)
basic_block label_to_block (tree dest)
bool cleanup_tree_cfg (void)
static void update_eh_label (struct eh_region *region)
static tree main_block_label (tree label)
void cleanup_dead_labels (void)
void group_case_labels (void)
static void remove_useless_stmts_1 (tree *, struct rus_data *)
static bool remove_useless_stmts_warn_notreached (tree stmt)
static void remove_useless_stmts_cond (tree *stmt_p, struct rus_data *data)
static void remove_useless_stmts_tf (tree *stmt_p, struct rus_data *data)
static void remove_useless_stmts_tc (tree *stmt_p, struct rus_data *data)
static void remove_useless_stmts_bind (tree *stmt_p, struct rus_data *data)
static void remove_useless_stmts_goto (tree *stmt_p, struct rus_data *data)
static void remove_useless_stmts_label (tree *stmt_p, struct rus_data *data)
static void update_call_expr_flags (tree call)
void notice_special_calls (tree t)
void clear_special_calls (void)
static void remove_useless_stmts (void)
static void cfg_remove_useless_stmts_bb (basic_block bb)
void cfg_remove_useless_stmts (void)
static void remove_phi_nodes_and_edges_for_unreachable_block (basic_block bb)
 VEC (tree)
edge find_taken_edge (basic_block bb, tree val)
void tree_dump_bb (basic_block bb, FILE *outf, int indent)
void debug_tree_bb (basic_block bb)
basic_block debug_tree_bb_n (int n)
void debug_tree_cfg (int flags)
void dump_tree_cfg (FILE *file, int flags)
void dump_cfg_stats (FILE *file)
void debug_cfg_stats (void)
bool is_ctrl_stmt (tree t)
bool is_ctrl_altering_stmt (tree t)
bool computed_goto_p (tree t)
bool simple_goto_p (tree expr)
bool stmt_ends_bb_p (tree t)
void disband_implicit_edges (void)
void delete_tree_cfg_annotations (void)
tree first_stmt (basic_block bb)
tree last_stmt (basic_block bb)
treelast_stmt_ptr (basic_block bb)
tree last_and_only_stmt (basic_block bb)
void set_bb_for_stmt (tree t, basic_block bb)
block_stmt_iterator bsi_for_stmt (tree stmt)
void bsi_insert_before (block_stmt_iterator *i, tree t, enum bsi_iterator_update m)
void bsi_insert_after (block_stmt_iterator *i, tree t, enum bsi_iterator_update m)
void bsi_remove (block_stmt_iterator *i)
void bsi_move_after (block_stmt_iterator *from, block_stmt_iterator *to)
void bsi_move_before (block_stmt_iterator *from, block_stmt_iterator *to)
void bsi_move_to_bb_end (block_stmt_iterator *from, basic_block bb)
void bsi_replace (const block_stmt_iterator *bsi, tree stmt, bool preserve_eh_info)
static bool tree_find_edge_insert_loc (edge e, block_stmt_iterator *bsi, basic_block *new_bb)
void bsi_commit_edge_inserts (void)
void bsi_commit_one_edge_insert (edge e, basic_block *new_bb)
void bsi_insert_on_edge (edge e, tree stmt)
basic_block bsi_insert_on_edge_immediate (edge e, tree stmt)
static void reinstall_phi_args (edge new_edge, edge old_edge)
static basic_block tree_split_edge (edge edge_in)
static bool has_label_p (basic_block bb, tree label)
static tree verify_expr (tree *tp, int *walk_subtrees, void *data ATTRIBUTE_UNUSED)
static bool verify_stmt (tree stmt, bool last_in_block)
static bool tree_node_can_be_shared (tree t)
static tree verify_node_sharing (tree *tp, int *walk_subtrees, void *data)
void verify_stmts (void)
static bool has_abnormal_incoming_edge_p (basic_block bb)
static bool remove_forwarder_block (basic_block bb, basic_block **worklist)
static void remove_forwarder_block_with_phi (basic_block bb)
static void merge_phi_nodes (void)
static bool gate_merge_phi (void)
tree tree_block_label (basic_block bb)
static basic_block tree_redirect_edge_and_branch_force (edge e, basic_block dest)
static basic_block tree_split_block (basic_block bb, void *stmt)
static bool tree_move_block_after (basic_block bb, basic_block after)
static bool tree_can_duplicate_bb_p (basic_block bb ATTRIBUTE_UNUSED)
static basic_block tree_duplicate_bb (basic_block bb)
void add_phi_args_after_copy_bb (basic_block bb_copy)
void add_phi_args_after_copy (basic_block *region_copy, unsigned n_region)
static hashval_t ssa_name_map_entry_hash (const void *entry)
static int ssa_name_map_entry_eq (const void *in_table, const void *ssa_name)
void allocate_ssa_names (bitmap definitions, htab_t *map)
static void rewrite_to_new_ssa_names_def (def_operand_p def, tree stmt, htab_t map)
static void rewrite_to_new_ssa_names_use (use_operand_p use, htab_t map)
void rewrite_to_new_ssa_names_bb (basic_block bb, htab_t map)
void rewrite_to_new_ssa_names (basic_block *region, unsigned n_region, htab_t map)
bool tree_duplicate_sese_region (edge entry, edge exit, basic_block *region, unsigned n_region, basic_block *region_copy)
void dump_function_to_file (tree fn, FILE *file, int flags)
static void print_loop (FILE *, struct loop *, int)
static void print_pred_bbs (FILE *, basic_block bb)
static void print_succ_bbs (FILE *, basic_block bb)
void print_loop_ir (FILE *file)
void debug_loop_ir (void)
static bool tree_block_ends_with_call_p (basic_block bb)
static bool tree_block_ends_with_condjump_p (basic_block bb)
static bool need_fake_edge_p (tree t)
static int tree_flow_call_edges_add (sbitmap blocks)
bool tree_purge_dead_eh_edges (basic_block bb)
bool tree_purge_all_dead_eh_edges (bitmap blocks)
static void tree_execute_on_growing_pred (edge e)
static void tree_execute_on_shrinking_pred (edge e)
tree gimplify_val (block_stmt_iterator *bsi, tree type, tree exp)
tree gimplify_build3 (block_stmt_iterator *bsi, enum tree_code code, tree type, tree a, tree b, tree c)
tree gimplify_build2 (block_stmt_iterator *bsi, enum tree_code code, tree type, tree a, tree b)
tree gimplify_build1 (block_stmt_iterator *bsi, enum tree_code code, tree type, tree a)
static void execute_warn_function_return (void)
void extract_true_false_edges_from_block (basic_block b, edge *true_edge, edge *false_edge)

Variables

static const int initial_cfg_capacity = 20
static htab_t edge_to_cases
static struct cfg_stats_d cfg_stats
static bool found_computed_goto
struct tree_opt_pass pass_build_cfg
static treelabel_for_bb
struct tree_opt_pass pass_remove_useless_stmts
struct tree_opt_pass pass_merge_phi
struct cfg_hooks tree_cfg_hooks
struct tree_opt_pass pass_split_crit_edges
struct tree_opt_pass pass_warn_function_return


Define Documentation

#define CHECK_OP ( N,
MSG   ) 

Value:

do { if (!CONSTANT_CLASS_P (TREE_OPERAND (t, N))    \
         && !is_gimple_val (TREE_OPERAND (t, N)))   \
       { error (MSG); return TREE_OPERAND (t, N); }} while (0)


Function Documentation

void add_phi_args_after_copy ( basic_block region_copy,
unsigned  n_region 
)

Definition at line 4794 of file tree-cfg.c.

Referenced by tree_duplicate_sese_region().

void add_phi_args_after_copy_bb ( basic_block  bb_copy  ) 

Definition at line 4743 of file tree-cfg.c.

Referenced by add_phi_args_after_copy(), and copy_phi_node_args().

void allocate_ssa_names ( bitmap  definitions,
htab_t map 
)

void bsi_commit_edge_inserts ( void   ) 

void bsi_commit_one_edge_insert ( edge  e,
basic_block new_bb 
)

Definition at line 3157 of file tree-cfg.c.

Referenced by analyze_edges_for_bb(), and bsi_commit_edge_inserts().

block_stmt_iterator bsi_for_stmt ( tree  stmt  ) 

void bsi_insert_after ( block_stmt_iterator i,
tree  t,
enum bsi_iterator_update  m 
)

void bsi_insert_before ( block_stmt_iterator i,
tree  t,
enum bsi_iterator_update  m 
)

void bsi_insert_on_edge ( edge  e,
tree  stmt 
)

basic_block bsi_insert_on_edge_immediate ( edge  e,
tree  stmt 
)

void bsi_move_after ( block_stmt_iterator from,
block_stmt_iterator to 
)

Definition at line 2979 of file tree-cfg.c.

Referenced by bsi_move_to_bb_end().

void bsi_move_before ( block_stmt_iterator from,
block_stmt_iterator to 
)

void bsi_move_to_bb_end ( block_stmt_iterator from,
basic_block  bb 
)

Definition at line 3001 of file tree-cfg.c.

Referenced by sink_code_in_bb().

void bsi_remove ( block_stmt_iterator i  ) 

void bsi_replace ( const block_stmt_iterator bsi,
tree  stmt,
bool  preserve_eh_info 
)

static void build_tree_cfg ( tree tp  )  [static]

void cfg_remove_useless_stmts ( void   ) 

Definition at line 1997 of file tree-cfg.c.

References cfg_remove_useless_stmts_bb(), FOR_EACH_BB, and verify_flow_info().

Referenced by rewrite_out_of_ssa().

static void cfg_remove_useless_stmts_bb ( basic_block  bb  )  [static]

static bool cleanup_control_expr_graph ( basic_block  bb,
block_stmt_iterator  bsi 
) [static]

static bool cleanup_control_flow ( void   )  [static]

void cleanup_dead_labels ( void   ) 

Definition at line 1022 of file tree-cfg.c.

Referenced by build_tree_cfg(), and execute_cleanup_cfg_post_optimizing().

static bool cleanup_forwarder_blocks ( void   )  [static]

bool cleanup_tree_cfg ( void   ) 

static void clear_blocks_annotations ( void   )  [static]

Definition at line 346 of file tree-cfg.c.

References ENTRY_BLOCK_PTR, FOR_BB_BETWEEN, and NULL.

Referenced by free_blocks_annotations().

void clear_special_calls ( void   ) 

Definition at line 1757 of file tree-cfg.c.

Referenced by eliminate_unnecessary_stmts(), and remove_useless_stmts().

bool computed_goto_p ( tree  t  ) 

static basic_block create_bb ( void h,
void e,
basic_block  after 
) [static]

static void create_block_annotation ( basic_block  bb  )  [static]

Definition at line 327 of file tree-cfg.c.

References gcc_assert, and ggc_alloc_cleared.

Referenced by build_tree_cfg(), and create_bb().

void debug_cfg_stats ( void   ) 

Definition at line 2516 of file tree-cfg.c.

void debug_loop_ir ( void   ) 

Definition at line 5320 of file tree-cfg.c.

void debug_tree_bb ( basic_block  bb  ) 

Definition at line 2399 of file tree-cfg.c.

Referenced by debug_tree_bb_n().

basic_block debug_tree_bb_n ( int  n  ) 

Definition at line 2408 of file tree-cfg.c.

void debug_tree_cfg ( int  flags  ) 

Definition at line 2421 of file tree-cfg.c.

void delete_tree_cfg_annotations ( void   ) 

Definition at line 2807 of file tree-cfg.c.

Referenced by execute_free_cfg_annotations(), and execute_free_datastructures().

void disband_implicit_edges ( void   ) 

Definition at line 2727 of file tree-cfg.c.

Referenced by execute_free_cfg_annotations(), and execute_free_datastructures().

void dump_cfg_stats ( FILE file  ) 

Definition at line 2459 of file tree-cfg.c.

Referenced by debug_cfg_stats(), and dump_tree_cfg().

void dump_function_to_file ( tree  fn,
FILE file,
int  flags 
)

void dump_tree_cfg ( FILE file,
int  flags 
)

static void edge_to_cases_cleanup ( void p  )  [static]

Definition at line 669 of file tree-cfg.c.

References edge_to_cases_elt::case_labels, free(), next, NULL, and TREE_CHAIN.

Referenced by start_recording_case_labels().

static int edge_to_cases_eq ( const void p1,
const void p2 
) [static]

Definition at line 653 of file tree-cfg.c.

Referenced by start_recording_case_labels().

static hashval_t edge_to_cases_hash ( const void p  )  [static]

Definition at line 641 of file tree-cfg.c.

References htab_hash_pointer.

Referenced by start_recording_case_labels().

static void end_recording_case_labels ( void   )  [static]

Definition at line 706 of file tree-cfg.c.

References htab_delete(), and NULL.

Referenced by cleanup_tree_cfg(), cleanup_tree_cfg_1(), and split_critical_edges().

static void execute_build_cfg ( void   )  [static]

Definition at line 225 of file tree-cfg.c.

References build_tree_cfg(), current_function_decl, and DECL_SAVED_TREE.

static void execute_warn_function_return ( void   )  [static]

void extract_true_false_edges_from_block ( basic_block  b,
edge true_edge,
edge false_edge 
)

static void factor_computed_gotos ( void   )  [static]

static tree find_case_label_for_value ( tree  switch_expr,
tree  val 
) [static]

edge find_taken_edge ( basic_block  bb,
tree  val 
)

static edge find_taken_edge_cond_expr ( basic_block  bb,
tree  val 
) [static]

Definition at line 2282 of file tree-cfg.c.

References extract_true_false_edges_from_block(), gcc_assert, TREE_CODE, and zero_p().

Referenced by find_taken_edge().

static edge find_taken_edge_switch_expr ( basic_block  bb,
tree  val 
) [static]

tree first_stmt ( basic_block  bb  ) 

static void fold_cond_expr_cond ( void   )  [static]

static void free_blocks_annotations ( void   )  [static]

Definition at line 337 of file tree-cfg.c.

References clear_blocks_annotations().

Referenced by delete_tree_cfg_annotations().

static bool gate_merge_phi ( void   )  [static]

Definition at line 4402 of file tree-cfg.c.

static tree get_cases_for_edge ( edge  e,
tree  t 
) [static]

tree gimplify_build1 ( block_stmt_iterator bsi,
enum tree_code  code,
tree  type,
tree  a 
)

tree gimplify_build2 ( block_stmt_iterator bsi,
enum tree_code  code,
tree  type,
tree  a,
tree  b 
)

tree gimplify_build3 ( block_stmt_iterator bsi,
enum tree_code  code,
tree  type,
tree  a,
tree  b,
tree  c 
)

Definition at line 5674 of file tree-cfg.c.

Referenced by tree_vec_extract().

tree gimplify_val ( block_stmt_iterator bsi,
tree  type,
tree  exp 
)

void group_case_labels ( void   ) 

Definition at line 1157 of file tree-cfg.c.

Referenced by build_tree_cfg(), and execute_cleanup_cfg_post_optimizing().

static GTY ( ()   )  [static]

Definition at line 63 of file tree-cfg.c.

static bool has_abnormal_incoming_edge_p ( basic_block  bb  )  [inline, static]

Definition at line 4051 of file tree-cfg.c.

References EDGE_ABNORMAL, edge::flags, and FOR_EACH_EDGE.

Referenced by merge_phi_nodes(), and remove_forwarder_block().

static bool has_label_p ( basic_block  bb,
tree  label 
) [static]

Definition at line 3274 of file tree-cfg.c.

References bsi_end_p(), bsi_next(), bsi_start(), bsi_stmt(), LABEL_EXPR_LABEL, and TREE_CODE.

Referenced by tree_verify_flow_info().

bool is_ctrl_altering_stmt ( tree  t  ) 

bool is_ctrl_stmt ( tree  t  ) 

basic_block label_to_block ( tree  dest  ) 

tree last_and_only_stmt ( basic_block  bb  ) 

Definition at line 2855 of file tree-cfg.c.

Referenced by abs_replacement(), do_while_loop_p(), and minmax_replacement().

tree last_stmt ( basic_block  bb  ) 

Definition at line 2833 of file tree-cfg.c.

Referenced by ANL_LOOP_CONSTRUCT::_Loop_Srcpos_Range(), ANL_REGION_CONSTRUCT::_Region_Srcpos_Range(), abs_replacement(), adjust_return_value(), BB_NODE::Append_stmt_before_branch(), apply_return_prediction(), c_parser_compound_statement_nostart(), candidate_bb_for_phi_optimization(), cfg_remove_useless_stmts_bb(), cleanup_dead_labels(), DU_MANAGER::Collect_CFG(), conditional_replacement(), copy_loop_headers(), create_canonical_iv(), determine_parallel_type(), determine_use_iv_cost_outer(), disband_implicit_edges(), do_while_loop_p(), dom_opt_finalize_block(), estimate_numbers_of_iterations_loop(), execute_warn_function_return(), expand_omp_for(), expand_omp_parallel(), find_taken_edge(), find_taken_edge_switch_expr(), fold_cond_expr_cond(), get_loop_exit_condition(), group_case_labels(), RVI::Insert_statement(), ip_normal_pos(), loop_niter_by_eval(), make_cond_expr_edges(), make_ctrl_stmt_edges(), make_edges(), make_exit_edges(), make_switch_expr_edges(), mark_control_dependent_edges_necessary(), may_eliminate_iv(), minmax_replacement(), ANL_REGION_CONSTRUCT::Next_Stmt(), number_of_iterations_exit(), GTABLE::Patch_Do_While(), Post_loop_peeling(), Pre_loop_peeling(), remove_empty_loop(), rewrite_use_outer(), should_duplicate_loop_header_p(), simplify_using_entry_checks(), simplify_using_initial_conditions(), standard_iv_increment_position(), stmt_after_ip_normal_pos(), tree_block_ends_with_condjump_p(), tree_can_merge_blocks_p(), tree_cfg2vcg(), tree_estimate_probability(), tree_flow_call_edges_add(), tree_may_unswitch_on(), tree_merge_blocks(), tree_nrv(), tree_optimize_tail_calls_1(), tree_predict_by_opcode(), tree_purge_dead_abnormal_call_edges(), tree_purge_dead_eh_edges(), tree_ssa_forward_propagate_single_use_vars(), tree_ssa_iv_optimize_loop(), tree_ssa_phiopt(), tree_unroll_loop(), tree_unswitch_single_loop(), try_unroll_loop_completely(), value_replacement(), VEC(), workshare_safe_to_combine_p(), ANL_REGION_CONSTRUCT::Write(), and ANL_LOOP_CONSTRUCT::Write().

tree* last_stmt_ptr ( basic_block  bb  ) 

Definition at line 2843 of file tree-cfg.c.

static tree main_block_label ( tree  label  )  [static]

Definition at line 1006 of file tree-cfg.c.

References basic_block_def::index, and label_to_block.

Referenced by cleanup_dead_labels().

static void make_blocks ( tree  stmt_list  )  [static]

static void make_cond_expr_edges ( basic_block  bb  )  [static]

static void make_ctrl_stmt_edges ( basic_block  bb  )  [static]

static void make_edges ( void   )  [static]

static void make_exit_edges ( basic_block  bb  )  [static]

static void make_goto_expr_edges ( basic_block  bb  )  [static]

static void make_switch_expr_edges ( basic_block  bb  )  [static]

static void merge_phi_nodes ( void   )  [static]

static bool need_fake_edge_p ( tree  t  )  [static]

void notice_special_calls ( tree  t  ) 

Definition at line 1742 of file tree-cfg.c.

Referenced by eliminate_unnecessary_stmts(), and remove_useless_stmts_1().

static bool phi_alternatives_equal ( basic_block  dest,
edge  e1,
edge  e2 
) [static]

static void print_loop ( FILE file,
struct loop loop,
int  indent 
) [static]

void print_loop_ir ( FILE file  ) 

Definition at line 5307 of file tree-cfg.c.

Referenced by debug_loop_ir(), and number_of_iterations_for_all_loops().

static void print_pred_bbs ( FILE file,
basic_block  bb 
) [static]

Definition at line 5238 of file tree-cfg.c.

References FOR_EACH_EDGE, fprintf(), and edge::src.

Referenced by print_loop().

static void print_succ_bbs ( FILE file,
basic_block  bb 
) [static]

Definition at line 5251 of file tree-cfg.c.

References FOR_EACH_EDGE, fprintf(), and edge::src.

Referenced by print_loop().

static void record_switch_edge ( edge  e,
tree  case_label 
) [static]

static bool recording_case_labels_p ( void   )  [static]

Definition at line 698 of file tree-cfg.c.

References NULL.

Referenced by get_cases_for_edge().

static void reinstall_phi_args ( edge  new_edge,
edge  old_edge 
) [static]

static void remove_bb ( basic_block  bb  )  [static]

static bool remove_fallthru_edge ( VEC(edge)*  ev  )  [static]

Definition at line 2235 of file tree-cfg.c.

References EDGE_FALLTHRU, edge::flags, FOR_EACH_EDGE, and remove_edge().

Referenced by VEC().

static bool remove_forwarder_block ( basic_block  bb,
basic_block **  worklist 
) [static]

static void remove_forwarder_block_with_phi ( basic_block  bb  )  [static]

static void remove_phi_nodes_and_edges_for_unreachable_block ( basic_block  bb  )  [static]

Definition at line 2015 of file tree-cfg.c.

References EDGE_COUNT, EDGE_SUCC, next, NULL_TREE, PHI_CHAIN, phi_nodes(), remove_edge(), and remove_phi_node().

Referenced by remove_bb().

static void remove_useless_stmts ( void   )  [static]

static void remove_useless_stmts_1 ( tree tp,
struct rus_data data 
) [static]

static void remove_useless_stmts_bind ( tree stmt_p,
struct rus_data data 
) [static]

static void remove_useless_stmts_cond ( tree stmt_p,
struct rus_data data 
) [static]

static void remove_useless_stmts_goto ( tree stmt_p,
struct rus_data data 
) [static]

Definition at line 1671 of file tree-cfg.c.

References dest, GOTO_DESTINATION, rus_data::last_goto, rus_data::may_branch, NULL, and TREE_CODE.

Referenced by remove_useless_stmts_1().

static void remove_useless_stmts_label ( tree stmt_p,
struct rus_data data 
) [static]

static void remove_useless_stmts_tc ( tree stmt_p,
struct rus_data data 
) [static]

static void remove_useless_stmts_tf ( tree stmt_p,
struct rus_data data 
) [static]

static bool remove_useless_stmts_warn_notreached ( tree  stmt  )  [static]

void rewrite_to_new_ssa_names ( basic_block region,
unsigned  n_region,
htab_t  map 
)

Definition at line 4988 of file tree-cfg.c.

References r, and rewrite_to_new_ssa_names_bb().

Referenced by tree_duplicate_sese_region().

void rewrite_to_new_ssa_names_bb ( basic_block  bb,
htab_t  map 
)

static void rewrite_to_new_ssa_names_def ( def_operand_p  def,
tree  stmt,
htab_t  map 
) [static]

static void rewrite_to_new_ssa_names_use ( use_operand_p  use,
htab_t  map 
) [static]

void set_bb_for_stmt ( tree  t,
basic_block  bb 
)

bool simple_goto_p ( tree  expr  ) 

static void split_critical_edges ( void   )  [static]

static int ssa_name_map_entry_eq ( const void in_table,
const void ssa_name 
) [static]

Definition at line 4828 of file tree-cfg.c.

References ssa_name_map_entry::from_name.

Referenced by allocate_ssa_names().

static hashval_t ssa_name_map_entry_hash ( const void entry  )  [static]

Definition at line 4819 of file tree-cfg.c.

References ssa_name_map_entry::from_name, and SSA_NAME_VERSION.

Referenced by allocate_ssa_names().

static void start_recording_case_labels ( void   )  [static]

bool stmt_ends_bb_p ( tree  t  ) 

static bool stmt_starts_bb_p ( tree  t,
tree  prev_t 
) [inline, static]

static bool tree_block_ends_with_call_p ( basic_block  bb  )  [static]

Definition at line 5331 of file tree-cfg.c.

References bsi_last(), bsi_stmt(), get_call_expr_in(), and NULL.

static bool tree_block_ends_with_condjump_p ( basic_block  bb  )  [static]

Definition at line 5342 of file tree-cfg.c.

References bsi_last(), TREE_CODE, and tsi_stmt().

tree tree_block_label ( basic_block  bb  ) 

static bool tree_can_duplicate_bb_p ( basic_block bb  ATTRIBUTE_UNUSED  )  [static]

Definition at line 4683 of file tree-cfg.c.

static bool tree_can_merge_blocks_p ( basic_block  a,
basic_block  b 
) [static]

static void tree_cfg2vcg ( FILE file  )  [static]

void tree_dump_bb ( basic_block  bb,
FILE outf,
int  indent 
)

Definition at line 2390 of file tree-cfg.c.

Referenced by print_loop().

static basic_block tree_duplicate_bb ( basic_block  bb  )  [static]

bool tree_duplicate_sese_region ( edge  entry,
edge  exit,
basic_block region,
unsigned  n_region,
basic_block region_copy 
)

Definition at line 5007 of file tree-cfg.c.

Referenced by copy_loop_headers().

static void tree_execute_on_growing_pred ( edge  e  )  [static]

Definition at line 5558 of file tree-cfg.c.

References edge::dest, phi_nodes(), and reserve_phi_args_for_new_edge().

static void tree_execute_on_shrinking_pred ( edge  e  )  [static]

Definition at line 5570 of file tree-cfg.c.

References edge::dest, phi_nodes(), and remove_phi_args().

static bool tree_find_edge_insert_loc ( edge  e,
block_stmt_iterator bsi,
basic_block new_bb 
) [static]

static int tree_flow_call_edges_add ( sbitmap  blocks  )  [static]

static bool tree_forwarder_block_p ( basic_block  bb,
bool  phi_wanted 
) [static]

static void tree_make_forwarder_block ( edge  fallthru  )  [static]

static void tree_merge_blocks ( basic_block  a,
basic_block  b 
) [static]

static bool tree_move_block_after ( basic_block  bb,
basic_block  after 
) [static]

Definition at line 4668 of file tree-cfg.c.

References link_block(), basic_block_def::prev_bb, and unlink_block().

static bool tree_node_can_be_shared ( tree  t  )  [static]

bool tree_purge_all_dead_eh_edges ( bitmap  blocks  ) 

Definition at line 5540 of file tree-cfg.c.

Referenced by eliminate_degenerate_phis(), fini_pre(), and tree_ssa_dominator_optimize().

bool tree_purge_dead_eh_edges ( basic_block  bb  ) 

static edge tree_redirect_edge_and_branch ( edge  e,
basic_block  dest 
) [static]

static basic_block tree_redirect_edge_and_branch_force ( edge  e,
basic_block  dest 
) [static]

Definition at line 4604 of file tree-cfg.c.

References gcc_assert, NULL, and tree_redirect_edge_and_branch().

static basic_block tree_split_block ( basic_block  bb,
void stmt 
) [static]

static basic_block tree_split_edge ( edge  edge_in  )  [static]

static edge tree_try_redirect_by_replacing_jump ( edge  e,
basic_block  target 
) [static]

static int tree_verify_flow_info ( void   )  [static]

static void update_call_expr_flags ( tree  call  )  [static]

static void update_eh_label ( struct eh_region region  )  [static]

VEC ( tree   ) 

static tree verify_expr ( tree tp,
int *  walk_subtrees,
void *data  ATTRIBUTE_UNUSED 
) [static]

static tree verify_node_sharing ( tree tp,
int *  walk_subtrees,
void data 
) [static]

Definition at line 3559 of file tree-cfg.c.

References htab_find_slot(), INSERT, NULL, and tree_node_can_be_shared().

Referenced by verify_stmts().

static bool verify_stmt ( tree  stmt,
bool  last_in_block 
) [static]

void verify_stmts ( void   ) 

Definition at line 3582 of file tree-cfg.c.

Referenced by build_tree_cfg(), execute_todo(), tree_ssa_iv_optimize(), and verify_ssa().


Variable Documentation

Definition at line 98 of file tree-cfg.c.

Referenced by build_tree_cfg(), dump_cfg_stats(), and stmt_starts_bb_p().

Definition at line 101 of file tree-cfg.c.

Referenced by build_tree_cfg(), and make_blocks().

const int initial_cfg_capacity = 20 [static]

Definition at line 59 of file tree-cfg.c.

Referenced by build_tree_cfg(), and init_empty_tree_cfg().

tree* label_for_bb [static]

Initial value:

{
  "cfg",        
  NULL,         
  execute_build_cfg,      
  NULL,         
  NULL,         
  0,          
  TV_TREE_CFG,        
  PROP_gimple_leh,      
  PROP_cfg,       
  0,          
  0,          
  TODO_verify_stmts,      
  0         
}

Definition at line 230 of file tree-cfg.c.

Referenced by init_optimization_passes(), and init_tree_optimization_passes().

Initial value:

 {
  "mergephi",     
  gate_merge_phi,   
  merge_phi_nodes,    
  NULL,       
  NULL,       
  0,        
  TV_TREE_MERGE_PHI,    
  PROP_cfg | PROP_ssa,    
  0,        
  0,        
  0,        
  TODO_dump_func | TODO_ggc_collect 
  | TODO_verify_ssa,
  0       
}

Definition at line 4407 of file tree-cfg.c.

Referenced by init_optimization_passes(), and init_tree_optimization_passes().

Initial value:

 
{
  "useless",        
  NULL,         
  remove_useless_stmts,     
  NULL,         
  NULL,         
  0,          
  0,          
  PROP_gimple_any,      
  0,          
  0,          
  0,          
  TODO_dump_func,     
  0         
}

Definition at line 1875 of file tree-cfg.c.

Referenced by init_optimization_passes(), and init_tree_optimization_passes().

Initial value:

 
{
  "crited",                          
  NULL,                          
  split_critical_edges,          
  NULL,                          
  NULL,                          
  0,                             
  TV_TREE_SPLIT_EDGES,           
  PROP_cfg,                      
  PROP_no_crit_edges,            
  0,                             
  0,                             
  TODO_dump_func,                
  0                              
}

Definition at line 5627 of file tree-cfg.c.

Referenced by init_optimization_passes(), and init_tree_optimization_passes().

Initial value:

{
  NULL,         
  NULL,         
  execute_warn_function_return,   
  NULL,         
  NULL,         
  0,          
  0,          
  PROP_cfg,       
  0,          
  0,          
  0,          
  0,          
  0         
}

Definition at line 5827 of file tree-cfg.c.

Referenced by init_optimization_passes(), and init_tree_optimization_passes().


Generated on Wed Apr 8 14:21:55 2009 for Open64 by  doxygen 1.5.6