annotate gcc/dumpfile.h @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents 84e7813d76e9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* Definitions for the shared dumpfile.
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2 Copyright (C) 2004-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
kono
parents:
diff changeset
7 it 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,
kono
parents:
diff changeset
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
kono
parents:
diff changeset
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
kono
parents:
diff changeset
14 GNU General Public 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
kono
parents:
diff changeset
21 #ifndef GCC_DUMPFILE_H
kono
parents:
diff changeset
22 #define GCC_DUMPFILE_H 1
kono
parents:
diff changeset
23
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
24 #include "profile-count.h"
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
25
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
26 /* An attribute for annotating formatting printing functions that use
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
27 the dumpfile/optinfo formatting codes. These are the pretty_printer
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
28 format codes (see pretty-print.c), with additional codes for middle-end
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
29 specific entities (see dumpfile.c). */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
30
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
31 #if GCC_VERSION >= 9000
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
32 #define ATTRIBUTE_GCC_DUMP_PRINTF(m, n) \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
33 __attribute__ ((__format__ (__gcc_dump_printf__, m ,n))) \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
34 ATTRIBUTE_NONNULL(m)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
35 #else
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
36 #define ATTRIBUTE_GCC_DUMP_PRINTF(m, n) ATTRIBUTE_NONNULL(m)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
37 #endif
111
kono
parents:
diff changeset
38
kono
parents:
diff changeset
39 /* Different tree dump places. When you add new tree dump places,
kono
parents:
diff changeset
40 extend the DUMP_FILES array in dumpfile.c. */
kono
parents:
diff changeset
41 enum tree_dump_index
kono
parents:
diff changeset
42 {
kono
parents:
diff changeset
43 TDI_none, /* No dump */
kono
parents:
diff changeset
44 TDI_cgraph, /* dump function call graph. */
kono
parents:
diff changeset
45 TDI_inheritance, /* dump type inheritance graph. */
kono
parents:
diff changeset
46 TDI_clones, /* dump IPA cloning decisions. */
kono
parents:
diff changeset
47 TDI_original, /* dump each function before optimizing it */
kono
parents:
diff changeset
48 TDI_gimple, /* dump each function after gimplifying it */
kono
parents:
diff changeset
49 TDI_nested, /* dump each function after unnesting it */
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
50 TDI_lto_stream_out, /* dump information about lto streaming */
111
kono
parents:
diff changeset
51
kono
parents:
diff changeset
52 TDI_lang_all, /* enable all the language dumps. */
kono
parents:
diff changeset
53 TDI_tree_all, /* enable all the GENERIC/GIMPLE dumps. */
kono
parents:
diff changeset
54 TDI_rtl_all, /* enable all the RTL dumps. */
kono
parents:
diff changeset
55 TDI_ipa_all, /* enable all the IPA dumps. */
kono
parents:
diff changeset
56
kono
parents:
diff changeset
57 TDI_end
kono
parents:
diff changeset
58 };
kono
parents:
diff changeset
59
kono
parents:
diff changeset
60 /* Enum used to distinguish dump files to types. */
kono
parents:
diff changeset
61
kono
parents:
diff changeset
62 enum dump_kind
kono
parents:
diff changeset
63 {
kono
parents:
diff changeset
64 DK_none,
kono
parents:
diff changeset
65 DK_lang,
kono
parents:
diff changeset
66 DK_tree,
kono
parents:
diff changeset
67 DK_rtl,
kono
parents:
diff changeset
68 DK_ipa
kono
parents:
diff changeset
69 };
kono
parents:
diff changeset
70
kono
parents:
diff changeset
71 /* Bit masks to control dumping. Not all values are applicable to all
kono
parents:
diff changeset
72 dumps. Add new ones at the end. When you define new values, extend
kono
parents:
diff changeset
73 the DUMP_OPTIONS array in dumpfile.c. The TDF_* flags coexist with
kono
parents:
diff changeset
74 MSG_* flags (for -fopt-info) and the bit values must be chosen to
kono
parents:
diff changeset
75 allow that. */
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
76 enum dump_flag
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
77 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
78 /* Value of TDF_NONE is used just for bits filtered by TDF_KIND_MASK. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
79 TDF_NONE = 0,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
80
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
81 /* Dump node addresses. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
82 TDF_ADDRESS = (1 << 0),
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
83
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
84 /* Don't go wild following links. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
85 TDF_SLIM = (1 << 1),
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
86
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
87 /* Don't unparse the function. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
88 TDF_RAW = (1 << 2),
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
89
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
90 /* Show more detailed info about each pass. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
91 TDF_DETAILS = (1 << 3),
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
92
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
93 /* Dump various statistics about each pass. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
94 TDF_STATS = (1 << 4),
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
95
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
96 /* Display basic block boundaries. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
97 TDF_BLOCKS = (1 << 5),
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
98
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
99 /* Display virtual operands. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
100 TDF_VOPS = (1 << 6),
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
101
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
102 /* Display statement line numbers. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
103 TDF_LINENO = (1 << 7),
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
104
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
105 /* Display decl UIDs. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
106 TDF_UID = (1 << 8),
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
107
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
108 /* Address of stmt. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
109 TDF_STMTADDR = (1 << 9),
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
110
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
111 /* A graph dump is being emitted. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
112 TDF_GRAPH = (1 << 10),
111
kono
parents:
diff changeset
113
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
114 /* Display memory symbols in expr.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
115 Implies TDF_VOPS. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
116 TDF_MEMSYMS = (1 << 11),
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
117
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
118 /* A flag to only print the RHS of a gimple stmt. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
119 TDF_RHS_ONLY = (1 << 12),
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
120
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
121 /* Display asm names of decls. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
122 TDF_ASMNAME = (1 << 13),
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
123
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
124 /* Display EH region number holding this gimple statement. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
125 TDF_EH = (1 << 14),
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
126
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
127 /* Omit UIDs from dumps. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
128 TDF_NOUID = (1 << 15),
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
129
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
130 /* Display alias information. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
131 TDF_ALIAS = (1 << 16),
111
kono
parents:
diff changeset
132
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
133 /* Enumerate locals by uid. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
134 TDF_ENUMERATE_LOCALS = (1 << 17),
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
135
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
136 /* Dump cselib details. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
137 TDF_CSELIB = (1 << 18),
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
138
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
139 /* Dump SCEV details. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
140 TDF_SCEV = (1 << 19),
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
141
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
142 /* Dump in GIMPLE FE syntax */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
143 TDF_GIMPLE = (1 << 20),
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
144
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
145 /* Dump folding details. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
146 TDF_FOLDING = (1 << 21),
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
147
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
148 /* MSG_* flags for expressing the kinds of message to
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
149 be emitted by -fopt-info. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
150
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
151 /* -fopt-info optimized sources. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
152 MSG_OPTIMIZED_LOCATIONS = (1 << 22),
111
kono
parents:
diff changeset
153
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
154 /* Missed opportunities. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
155 MSG_MISSED_OPTIMIZATION = (1 << 23),
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
156
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
157 /* General optimization info. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
158 MSG_NOTE = (1 << 24),
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
159
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
160 /* Mask for selecting MSG_-kind flags. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
161 MSG_ALL_KINDS = (MSG_OPTIMIZED_LOCATIONS
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
162 | MSG_MISSED_OPTIMIZATION
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
163 | MSG_NOTE),
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
164
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
165 /* MSG_PRIORITY_* flags for expressing the priority levels of message
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
166 to be emitted by -fopt-info, and filtering on them.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
167 By default, messages at the top-level dump scope are "user-facing",
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
168 whereas those that are in nested scopes are implicitly "internals".
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
169 This behavior can be overridden for a given dump message by explicitly
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
170 specifying one of the MSG_PRIORITY_* flags.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
171
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
172 By default, dump files show both kinds of message, whereas -fopt-info
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
173 only shows "user-facing" messages, and requires the "-internals"
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
174 sub-option of -fopt-info to show the internal messages. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
175
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
176 /* Implicitly supplied for messages at the top-level dump scope. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
177 MSG_PRIORITY_USER_FACING = (1 << 25),
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
178
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
179 /* Implicitly supplied for messages within nested dump scopes. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
180 MSG_PRIORITY_INTERNALS = (1 << 26),
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
181
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
182 /* Supplied when an opt_problem generated in a nested scope is re-emitted
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
183 at the top-level. We want to default to showing these in -fopt-info
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
184 output, but to *not* show them in dump files, as the message would be
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
185 shown twice, messing up "scan-tree-dump-times" in DejaGnu tests. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
186 MSG_PRIORITY_REEMITTED = (1 << 27),
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
187
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
188 /* Mask for selecting MSG_PRIORITY_* flags. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
189 MSG_ALL_PRIORITIES = (MSG_PRIORITY_USER_FACING
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
190 | MSG_PRIORITY_INTERNALS
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
191 | MSG_PRIORITY_REEMITTED),
111
kono
parents:
diff changeset
192
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
193 /* Dumping for -fcompare-debug. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
194 TDF_COMPARE_DEBUG = (1 << 28),
111
kono
parents:
diff changeset
195
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
196 /* For error. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
197 TDF_ERROR = (1 << 26),
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
198
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
199 /* All values. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
200 TDF_ALL_VALUES = (1 << 29) - 1
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
201 };
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
202
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
203 /* Dump flags type. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
204
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
205 typedef enum dump_flag dump_flags_t;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
206
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
207 static inline dump_flags_t
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
208 operator| (dump_flags_t lhs, dump_flags_t rhs)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
209 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
210 return (dump_flags_t)((int)lhs | (int)rhs);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
211 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
212
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
213 static inline dump_flags_t
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
214 operator& (dump_flags_t lhs, dump_flags_t rhs)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
215 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
216 return (dump_flags_t)((int)lhs & (int)rhs);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
217 }
111
kono
parents:
diff changeset
218
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
219 static inline dump_flags_t
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
220 operator~ (dump_flags_t flags)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
221 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
222 return (dump_flags_t)~((int)flags);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
223 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
224
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
225 static inline dump_flags_t &
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
226 operator|= (dump_flags_t &lhs, dump_flags_t rhs)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
227 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
228 lhs = (dump_flags_t)((int)lhs | (int)rhs);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
229 return lhs;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
230 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
231
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
232 static inline dump_flags_t &
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
233 operator&= (dump_flags_t &lhs, dump_flags_t rhs)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
234 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
235 lhs = (dump_flags_t)((int)lhs & (int)rhs);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
236 return lhs;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
237 }
111
kono
parents:
diff changeset
238
kono
parents:
diff changeset
239 /* Flags to control high-level -fopt-info dumps. Usually these flags
kono
parents:
diff changeset
240 define a group of passes. An optimization pass can be part of
kono
parents:
diff changeset
241 multiple groups. */
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
242
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
243 enum optgroup_flag
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
244 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
245 OPTGROUP_NONE = 0,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
246
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
247 /* IPA optimization passes */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
248 OPTGROUP_IPA = (1 << 1),
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
249
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
250 /* Loop optimization passes */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
251 OPTGROUP_LOOP = (1 << 2),
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
252
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
253 /* Inlining passes */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
254 OPTGROUP_INLINE = (1 << 3),
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
255
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
256 /* OMP (Offloading and Multi Processing) transformations */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
257 OPTGROUP_OMP = (1 << 4),
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
258
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
259 /* Vectorization passes */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
260 OPTGROUP_VEC = (1 << 5),
111
kono
parents:
diff changeset
261
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
262 /* All other passes */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
263 OPTGROUP_OTHER = (1 << 6),
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
264
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
265 OPTGROUP_ALL = (OPTGROUP_IPA | OPTGROUP_LOOP | OPTGROUP_INLINE
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
266 | OPTGROUP_OMP | OPTGROUP_VEC | OPTGROUP_OTHER)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
267 };
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
268
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
269 typedef enum optgroup_flag optgroup_flags_t;
111
kono
parents:
diff changeset
270
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
271 static inline optgroup_flags_t
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
272 operator| (optgroup_flags_t lhs, optgroup_flags_t rhs)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
273 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
274 return (optgroup_flags_t)((int)lhs | (int)rhs);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
275 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
276
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
277 static inline optgroup_flags_t &
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
278 operator|= (optgroup_flags_t &lhs, optgroup_flags_t rhs)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
279 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
280 lhs = (optgroup_flags_t)((int)lhs | (int)rhs);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
281 return lhs;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
282 }
111
kono
parents:
diff changeset
283
kono
parents:
diff changeset
284 /* Define a tree dump switch. */
kono
parents:
diff changeset
285 struct dump_file_info
kono
parents:
diff changeset
286 {
kono
parents:
diff changeset
287 /* Suffix to give output file. */
kono
parents:
diff changeset
288 const char *suffix;
kono
parents:
diff changeset
289 /* Command line dump switch. */
kono
parents:
diff changeset
290 const char *swtch;
kono
parents:
diff changeset
291 /* Command line glob. */
kono
parents:
diff changeset
292 const char *glob;
kono
parents:
diff changeset
293 /* Filename for the pass-specific stream. */
kono
parents:
diff changeset
294 const char *pfilename;
kono
parents:
diff changeset
295 /* Filename for the -fopt-info stream. */
kono
parents:
diff changeset
296 const char *alt_filename;
kono
parents:
diff changeset
297 /* Pass-specific dump stream. */
kono
parents:
diff changeset
298 FILE *pstream;
kono
parents:
diff changeset
299 /* -fopt-info stream. */
kono
parents:
diff changeset
300 FILE *alt_stream;
kono
parents:
diff changeset
301 /* Dump kind. */
kono
parents:
diff changeset
302 dump_kind dkind;
kono
parents:
diff changeset
303 /* Dump flags. */
kono
parents:
diff changeset
304 dump_flags_t pflags;
kono
parents:
diff changeset
305 /* A pass flags for -fopt-info. */
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
306 dump_flags_t alt_flags;
111
kono
parents:
diff changeset
307 /* Flags for -fopt-info given by a user. */
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
308 optgroup_flags_t optgroup_flags;
111
kono
parents:
diff changeset
309 /* State of pass-specific stream. */
kono
parents:
diff changeset
310 int pstate;
kono
parents:
diff changeset
311 /* State of the -fopt-info stream. */
kono
parents:
diff changeset
312 int alt_state;
kono
parents:
diff changeset
313 /* Dump file number. */
kono
parents:
diff changeset
314 int num;
kono
parents:
diff changeset
315 /* Fields "suffix", "swtch", "glob" can be const strings,
kono
parents:
diff changeset
316 or can be dynamically allocated, needing free. */
kono
parents:
diff changeset
317 bool owns_strings;
kono
parents:
diff changeset
318 /* When a given dump file is being initialized, this flag is set to true
kono
parents:
diff changeset
319 if the corresponding TDF_graph dump file has also been initialized. */
kono
parents:
diff changeset
320 bool graph_dump_initialized;
kono
parents:
diff changeset
321 };
kono
parents:
diff changeset
322
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
323 /* A class for describing where in the user's source that a dump message
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
324 relates to, with various constructors for convenience.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
325 In particular, this lets us associate dump messages
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
326 with hotness information (e.g. from PGO), allowing them to
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
327 be prioritized by code hotness. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
328
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
329 class dump_user_location_t
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
330 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
331 public:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
332 /* Default constructor, analogous to UNKNOWN_LOCATION. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
333 dump_user_location_t () : m_count (), m_loc (UNKNOWN_LOCATION) {}
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
334
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
335 /* Construct from a gimple statement (using its location and hotness). */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
336 dump_user_location_t (const gimple *stmt);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
337
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
338 /* Construct from an RTL instruction (using its location and hotness). */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
339 dump_user_location_t (const rtx_insn *insn);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
340
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
341 /* Construct from a location_t. This one is deprecated (since it doesn't
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
342 capture hotness information); it thus needs to be spelled out. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
343 static dump_user_location_t
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
344 from_location_t (location_t loc)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
345 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
346 return dump_user_location_t (profile_count (), loc);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
347 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
348
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
349 /* Construct from a function declaration. This one requires spelling out
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
350 to avoid accidentally constructing from other kinds of tree. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
351 static dump_user_location_t
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
352 from_function_decl (tree fndecl);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
353
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
354 profile_count get_count () const { return m_count; }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
355 location_t get_location_t () const { return m_loc; }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
356
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
357 private:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
358 /* Private ctor from count and location, for use by from_location_t. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
359 dump_user_location_t (profile_count count, location_t loc)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
360 : m_count (count), m_loc (loc)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
361 {}
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
362
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
363 profile_count m_count;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
364 location_t m_loc;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
365 };
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
366
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
367 /* A class for identifying where in the compiler's own source
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
368 (or a plugin) that a dump message is being emitted from. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
369
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
370 class dump_impl_location_t
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
371 {
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
372 public:
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
373 dump_impl_location_t (
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
374 #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
375 const char *file = __builtin_FILE (),
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
376 int line = __builtin_LINE (),
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
377 const char *function = __builtin_FUNCTION ()
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
378 #else
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
379 const char *file = __FILE__,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
380 int line = __LINE__,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
381 const char *function = NULL
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
382 #endif
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
383 )
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
384 : m_file (file), m_line (line), m_function (function)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
385 {}
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
386
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
387 const char *m_file;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
388 int m_line;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
389 const char *m_function;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
390 };
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
391
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
392 /* A bundle of metadata for describing a dump message:
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
393 (a) the dump_flags
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
394 (b) the source location within the compiler/plugin.
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
395
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
396 The constructors use default parameters so that (b) gets sets up
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
397 automatically.
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
398
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
399 Hence you can pass in e.g. MSG_NOTE, and the dump call
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
400 will automatically record where in GCC's source code the
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
401 dump was emitted from. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
402
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
403 class dump_metadata_t
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
404 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
405 public:
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
406 dump_metadata_t (dump_flags_t dump_flags,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
407 const dump_impl_location_t &impl_location
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
408 = dump_impl_location_t ())
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
409 : m_dump_flags (dump_flags),
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
410 m_impl_location (impl_location)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
411 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
412 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
413
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
414 dump_flags_t get_dump_flags () const { return m_dump_flags; }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
415
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
416 const dump_impl_location_t &
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
417 get_impl_location () const { return m_impl_location; }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
418
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
419 private:
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
420 dump_flags_t m_dump_flags;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
421 dump_impl_location_t m_impl_location;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
422 };
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
423
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
424 /* A bundle of information for describing the location of a dump message:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
425 (a) the source location and hotness within the user's code, together with
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
426 (b) the source location within the compiler/plugin.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
427
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
428 The constructors use default parameters so that (b) gets sets up
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
429 automatically.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
430
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
431 The upshot is that you can pass in e.g. a gimple * to dump_printf_loc,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
432 and the dump call will automatically record where in GCC's source
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
433 code the dump was emitted from. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
434
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
435 class dump_location_t
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
436 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
437 public:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
438 /* Default constructor, analogous to UNKNOWN_LOCATION. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
439 dump_location_t (const dump_impl_location_t &impl_location
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
440 = dump_impl_location_t ())
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
441 : m_user_location (dump_user_location_t ()),
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
442 m_impl_location (impl_location)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
443 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
444 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
445
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
446 /* Construct from a gimple statement (using its location and hotness). */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
447 dump_location_t (const gimple *stmt,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
448 const dump_impl_location_t &impl_location
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
449 = dump_impl_location_t ())
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
450 : m_user_location (dump_user_location_t (stmt)),
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
451 m_impl_location (impl_location)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
452 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
453 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
454
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
455 /* Construct from an RTL instruction (using its location and hotness). */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
456 dump_location_t (const rtx_insn *insn,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
457 const dump_impl_location_t &impl_location
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
458 = dump_impl_location_t ())
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
459 : m_user_location (dump_user_location_t (insn)),
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
460 m_impl_location (impl_location)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
461 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
462 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
463
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
464 /* Construct from a dump_user_location_t. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
465 dump_location_t (const dump_user_location_t &user_location,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
466 const dump_impl_location_t &impl_location
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
467 = dump_impl_location_t ())
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
468 : m_user_location (user_location),
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
469 m_impl_location (impl_location)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
470 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
471 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
472
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
473 /* Construct from a location_t. This one is deprecated (since it doesn't
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
474 capture hotness information), and thus requires spelling out. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
475 static dump_location_t
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
476 from_location_t (location_t loc,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
477 const dump_impl_location_t &impl_location
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
478 = dump_impl_location_t ())
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
479 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
480 return dump_location_t (dump_user_location_t::from_location_t (loc),
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
481 impl_location);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
482 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
483
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
484 const dump_user_location_t &
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
485 get_user_location () const { return m_user_location; }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
486
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
487 const dump_impl_location_t &
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
488 get_impl_location () const { return m_impl_location; }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
489
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
490 location_t get_location_t () const
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
491 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
492 return m_user_location.get_location_t ();
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
493 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
494
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
495 profile_count get_count () const { return m_user_location.get_count (); }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
496
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
497 private:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
498 dump_user_location_t m_user_location;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
499 dump_impl_location_t m_impl_location;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
500 };
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
501
111
kono
parents:
diff changeset
502 /* In dumpfile.c */
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
503 extern FILE *dump_begin (int, dump_flags_t *, int part=-1);
111
kono
parents:
diff changeset
504 extern void dump_end (int, FILE *);
kono
parents:
diff changeset
505 extern int opt_info_switch_p (const char *);
kono
parents:
diff changeset
506 extern const char *dump_flag_name (int);
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
507 extern const kv_pair<optgroup_flags_t> optgroup_options[];
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
508 extern dump_flags_t
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
509 parse_dump_option (const char *, const char **);
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
510
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
511 /* Global variables used to communicate with passes. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
512 extern FILE *dump_file;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
513 extern dump_flags_t dump_flags;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
514 extern const char *dump_file_name;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
515
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
516 extern bool dumps_are_enabled;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
517
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
518 extern void set_dump_file (FILE *new_dump_file);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
519
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
520 /* Return true if any of the dumps is enabled, false otherwise. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
521 static inline bool
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
522 dump_enabled_p (void)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
523 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
524 return dumps_are_enabled;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
525 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
526
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
527 /* The following API calls (which *don't* take a "FILE *")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
528 write the output to zero or more locations.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
529
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
530 Some destinations are written to immediately as dump_* calls
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
531 are made; for others, the output is consolidated into an "optinfo"
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
532 instance (with its own metadata), and only emitted once the optinfo
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
533 is complete.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
534
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
535 The destinations are:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
536
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
537 (a) the "immediate" destinations:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
538 (a.1) the active dump_file, if any
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
539 (a.2) the -fopt-info destination, if any
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
540 (b) the "optinfo" destinations, if any:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
541 (b.1) as optimization records
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
542
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
543 dump_* (MSG_*) --> dumpfile.c --> items --> (a.1) dump_file
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
544 | `-> (a.2) alt_dump_file
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
545 |
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
546 `--> (b) optinfo
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
547 `---> optinfo destinations
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
548 (b.1) optimization records
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
549
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
550 For optinfos, the dump_*_loc mark the beginning of an optinfo
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
551 instance: all subsequent dump_* calls are consolidated into
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
552 that optinfo, until the next dump_*_loc call (or a change in
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
553 dump scope, or a call to dumpfile_ensure_any_optinfo_are_flushed).
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
554
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
555 A group of dump_* calls should be guarded by:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
556
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
557 if (dump_enabled_p ())
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
558
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
559 to minimize the work done for the common case where dumps
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
560 are disabled. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
561
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
562 extern void dump_printf (const dump_metadata_t &, const char *, ...)
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
563 ATTRIBUTE_GCC_DUMP_PRINTF (2, 3);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
564
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
565 extern void dump_printf_loc (const dump_metadata_t &, const dump_user_location_t &,
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
566 const char *, ...)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
567 ATTRIBUTE_GCC_DUMP_PRINTF (3, 0);
111
kono
parents:
diff changeset
568 extern void dump_function (int phase, tree fn);
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
569 extern void dump_basic_block (dump_flags_t, basic_block, int);
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
570 extern void dump_generic_expr_loc (const dump_metadata_t &,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
571 const dump_user_location_t &,
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
572 dump_flags_t, tree);
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
573 extern void dump_generic_expr (const dump_metadata_t &, dump_flags_t, tree);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
574 extern void dump_gimple_stmt_loc (const dump_metadata_t &,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
575 const dump_user_location_t &,
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
576 dump_flags_t, gimple *, int);
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
577 extern void dump_gimple_stmt (const dump_metadata_t &, dump_flags_t, gimple *, int);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
578 extern void dump_gimple_expr_loc (const dump_metadata_t &,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
579 const dump_user_location_t &,
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
580 dump_flags_t, gimple *, int);
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
581 extern void dump_gimple_expr (const dump_metadata_t &, dump_flags_t, gimple *, int);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
582 extern void dump_symtab_node (const dump_metadata_t &, symtab_node *);
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
583
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
584 template<unsigned int N, typename C>
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
585 void dump_dec (const dump_metadata_t &, const poly_int<N, C> &);
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
586 extern void dump_dec (dump_flags_t, const poly_wide_int &, signop);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
587 extern void dump_hex (dump_flags_t, const poly_wide_int &);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
588
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
589 extern void dumpfile_ensure_any_optinfo_are_flushed ();
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
590
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
591 /* Managing nested scopes, so that dumps can express the call chain
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
592 leading to a dump message. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
593
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
594 extern unsigned int get_dump_scope_depth ();
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
595 extern void dump_begin_scope (const char *name,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
596 const dump_user_location_t &user_location,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
597 const dump_impl_location_t &impl_location);
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
598 extern void dump_end_scope ();
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
599
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
600 /* Implementation detail of the AUTO_DUMP_SCOPE macro below.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
601
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
602 A RAII-style class intended to make it easy to emit dump
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
603 information about entering and exiting a collection of nested
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
604 function calls. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
605
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
606 class auto_dump_scope
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
607 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
608 public:
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
609 auto_dump_scope (const char *name,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
610 const dump_user_location_t &user_location,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
611 const dump_impl_location_t &impl_location
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
612 = dump_impl_location_t ())
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
613 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
614 if (dump_enabled_p ())
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
615 dump_begin_scope (name, user_location, impl_location);
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
616 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
617 ~auto_dump_scope ()
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
618 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
619 if (dump_enabled_p ())
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
620 dump_end_scope ();
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
621 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
622 };
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
623
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
624 /* A macro for calling:
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
625 dump_begin_scope (NAME, USER_LOC);
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
626 via an RAII object, thus printing "=== MSG ===\n" to the dumpfile etc,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
627 and then calling
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
628 dump_end_scope ();
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
629 once the object goes out of scope, thus capturing the nesting of
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
630 the scopes.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
631
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
632 These scopes affect dump messages within them: dump messages at the
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
633 top level implicitly default to MSG_PRIORITY_USER_FACING, whereas those
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
634 in a nested scope implicitly default to MSG_PRIORITY_INTERNALS. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
635
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
636 #define AUTO_DUMP_SCOPE(NAME, USER_LOC) \
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
637 auto_dump_scope scope (NAME, USER_LOC)
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
638
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
639 extern void dump_function (int phase, tree fn);
111
kono
parents:
diff changeset
640 extern void print_combine_total_stats (void);
kono
parents:
diff changeset
641 extern bool enable_rtl_dump_file (void);
kono
parents:
diff changeset
642
kono
parents:
diff changeset
643 /* In tree-dump.c */
kono
parents:
diff changeset
644 extern void dump_node (const_tree, dump_flags_t, FILE *);
kono
parents:
diff changeset
645
kono
parents:
diff changeset
646 /* In combine.c */
kono
parents:
diff changeset
647 extern void dump_combine_total_stats (FILE *);
kono
parents:
diff changeset
648 /* In cfghooks.c */
kono
parents:
diff changeset
649 extern void dump_bb (FILE *, basic_block, int, dump_flags_t);
kono
parents:
diff changeset
650
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
651 class opt_pass;
111
kono
parents:
diff changeset
652
kono
parents:
diff changeset
653 namespace gcc {
kono
parents:
diff changeset
654
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
655 /* A class for managing all of the various dump files used by the
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
656 optimization passes. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
657
111
kono
parents:
diff changeset
658 class dump_manager
kono
parents:
diff changeset
659 {
kono
parents:
diff changeset
660 public:
kono
parents:
diff changeset
661
kono
parents:
diff changeset
662 dump_manager ();
kono
parents:
diff changeset
663 ~dump_manager ();
kono
parents:
diff changeset
664
kono
parents:
diff changeset
665 /* Register a dumpfile.
kono
parents:
diff changeset
666
kono
parents:
diff changeset
667 TAKE_OWNERSHIP determines whether callee takes ownership of strings
kono
parents:
diff changeset
668 SUFFIX, SWTCH, and GLOB. */
kono
parents:
diff changeset
669 unsigned int
kono
parents:
diff changeset
670 dump_register (const char *suffix, const char *swtch, const char *glob,
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
671 dump_kind dkind, optgroup_flags_t optgroup_flags,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
672 bool take_ownership);
111
kono
parents:
diff changeset
673
kono
parents:
diff changeset
674 /* Allow languages and middle-end to register their dumps before the
kono
parents:
diff changeset
675 optimization passes. */
kono
parents:
diff changeset
676 void
kono
parents:
diff changeset
677 register_dumps ();
kono
parents:
diff changeset
678
kono
parents:
diff changeset
679 /* Return the dump_file_info for the given phase. */
kono
parents:
diff changeset
680 struct dump_file_info *
kono
parents:
diff changeset
681 get_dump_file_info (int phase) const;
kono
parents:
diff changeset
682
kono
parents:
diff changeset
683 struct dump_file_info *
kono
parents:
diff changeset
684 get_dump_file_info_by_switch (const char *swtch) const;
kono
parents:
diff changeset
685
kono
parents:
diff changeset
686 /* Return the name of the dump file for the given phase.
kono
parents:
diff changeset
687 If the dump is not enabled, returns NULL. */
kono
parents:
diff changeset
688 char *
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
689 get_dump_file_name (int phase, int part = -1) const;
111
kono
parents:
diff changeset
690
kono
parents:
diff changeset
691 char *
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
692 get_dump_file_name (struct dump_file_info *dfi, int part = -1) const;
111
kono
parents:
diff changeset
693
kono
parents:
diff changeset
694 int
kono
parents:
diff changeset
695 dump_switch_p (const char *arg);
kono
parents:
diff changeset
696
kono
parents:
diff changeset
697 /* Start a dump for PHASE. Store user-supplied dump flags in
kono
parents:
diff changeset
698 *FLAG_PTR. Return the number of streams opened. Set globals
kono
parents:
diff changeset
699 DUMP_FILE, and ALT_DUMP_FILE to point to the opened streams, and
kono
parents:
diff changeset
700 set dump_flags appropriately for both pass dump stream and
kono
parents:
diff changeset
701 -fopt-info stream. */
kono
parents:
diff changeset
702 int
kono
parents:
diff changeset
703 dump_start (int phase, dump_flags_t *flag_ptr);
kono
parents:
diff changeset
704
kono
parents:
diff changeset
705 /* Finish a tree dump for PHASE and close associated dump streams. Also
kono
parents:
diff changeset
706 reset the globals DUMP_FILE, ALT_DUMP_FILE, and DUMP_FLAGS. */
kono
parents:
diff changeset
707 void
kono
parents:
diff changeset
708 dump_finish (int phase);
kono
parents:
diff changeset
709
kono
parents:
diff changeset
710 FILE *
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
711 dump_begin (int phase, dump_flags_t *flag_ptr, int part);
111
kono
parents:
diff changeset
712
kono
parents:
diff changeset
713 /* Returns nonzero if tree dump PHASE has been initialized. */
kono
parents:
diff changeset
714 int
kono
parents:
diff changeset
715 dump_initialized_p (int phase) const;
kono
parents:
diff changeset
716
kono
parents:
diff changeset
717 /* Returns the switch name of PHASE. */
kono
parents:
diff changeset
718 const char *
kono
parents:
diff changeset
719 dump_flag_name (int phase) const;
kono
parents:
diff changeset
720
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
721 void register_pass (opt_pass *pass);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
722
111
kono
parents:
diff changeset
723 private:
kono
parents:
diff changeset
724
kono
parents:
diff changeset
725 int
kono
parents:
diff changeset
726 dump_phase_enabled_p (int phase) const;
kono
parents:
diff changeset
727
kono
parents:
diff changeset
728 int
kono
parents:
diff changeset
729 dump_switch_p_1 (const char *arg, struct dump_file_info *dfi, bool doglob);
kono
parents:
diff changeset
730
kono
parents:
diff changeset
731 int
kono
parents:
diff changeset
732 dump_enable_all (dump_kind dkind, dump_flags_t flags, const char *filename);
kono
parents:
diff changeset
733
kono
parents:
diff changeset
734 int
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
735 opt_info_enable_passes (optgroup_flags_t optgroup_flags, dump_flags_t flags,
111
kono
parents:
diff changeset
736 const char *filename);
kono
parents:
diff changeset
737
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
738 bool update_dfi_for_opt_info (dump_file_info *dfi) const;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
739
111
kono
parents:
diff changeset
740 private:
kono
parents:
diff changeset
741
kono
parents:
diff changeset
742 /* Dynamically registered dump files and switches. */
kono
parents:
diff changeset
743 int m_next_dump;
kono
parents:
diff changeset
744 struct dump_file_info *m_extra_dump_files;
kono
parents:
diff changeset
745 size_t m_extra_dump_files_in_use;
kono
parents:
diff changeset
746 size_t m_extra_dump_files_alloced;
kono
parents:
diff changeset
747
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
748 /* Stored values from -fopt-info, for handling passes created after
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
749 option-parsing (by backends and by plugins). */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
750 optgroup_flags_t m_optgroup_flags;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
751 dump_flags_t m_optinfo_flags;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
752 char *m_optinfo_filename;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
753
111
kono
parents:
diff changeset
754 /* Grant access to dump_enable_all. */
kono
parents:
diff changeset
755 friend bool ::enable_rtl_dump_file (void);
kono
parents:
diff changeset
756
kono
parents:
diff changeset
757 /* Grant access to opt_info_enable_passes. */
kono
parents:
diff changeset
758 friend int ::opt_info_switch_p (const char *arg);
kono
parents:
diff changeset
759
kono
parents:
diff changeset
760 }; // class dump_manager
kono
parents:
diff changeset
761
kono
parents:
diff changeset
762 } // namespace gcc
kono
parents:
diff changeset
763
kono
parents:
diff changeset
764 #endif /* GCC_DUMPFILE_H */