GCC Middle and Back End API Reference
tree-cfg.h
Go to the documentation of this file.
1/* Data and Control Flow Analysis for Trees.
2 Copyright (C) 2001-2024 Free Software Foundation, Inc.
3 Contributed by Diego Novillo <dnovillo@redhat.com>
4
5This file is part of GCC.
6
7GCC is free software; you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published by
9the Free Software Foundation; either version 3, or (at your option)
10any later version.
11
12GCC is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
18along with GCC; see the file COPYING3. If not see
19<http://www.gnu.org/licenses/>. */
20
21#ifndef _TREE_CFG_H
22#define _TREE_CFG_H
23
24/* Location to track pending stmt for edge insertion. */
25#define PENDING_STMT(e) ((e)->insns.g)
26
27/* Garbage collection and PCH support for edge_def. */
28extern void gt_ggc_mx (edge_def *e);
29extern void gt_pch_nx (edge_def *e);
30extern void gt_pch_nx (edge_def *e, gt_pointer_operator, void *);
31
32extern void init_empty_tree_cfg_for_function (struct function *);
33extern void init_empty_tree_cfg (void);
34extern void start_recording_case_labels (void);
35extern void end_recording_case_labels (void);
37extern basic_block label_to_block (struct function *, tree);
38extern void cleanup_dead_labels (void);
39extern bool group_case_labels_stmt (gswitch *);
40extern bool group_case_labels (void);
41extern void replace_uses_by (tree, tree);
43extern void notice_special_calls (gcall *);
44extern void clear_special_calls (void);
46extern void gimple_debug_bb (basic_block);
48extern void gimple_debug_cfg (int);
49extern void gimple_dump_cfg (FILE *, dump_flags_t);
50extern void dump_cfg_stats (FILE *);
51extern void debug_cfg_stats (void);
52extern bool computed_goto_p (gimple *);
55extern bool is_ctrl_stmt (gimple *);
56extern bool is_ctrl_altering_stmt (gimple *);
57extern bool simple_goto_p (gimple *);
58extern bool stmt_ends_bb_p (gimple *);
66extern bool verify_gimple_in_seq (gimple_seq, bool = true);
67extern bool verify_gimple_in_cfg (struct function *, bool, bool = true);
70extern void add_phi_args_after_copy (basic_block *, unsigned, edge);
72extern bool gimple_duplicate_seme_region (edge, edge, basic_block *, unsigned,
73 basic_block *, bool);
74extern bool gimple_duplicate_sese_tail (edge, edge, basic_block *, unsigned,
75 basic_block *);
79extern bool gather_ssa_name_hash_map_from (tree const &, tree const &, void *);
80extern void fold_loop_internal_call (gimple *, tree);
84extern void debug_function (tree, dump_flags_t);
85extern void print_loops_bb (FILE *, basic_block, int, int);
86extern void print_loops (FILE *, int);
87extern void debug (class loop &ref);
88extern void debug (class loop *ptr);
89extern void debug_verbose (class loop &ref);
90extern void debug_verbose (class loop *ptr);
91extern void debug_loops (int);
92extern void debug_loop (class loop *, int);
93extern void debug_loop_num (unsigned, int);
102extern unsigned int execute_fixup_cfg (void);
103extern unsigned int split_critical_edges (bool for_edge_insertion_p = false);
108 edge *, edge *);
109extern void generate_range_test (basic_block bb, tree index, tree low,
110 tree high, tree *lhs, tree *rhs);
111extern basic_block gimple_switch_label_bb (function *, gswitch *, unsigned);
113extern edge gimple_switch_edge (function *, gswitch *, unsigned);
115extern bool cond_only_block_p (basic_block);
117
118/* Return true if the LHS of a call should be removed. */
119
120inline bool
122{
123 return (lhs
125 && !TREE_ADDRESSABLE (TREE_TYPE (lhs)));
126}
127
128
129inline unsigned int
131{
132 return split_critical_edges (/*for_edge_insertion_p=*/true);
133}
134
135#endif /* _TREE_CFG_H */
Definition basic-block.h:26
Definition cfgloop.h:120
Definition profile-count.h:147
bool debug
Definition collect-utils.cc:34
class edge_def * edge
Definition coretypes.h:342
const class bitmap_head * const_bitmap
Definition coretypes.h:52
void(* gt_pointer_operator)(void *, void *, void *)
Definition coretypes.h:462
union tree_node * tree
Definition coretypes.h:97
enum dump_flag dump_flags_t
Definition dumpfile.h:209
T * ggc_alloc(ALONE_CXX_MEM_STAT_INFO)
Definition ggc.h:184
Definition basic-block.h:117
Definition function.h:249
Definition gimple.h:353
Definition gimple-iterator.h:26
Definition gimple.h:225
Definition gimple.h:462
Definition gimple.h:895
Definition vec.h:450
basic_block label_to_block(struct function *, tree)
Definition tree-cfg.cc:1444
void verify_sese(basic_block, basic_block, vec< basic_block > *)
Definition tree-cfg.cc:7683
bool gimple_purge_all_dead_eh_edges(const_bitmap)
Definition tree-cfg.cc:9191
void add_phi_args_after_copy(basic_block *, unsigned, edge)
Definition tree-cfg.cc:6713
gimple * first_stmt(basic_block)
Definition tree-cfg.cc:2934
bool gimple_duplicate_seme_region(edge, edge, basic_block *, unsigned, basic_block *, bool)
Definition tree-cfg.cc:6746
basic_block gimple_debug_bb_n(int)
Definition tree-cfg.cc:2615
unsigned int execute_fixup_cfg(void)
Definition tree-cfg.cc:10046
void gt_pch_nx(edge_def *e)
Definition tree-cfg.cc:10250
bool assert_unreachable_fallthru_edge_p(edge)
Definition tree-cfg.cc:480
void dump_function_to_file(tree, FILE *, dump_flags_t)
Definition tree-cfg.cc:8279
void start_recording_case_labels(void)
Definition tree-cfg.cc:1345
gphi * get_virtual_phi(basic_block)
Definition tree-cfg.cc:2916
basic_block gimple_switch_label_bb(function *, gswitch *, unsigned)
Definition tree-cfg.cc:9693
void debug_loop(class loop *, int)
Definition tree-cfg.cc:8789
void debug_loop_num(unsigned, int)
Definition tree-cfg.cc:8798
void init_empty_tree_cfg_for_function(struct function *)
Definition tree-cfg.cc:182
void init_empty_tree_cfg(void)
Definition tree-cfg.cc:206
bool gimple_purge_dead_abnormal_call_edges(basic_block)
Definition tree-cfg.cc:9214
void debug_verbose(class loop &ref)
Definition tree-cfg.cc:8763
void clear_special_calls(void)
Definition tree-cfg.cc:2300
void end_recording_case_labels(void)
Definition tree-cfg.cc:1363
bool gimple_purge_all_dead_abnormal_call_edges(const_bitmap)
Definition tree-cfg.cc:9244
void gt_ggc_mx(edge_def *e)
Definition tree-cfg.cc:10223
tree get_cases_for_edge(edge, gswitch *)
Definition tree-cfg.cc:1388
bool gather_ssa_name_hash_map_from(tree const &, tree const &, void *)
Definition tree-cfg.cc:7736
void debug_cfg_stats(void)
Definition tree-cfg.cc:2714
bool extract_true_false_controlled_edges(basic_block, basic_block, edge *, edge *)
Definition tree-cfg.cc:9609
void print_loops(FILE *, int)
Definition tree-cfg.cc:8733
bool gimple_find_sub_bbs(gimple_seq, gimple_stmt_iterator *)
Definition tree-cfg.cc:1076
edge find_taken_edge_switch_expr(const gswitch *switch_stmt, tree val)
Definition tree-cfg.cc:2536
bool stmt_can_make_abnormal_goto(gimple *)
Definition tree-cfg.cc:2751
void gather_blocks_in_sese_region(basic_block entry, basic_block exit, vec< basic_block > *bbs_p)
Definition tree-cfg.cc:7048
void generate_range_test(basic_block bb, tree index, tree low, tree high, tree *lhs, tree *rhs)
Definition tree-cfg.cc:9671
void remove_edge_and_dominated_blocks(edge)
Definition tree-cfg.cc:9019
void gimple_debug_bb(basic_block)
Definition tree-cfg.cc:2606
basic_block gimple_switch_default_bb(function *, gswitch *)
Definition tree-cfg.cc:9701
void fold_loop_internal_call(gimple *, tree)
Definition tree-cfg.cc:7770
bool gimple_purge_dead_eh_edges(basic_block)
Definition tree-cfg.cc:9164
bool verify_gimple_in_cfg(struct function *, bool, bool=true)
Definition tree-cfg.cc:5522
bool cond_only_block_p(basic_block)
Definition tree-cfg.cc:9726
edge gimple_switch_default_edge(function *, gswitch *)
Definition tree-cfg.cc:9718
gimple * last_and_only_stmt(basic_block)
Definition tree-cfg.cc:2979
basic_block insert_cond_bb(basic_block, gimple *, gimple *, profile_probability)
Definition tree-cfg.cc:9535
tree find_case_label_for_value(const gswitch *switch_stmt, tree val)
Definition tree-cfg.cc:2566
bool is_ctrl_stmt(gimple *)
Definition tree-cfg.cc:2764
void dump_cfg_stats(FILE *)
Definition tree-cfg.cc:2663
basic_block single_noncomplex_succ(basic_block bb)
Definition tree-cfg.cc:2266
bool stmt_ends_bb_p(gimple *)
Definition tree-cfg.cc:2900
void replace_uses_by(tree, tree)
Definition tree-cfg.cc:2036
bool should_remove_lhs_p(tree lhs)
Definition tree-cfg.h:121
bool verify_gimple_in_seq(gimple_seq, bool=true)
Definition tree-cfg.cc:5324
basic_block move_sese_region_to_fn(struct function *, basic_block, basic_block, tree)
Definition tree-cfg.cc:7851
basic_block split_edge_bb_loc(edge)
Definition tree-cfg.cc:3012
void add_phi_args_after_copy_bb(basic_block)
Definition tree-cfg.cc:6696
bool group_case_labels(void)
Definition tree-cfg.cc:1933
bool simple_goto_p(gimple *)
Definition tree-cfg.cc:2828
edge find_taken_edge(basic_block, tree)
Definition tree-cfg.cc:2441
void gimple_debug_cfg(int)
unsigned int split_edges_for_insertion()
Definition tree-cfg.h:130
void print_loops_bb(FILE *, basic_block, int, int)
Definition tree-cfg.cc:8588
void debug_loops(int)
Definition tree-cfg.cc:8781
void copy_phi_arg_into_existing_phi(edge, edge)
Definition tree-cfg.cc:6864
void notice_special_calls(gcall *)
Definition tree-cfg.cc:2285
void extract_true_false_edges_from_block(basic_block, edge *, edge *)
Definition tree-cfg.cc:9582
void delete_tree_cfg_annotations(function *)
Definition tree-cfg.cc:2908
bool gimple_duplicate_sese_tail(edge, edge, basic_block *, unsigned, basic_block *)
Definition tree-cfg.cc:6915
basic_block get_abnormal_succ_dispatcher(basic_block)
Definition tree-cfg.cc:714
void gimple_dump_cfg(FILE *, dump_flags_t)
Definition tree-cfg.cc:2640
bool gimple_seq_unreachable_p(gimple_seq)
Definition tree-cfg.cc:440
bool computed_goto_p(gimple *)
Definition tree-cfg.cc:430
edge gimple_switch_edge(function *, gswitch *, unsigned)
Definition tree-cfg.cc:9710
unsigned int split_critical_edges(bool for_edge_insertion_p=false)
Definition tree-cfg.cc:9440
void debug_function(tree, dump_flags_t)
Definition tree-cfg.cc:8554
bool is_ctrl_altering_stmt(gimple *)
Definition tree-cfg.cc:2784
tree gimple_block_label(basic_block)
Definition tree-cfg.cc:6122
void cleanup_dead_labels(void)
Definition tree-cfg.cc:1606
gimple * last_nondebug_stmt(basic_block)
Definition tree-cfg.cc:2961
bool group_case_labels_stmt(gswitch *)
Definition tree-cfg.cc:1809
#define TYPE_SIZE_UNIT(NODE)
Definition tree.h:2242
#define TREE_CODE(NODE)
Definition tree.h:324
#define TREE_TYPE(NODE)
Definition tree.h:512
#define TREE_ADDRESSABLE(NODE)
Definition tree.h:744