]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/cfg-flags.def
re PR libstdc++/55169 (std::discrete_distribution::operator(generator&) makes unneces...
[thirdparty/gcc.git] / gcc / cfg-flags.def
CommitLineData
a315c44c
SB
1/* Flags on basic blocks and edges.
2 Copyright (C) 2012 Free Software Foundation, Inc.
3
4This file is part of GCC.
5
6GCC is free software; you can redistribute it and/or modify it under
7the terms of the GNU General Public License as published by the Free
8Software Foundation; either version 3, or (at your option) any later
9version.
10
11GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12WARRANTY; without even the implied warranty of MERCHANTABILITY or
13FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14for more details.
15
16You should have received a copy of the GNU General Public License
17along 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. */
45DEF_BASIC_BLOCK_FLAG(NEW, 0)
46
47/* Set by find_unreachable_blocks. Do not rely on this being set in any
48 pass. */
49DEF_BASIC_BLOCK_FLAG(REACHABLE, 1)
50
51/* Set for blocks in an irreducible loop by loop analysis. */
52DEF_BASIC_BLOCK_FLAG(IRREDUCIBLE_LOOP, 2)
53
54/* Set on blocks that may actually not be single-entry single-exit block. */
55DEF_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. */
59DEF_BASIC_BLOCK_FLAG(DISABLE_SCHEDULE, 4)
60
61/* Set on blocks that should be put in a hot section. */
62DEF_BASIC_BLOCK_FLAG(HOT_PARTITION, 5)
63
64/* Set on blocks that should be put in a cold section. */
65DEF_BASIC_BLOCK_FLAG(COLD_PARTITION, 6)
66
67/* Set on block that was duplicated. */
68DEF_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. */
71DEF_BASIC_BLOCK_FLAG(NON_LOCAL_GOTO_TARGET, 8)
72
73/* Set on blocks that are in RTL format. */
74DEF_BASIC_BLOCK_FLAG(RTL, 9)
75
76/* Set on blocks that are forwarder blocks.
77 Only used in cfgcleanup.c. */
78DEF_BASIC_BLOCK_FLAG(FORWARDER_BLOCK, 10)
79
80/* Set on blocks that cannot be threaded through.
81 Only used in cfgcleanup.c. */
82DEF_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. */
87DEF_BASIC_BLOCK_FLAG(MODIFIED, 12)
88
89/* A general visited flag for passes to use. */
90DEF_BASIC_BLOCK_FLAG(VISITED, 13)
91
92/* Set on blocks that are in a transaction. This is calculated on
c4669594 93 demand, and is available after calling compute_transaction_bits(). */
a315c44c
SB
94DEF_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. */
111DEF_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. */
115DEF_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 sibcall.
119 This flag is only used for the RTL CFG. */
120DEF_EDGE_FLAG(ABNORMAL_CALL, 2)
121
122/* Exception edge. Exception handling edges represent possible control
123 transfers from a trapping instruction to an exception handler. EH
124 edges also have EDGE_ABNORMAL set. */
125DEF_EDGE_FLAG(EH, 3)
126
127/* Never merge blocks via this edge. This is used for exception handling,
128 to prevent merging away edges to the post-landing-pad basic block.
129 This flag is only used for the RTL CFG. */
130DEF_EDGE_FLAG(PRESERVE, 4)
131
132/* Not a real edge. This is used to connect parts of the CFG that do
133 not halt, such as infinite loops and noreturn functions, to the
134 EXIT_BLOCK, so that traversing of the reverse CFG is possible. */
135DEF_EDGE_FLAG(FAKE, 5)
136
137/* A back edge, marked in a depth-first search of the CFG. Back edges
138 are hints that this edge may be part of a loop in the CFG. */
139DEF_EDGE_FLAG(DFS_BACK, 6)
140
141/* Edge in a part of the CFG that is an irreducible loop. */
142DEF_EDGE_FLAG(IRREDUCIBLE_LOOP, 7)
143
144/* Edge taken when controlling predicate is nonzero.
145 This is only used for the GIMPLE CFG. */
146DEF_EDGE_FLAG(TRUE_VALUE, 8)
147
148/* Edge taken when controlling predicate is zero.
149 This is only used for the GIMPLE CFG. */
150DEF_EDGE_FLAG(FALSE_VALUE, 9)
151
152/* Edge is executable. This is only used in GIMPLE SSA-CCP and VRP.
153 This is only used for the GIMPLE CFG. */
154DEF_EDGE_FLAG(EXECUTABLE, 10)
155
156/* Edge crosses between hot and cold sections, when we do partitioning.
157 This flag is only used for the RTL CFG. */
158DEF_EDGE_FLAG(CROSSING, 11)
159
160/* Edge from a sibcall CALL_INSN to exit.
161 This flag is only used for the RTL CFG. */
162DEF_EDGE_FLAG(SIBCALL, 12)
163
164/* Candidate for straight line flow. Only used in bb-reorder.c.
165 This flag is only used for the RTL CFG. */
166DEF_EDGE_FLAG(CAN_FALLTHRU, 13)
167
168/* Exit of a loop. This is only used in ifcvt.c.
169 This flag is only used for the RTL CFG. */
170DEF_EDGE_FLAG(LOOP_EXIT, 14)
171
172#endif
173
174/*
175Local variables:
176mode:c
177End:
178*/