annotate gcc/dominance.h @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents 1830386684a0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* Calculate (post)dominators header file.
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2 Copyright (C) 2014-2020 Free Software Foundation, Inc.
111
kono
parents:
diff changeset
3
kono
parents:
diff changeset
4 This file is part of GCC.
kono
parents:
diff changeset
5
kono
parents:
diff changeset
6 GCC is free software; you can redistribute it and/or modify it
kono
parents:
diff changeset
7 under the terms of the GNU General Public License as published by
kono
parents:
diff changeset
8 the Free Software Foundation; either version 3, or (at your option)
kono
parents:
diff changeset
9 any later version.
kono
parents:
diff changeset
10
kono
parents:
diff changeset
11 GCC is distributed in the hope that it will be useful, but WITHOUT
kono
parents:
diff changeset
12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
kono
parents:
diff changeset
13 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
kono
parents:
diff changeset
14 License for more details.
kono
parents:
diff changeset
15
kono
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
kono
parents:
diff changeset
17 along with GCC; see the file COPYING3. If not see
kono
parents:
diff changeset
18 <http://www.gnu.org/licenses/>. */
kono
parents:
diff changeset
19
kono
parents:
diff changeset
20 #ifndef GCC_DOMINANCE_H
kono
parents:
diff changeset
21 #define GCC_DOMINANCE_H
kono
parents:
diff changeset
22
kono
parents:
diff changeset
23 enum cdi_direction
kono
parents:
diff changeset
24 {
kono
parents:
diff changeset
25 CDI_DOMINATORS = 1,
kono
parents:
diff changeset
26 CDI_POST_DOMINATORS = 2
kono
parents:
diff changeset
27 };
kono
parents:
diff changeset
28
kono
parents:
diff changeset
29 /* State of dominance information. */
kono
parents:
diff changeset
30
kono
parents:
diff changeset
31 enum dom_state
kono
parents:
diff changeset
32 {
kono
parents:
diff changeset
33 DOM_NONE, /* Not computed at all. */
kono
parents:
diff changeset
34 DOM_NO_FAST_QUERY, /* The data is OK, but the fast query data are not usable. */
kono
parents:
diff changeset
35 DOM_OK /* Everything is ok. */
kono
parents:
diff changeset
36 };
kono
parents:
diff changeset
37
kono
parents:
diff changeset
38 extern void calculate_dominance_info (enum cdi_direction);
kono
parents:
diff changeset
39 extern void calculate_dominance_info_for_region (enum cdi_direction,
kono
parents:
diff changeset
40 vec<basic_block>);
kono
parents:
diff changeset
41 extern void free_dominance_info (function *, enum cdi_direction);
kono
parents:
diff changeset
42 extern void free_dominance_info (enum cdi_direction);
kono
parents:
diff changeset
43 extern void free_dominance_info_for_region (function *,
kono
parents:
diff changeset
44 enum cdi_direction,
kono
parents:
diff changeset
45 vec<basic_block>);
kono
parents:
diff changeset
46 extern basic_block get_immediate_dominator (enum cdi_direction, basic_block);
kono
parents:
diff changeset
47 extern void set_immediate_dominator (enum cdi_direction, basic_block,
kono
parents:
diff changeset
48 basic_block);
kono
parents:
diff changeset
49 extern vec<basic_block> get_dominated_by (enum cdi_direction, basic_block);
kono
parents:
diff changeset
50 extern vec<basic_block> get_dominated_by_region (enum cdi_direction,
kono
parents:
diff changeset
51 basic_block *,
kono
parents:
diff changeset
52 unsigned);
kono
parents:
diff changeset
53 extern vec<basic_block> get_dominated_to_depth (enum cdi_direction,
kono
parents:
diff changeset
54 basic_block, int);
kono
parents:
diff changeset
55 extern vec<basic_block> get_all_dominated_blocks (enum cdi_direction,
kono
parents:
diff changeset
56 basic_block);
kono
parents:
diff changeset
57 extern void redirect_immediate_dominators (enum cdi_direction, basic_block,
kono
parents:
diff changeset
58 basic_block);
kono
parents:
diff changeset
59 extern basic_block nearest_common_dominator (enum cdi_direction,
kono
parents:
diff changeset
60 basic_block, basic_block);
kono
parents:
diff changeset
61 extern basic_block nearest_common_dominator_for_set (enum cdi_direction,
kono
parents:
diff changeset
62 bitmap);
kono
parents:
diff changeset
63 extern bool dominated_by_p (enum cdi_direction, const_basic_block,
kono
parents:
diff changeset
64 const_basic_block);
kono
parents:
diff changeset
65 unsigned bb_dom_dfs_in (enum cdi_direction, basic_block);
kono
parents:
diff changeset
66 unsigned bb_dom_dfs_out (enum cdi_direction, basic_block);
kono
parents:
diff changeset
67 extern void verify_dominators (enum cdi_direction);
kono
parents:
diff changeset
68
kono
parents:
diff changeset
69 /* Verify invariants of computed dominance information, if internal consistency
kono
parents:
diff changeset
70 checks are enabled. */
kono
parents:
diff changeset
71
kono
parents:
diff changeset
72 static inline void
kono
parents:
diff changeset
73 checking_verify_dominators (cdi_direction dir)
kono
parents:
diff changeset
74 {
kono
parents:
diff changeset
75 if (flag_checking)
kono
parents:
diff changeset
76 verify_dominators (dir);
kono
parents:
diff changeset
77 }
kono
parents:
diff changeset
78
kono
parents:
diff changeset
79 basic_block recompute_dominator (enum cdi_direction, basic_block);
kono
parents:
diff changeset
80 extern void iterate_fix_dominators (enum cdi_direction,
kono
parents:
diff changeset
81 vec<basic_block> , bool);
kono
parents:
diff changeset
82 extern void add_to_dominance_info (enum cdi_direction, basic_block);
kono
parents:
diff changeset
83 extern void delete_from_dominance_info (enum cdi_direction, basic_block);
kono
parents:
diff changeset
84 extern basic_block first_dom_son (enum cdi_direction, basic_block);
kono
parents:
diff changeset
85 extern basic_block next_dom_son (enum cdi_direction, basic_block);
kono
parents:
diff changeset
86 extern enum dom_state dom_info_state (function *, enum cdi_direction);
kono
parents:
diff changeset
87 extern enum dom_state dom_info_state (enum cdi_direction);
kono
parents:
diff changeset
88 extern void set_dom_info_availability (enum cdi_direction, enum dom_state);
kono
parents:
diff changeset
89 extern bool dom_info_available_p (function *, enum cdi_direction);
kono
parents:
diff changeset
90 extern bool dom_info_available_p (enum cdi_direction);
kono
parents:
diff changeset
91
kono
parents:
diff changeset
92
kono
parents:
diff changeset
93
kono
parents:
diff changeset
94 #endif /* GCC_DOMINANCE_H */