Line data Source code
1 : /* Flags on basic blocks and edges.
2 : Copyright (C) 2012-2026 Free Software Foundation, Inc.
3 :
4 : This file is part of GCC.
5 :
6 : GCC is free software; you can redistribute it and/or modify it under
7 : the terms of the GNU General Public License as published by the Free
8 : Software Foundation; either version 3, or (at your option) any later
9 : version.
10 :
11 : GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12 : WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 : FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 : for more details.
15 :
16 : You should have received a copy of the GNU General Public License
17 : along with GCC; see the file COPYING3. If not see
18 : <http://www.gnu.org/licenses/>. */
19 :
20 : /* This file defines flags that may appear on basic blocks or on
21 : edges. Source files define DEF_BASIC_BLOCK_FLAG or DEF_EDGE_FLAG
22 : appropriately before including this file. */
23 :
24 : #if !defined(DEF_BASIC_BLOCK_FLAG) && !defined(DEF_EDGE_FLAG)
25 : #error "You must define DEF_BASIC_BLOCK_FLAG or DEF_EDGE_FLAG"
26 : #endif
27 :
28 : #ifdef DEF_BASIC_BLOCK_FLAG
29 :
30 : /* Masks for basic_block.flags.
31 :
32 : The format of this file is: DEF_BASIC_BLOCK_FLAG(NAME, IDX).
33 : NAME is the name of the basic block flag. A flag BB_#NAME will be
34 : created and the name is used in dump_edge_info.
35 : IDX is a sequence number that is used to determine the value
36 : of the flag, which is 1 << IDX).
37 :
38 : BB_HOT_PARTITION and BB_COLD_PARTITION should be preserved throughout
39 : the compilation, so they are never cleared.
40 :
41 : All other flags may be cleared by clear_bb_flags(). It is generally
42 : a bad idea to rely on any flags being up-to-date. */
43 :
44 : /* Only set on blocks that have just been created by create_bb. */
45 : DEF_BASIC_BLOCK_FLAG(NEW, 0)
46 :
47 : /* Set by find_unreachable_blocks. Do not rely on this being set in any
48 : pass. */
49 : DEF_BASIC_BLOCK_FLAG(REACHABLE, 1)
50 :
51 : /* Set for blocks in an irreducible loop by loop analysis. */
52 : DEF_BASIC_BLOCK_FLAG(IRREDUCIBLE_LOOP, 2)
53 :
54 : /* Set on blocks that may actually not be single-entry single-exit block. */
55 : DEF_BASIC_BLOCK_FLAG(SUPERBLOCK, 3)
56 :
57 : /* Set on basic blocks that the scheduler should not touch. This is used
58 : by SMS to prevent other schedulers from messing with the loop schedule. */
59 : DEF_BASIC_BLOCK_FLAG(DISABLE_SCHEDULE, 4)
60 :
61 : /* Set on blocks that should be put in a hot section. */
62 : DEF_BASIC_BLOCK_FLAG(HOT_PARTITION, 5)
63 :
64 : /* Set on blocks that should be put in a cold section. */
65 : DEF_BASIC_BLOCK_FLAG(COLD_PARTITION, 6)
66 :
67 : /* Set on block that was duplicated. */
68 : DEF_BASIC_BLOCK_FLAG(DUPLICATED, 7)
69 :
70 : /* Set if the label at the top of this block is the target of a non-local goto. */
71 : DEF_BASIC_BLOCK_FLAG(NON_LOCAL_GOTO_TARGET, 8)
72 :
73 : /* Set on blocks that are in RTL format. */
74 : DEF_BASIC_BLOCK_FLAG(RTL, 9)
75 :
76 : /* Set on blocks that are forwarder blocks.
77 : Only used in cfgcleanup.cc. */
78 : DEF_BASIC_BLOCK_FLAG(FORWARDER_BLOCK, 10)
79 :
80 : /* Set on blocks that cannot be threaded through.
81 : Only used for jump threading. */
82 : DEF_BASIC_BLOCK_FLAG(NONTHREADABLE_BLOCK, 11)
83 :
84 : /* Set on blocks that were modified in some way. This bit is set in
85 : df_set_bb_dirty, but not cleared by df_analyze, so it can be used
86 : to test whether a block has been modified prior to a df_analyze call. */
87 : DEF_BASIC_BLOCK_FLAG(MODIFIED, 12)
88 :
89 : /* A general visited flag for passes to use. */
90 : DEF_BASIC_BLOCK_FLAG(VISITED, 13)
91 :
92 : /* Set on blocks that are in a transaction. This is calculated on
93 : demand, and is available after calling compute_transaction_bits(). */
94 : DEF_BASIC_BLOCK_FLAG(IN_TRANSACTION, 14)
95 :
96 : /* Set on blocks that are in #pragma GCC suppress_coverage blocks. */
97 : DEF_BASIC_BLOCK_FLAG(COVERAGE_SUPPRESSED, 15)
98 :
99 : #endif
100 :
101 : #ifdef DEF_EDGE_FLAG
102 :
103 : /* Masks for edge.flags.
104 :
105 : The format of this file is: DEF_EDGE_FLAG(NAME, IDX, STRING).
106 : NAME is the name of the edge flag. A flag EDGE_#NAME will be
107 : created and the name is used in dump_edge_info.
108 : IDX is a sequence number that is used to determine the value
109 : of the flag, which is 1 << IDX). */
110 :
111 : /* 'Straight line' flow. In GIMPLE and in cfglayout mode, all normal
112 : edges are fallthru edges. In cfgrtl mode, this flag really means
113 : that control flow falls through to the next basic block in the line. */
114 1382 : DEF_EDGE_FLAG(FALLTHRU, 0)
115 :
116 : /* Strange flow, like a computed jump or exception handling. Usually
117 : this means that the edge cannot be split. */
118 1142 : DEF_EDGE_FLAG(ABNORMAL, 1)
119 :
120 : /* Edge out of a basic block that ends with a CALL_INSN with abnormal
121 : exit, like an exception or a non-local goto.
122 : ABNORMAL_CALL edges also have ABNORMAL set.
123 : This flag is only used for the RTL CFG. */
124 1137 : DEF_EDGE_FLAG(ABNORMAL_CALL, 2)
125 :
126 : /* Exception edge. Exception handling edges represent possible control
127 : transfers from a trapping instruction to an exception handler.
128 : EH edges also have ABNORMAL set for the RTL CFG. */
129 1129 : DEF_EDGE_FLAG(EH, 3)
130 :
131 : /* Never merge blocks via this edge. This is used for exception handling,
132 : to prevent merging away edges to the post-landing-pad basic block.
133 : This flag is only used for the RTL CFG. */
134 1129 : DEF_EDGE_FLAG(PRESERVE, 4)
135 :
136 : /* Not a real edge. This is used to connect parts of the CFG that do
137 : not halt, such as infinite loops and noreturn functions, to the
138 : EXIT_BLOCK, so that traversing of the reverse CFG is possible. */
139 1129 : DEF_EDGE_FLAG(FAKE, 5)
140 :
141 : /* A back edge, marked in a depth-first search of the CFG. Back edges
142 : are hints that this edge may be part of a loop in the CFG. */
143 1129 : DEF_EDGE_FLAG(DFS_BACK, 6)
144 :
145 : /* Edge in a part of the CFG that is an irreducible loop. */
146 1129 : DEF_EDGE_FLAG(IRREDUCIBLE_LOOP, 7)
147 :
148 : /* Edge taken when controlling predicate is nonzero.
149 : This is only used for the GIMPLE CFG. */
150 1129 : DEF_EDGE_FLAG(TRUE_VALUE, 8)
151 :
152 : /* Edge taken when controlling predicate is zero.
153 : This is only used for the GIMPLE CFG. */
154 1113 : DEF_EDGE_FLAG(FALSE_VALUE, 9)
155 :
156 : /* Edge is executable. This is only used in GIMPLE SSA-CCP and VRP.
157 : This is only used for the GIMPLE CFG. */
158 1097 : DEF_EDGE_FLAG(EXECUTABLE, 10)
159 :
160 : /* Edge crosses between hot and cold sections, when we do partitioning.
161 : This flag is only used for the RTL CFG. */
162 1097 : DEF_EDGE_FLAG(CROSSING, 11)
163 :
164 : /* Edge from a sibcall CALL_INSN to exit.
165 : SIBCALL edges also have ABNORMAL set.
166 : This flag is only used for the RTL CFG. */
167 1097 : DEF_EDGE_FLAG(SIBCALL, 12)
168 :
169 : /* Candidate for straight line flow. Only used in bb-reorder.cc.
170 : This flag is only used for the RTL CFG. */
171 1096 : DEF_EDGE_FLAG(CAN_FALLTHRU, 13)
172 :
173 : /* Exit of a loop. This is only used in ifcvt.cc.
174 : This flag is only used for the RTL CFG. */
175 1096 : DEF_EDGE_FLAG(LOOP_EXIT, 14)
176 :
177 : /* Uninstrumented edge out of a GIMPLE_TRANSACTION statement. */
178 1096 : DEF_EDGE_FLAG(TM_UNINSTRUMENTED, 15)
179 :
180 : /* Abort (over) edge out of a GIMPLE_TRANSACTION statement. */
181 1096 : DEF_EDGE_FLAG(TM_ABORT, 16)
182 :
183 : /* An edge we should ignore. It should be entirely local to
184 : passes. ie, it is never set on any edge upon the completion
185 : of any pass. */
186 1096 : DEF_EDGE_FLAG(IGNORE, 17)
187 :
188 : #endif
189 :
190 : /*
191 : Local variables:
192 : mode:c
193 : End:
194 : */
|