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 : #endif
97 :
98 : #ifdef DEF_EDGE_FLAG
99 :
100 : /* Masks for edge.flags.
101 :
102 : The format of this file is: DEF_EDGE_FLAG(NAME, IDX, STRING).
103 : NAME is the name of the edge flag. A flag EDGE_#NAME will be
104 : created and the name is used in dump_edge_info.
105 : IDX is a sequence number that is used to determine the value
106 : of the flag, which is 1 << IDX). */
107 :
108 : /* 'Straight line' flow. In GIMPLE and in cfglayout mode, all normal
109 : edges are fallthru edges. In cfgrtl mode, this flag really means
110 : that control flow falls through to the next basic block in the line. */
111 1339 : DEF_EDGE_FLAG(FALLTHRU, 0)
112 :
113 : /* Strange flow, like a computed jump or exception handling. Usually
114 : this means that the edge cannot be split. */
115 1123 : DEF_EDGE_FLAG(ABNORMAL, 1)
116 :
117 : /* Edge out of a basic block that ends with a CALL_INSN with abnormal
118 : exit, like an exception or a non-local goto.
119 : ABNORMAL_CALL edges also have ABNORMAL set.
120 : This flag is only used for the RTL CFG. */
121 1118 : DEF_EDGE_FLAG(ABNORMAL_CALL, 2)
122 :
123 : /* Exception edge. Exception handling edges represent possible control
124 : transfers from a trapping instruction to an exception handler.
125 : EH edges also have ABNORMAL set for the RTL CFG. */
126 1110 : DEF_EDGE_FLAG(EH, 3)
127 :
128 : /* Never merge blocks via this edge. This is used for exception handling,
129 : to prevent merging away edges to the post-landing-pad basic block.
130 : This flag is only used for the RTL CFG. */
131 1110 : DEF_EDGE_FLAG(PRESERVE, 4)
132 :
133 : /* Not a real edge. This is used to connect parts of the CFG that do
134 : not halt, such as infinite loops and noreturn functions, to the
135 : EXIT_BLOCK, so that traversing of the reverse CFG is possible. */
136 1110 : DEF_EDGE_FLAG(FAKE, 5)
137 :
138 : /* A back edge, marked in a depth-first search of the CFG. Back edges
139 : are hints that this edge may be part of a loop in the CFG. */
140 1110 : DEF_EDGE_FLAG(DFS_BACK, 6)
141 :
142 : /* Edge in a part of the CFG that is an irreducible loop. */
143 1110 : DEF_EDGE_FLAG(IRREDUCIBLE_LOOP, 7)
144 :
145 : /* Edge taken when controlling predicate is nonzero.
146 : This is only used for the GIMPLE CFG. */
147 1110 : DEF_EDGE_FLAG(TRUE_VALUE, 8)
148 :
149 : /* Edge taken when controlling predicate is zero.
150 : This is only used for the GIMPLE CFG. */
151 1102 : DEF_EDGE_FLAG(FALSE_VALUE, 9)
152 :
153 : /* Edge is executable. This is only used in GIMPLE SSA-CCP and VRP.
154 : This is only used for the GIMPLE CFG. */
155 1094 : DEF_EDGE_FLAG(EXECUTABLE, 10)
156 :
157 : /* Edge crosses between hot and cold sections, when we do partitioning.
158 : This flag is only used for the RTL CFG. */
159 1094 : DEF_EDGE_FLAG(CROSSING, 11)
160 :
161 : /* Edge from a sibcall CALL_INSN to exit.
162 : SIBCALL edges also have ABNORMAL set.
163 : This flag is only used for the RTL CFG. */
164 1094 : DEF_EDGE_FLAG(SIBCALL, 12)
165 :
166 : /* Candidate for straight line flow. Only used in bb-reorder.cc.
167 : This flag is only used for the RTL CFG. */
168 1093 : DEF_EDGE_FLAG(CAN_FALLTHRU, 13)
169 :
170 : /* Exit of a loop. This is only used in ifcvt.cc.
171 : This flag is only used for the RTL CFG. */
172 1093 : DEF_EDGE_FLAG(LOOP_EXIT, 14)
173 :
174 : /* Uninstrumented edge out of a GIMPLE_TRANSACTION statement. */
175 1093 : DEF_EDGE_FLAG(TM_UNINSTRUMENTED, 15)
176 :
177 : /* Abort (over) edge out of a GIMPLE_TRANSACTION statement. */
178 1093 : DEF_EDGE_FLAG(TM_ABORT, 16)
179 :
180 : /* An edge we should ignore. It should be entirely local to
181 : passes. ie, it is never set on any edge upon the completion
182 : of any pass. */
183 1093 : DEF_EDGE_FLAG(IGNORE, 17)
184 :
185 : #endif
186 :
187 : /*
188 : Local variables:
189 : mode:c
190 : End:
191 : */
|