Mercurial > hg > CbC > CbC_gcc
comparison gcc/dumpfile.h @ 111:04ced10e8804
gcc 7
author | kono |
---|---|
date | Fri, 27 Oct 2017 22:46:09 +0900 |
parents | |
children | 84e7813d76e9 |
comparison
equal
deleted
inserted
replaced
68:561a7518be6b | 111:04ced10e8804 |
---|---|
1 /* Definitions for the shared dumpfile. | |
2 Copyright (C) 2004-2017 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 | |
7 it under the terms of the GNU General Public License as published by | |
8 the Free Software Foundation; either version 3, or (at your option) | |
9 any later version. | |
10 | |
11 GCC is distributed in the hope that it will be useful, | |
12 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 GNU General Public License 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 | |
21 #ifndef GCC_DUMPFILE_H | |
22 #define GCC_DUMPFILE_H 1 | |
23 | |
24 | |
25 /* Different tree dump places. When you add new tree dump places, | |
26 extend the DUMP_FILES array in dumpfile.c. */ | |
27 enum tree_dump_index | |
28 { | |
29 TDI_none, /* No dump */ | |
30 TDI_cgraph, /* dump function call graph. */ | |
31 TDI_inheritance, /* dump type inheritance graph. */ | |
32 TDI_clones, /* dump IPA cloning decisions. */ | |
33 TDI_original, /* dump each function before optimizing it */ | |
34 TDI_gimple, /* dump each function after gimplifying it */ | |
35 TDI_nested, /* dump each function after unnesting it */ | |
36 | |
37 TDI_lang_all, /* enable all the language dumps. */ | |
38 TDI_tree_all, /* enable all the GENERIC/GIMPLE dumps. */ | |
39 TDI_rtl_all, /* enable all the RTL dumps. */ | |
40 TDI_ipa_all, /* enable all the IPA dumps. */ | |
41 | |
42 TDI_end | |
43 }; | |
44 | |
45 /* Enum used to distinguish dump files to types. */ | |
46 | |
47 enum dump_kind | |
48 { | |
49 DK_none, | |
50 DK_lang, | |
51 DK_tree, | |
52 DK_rtl, | |
53 DK_ipa | |
54 }; | |
55 | |
56 /* Bit masks to control dumping. Not all values are applicable to all | |
57 dumps. Add new ones at the end. When you define new values, extend | |
58 the DUMP_OPTIONS array in dumpfile.c. The TDF_* flags coexist with | |
59 MSG_* flags (for -fopt-info) and the bit values must be chosen to | |
60 allow that. */ | |
61 #define TDF_ADDRESS (1 << 0) /* dump node addresses */ | |
62 #define TDF_SLIM (1 << 1) /* don't go wild following links */ | |
63 #define TDF_RAW (1 << 2) /* don't unparse the function */ | |
64 #define TDF_DETAILS (1 << 3) /* show more detailed info about | |
65 each pass */ | |
66 #define TDF_STATS (1 << 4) /* dump various statistics about | |
67 each pass */ | |
68 #define TDF_BLOCKS (1 << 5) /* display basic block boundaries */ | |
69 #define TDF_VOPS (1 << 6) /* display virtual operands */ | |
70 #define TDF_LINENO (1 << 7) /* display statement line numbers */ | |
71 #define TDF_UID (1 << 8) /* display decl UIDs */ | |
72 | |
73 #define TDF_STMTADDR (1 << 9) /* Address of stmt. */ | |
74 | |
75 #define TDF_GRAPH (1 << 10) /* a graph dump is being emitted */ | |
76 #define TDF_MEMSYMS (1 << 11) /* display memory symbols in expr. | |
77 Implies TDF_VOPS. */ | |
78 | |
79 #define TDF_RHS_ONLY (1 << 12) /* a flag to only print the RHS of | |
80 a gimple stmt. */ | |
81 #define TDF_ASMNAME (1 << 13) /* display asm names of decls */ | |
82 #define TDF_EH (1 << 14) /* display EH region number | |
83 holding this gimple statement. */ | |
84 #define TDF_NOUID (1 << 15) /* omit UIDs from dumps. */ | |
85 #define TDF_ALIAS (1 << 16) /* display alias information */ | |
86 #define TDF_ENUMERATE_LOCALS (1 << 17) /* Enumerate locals by uid. */ | |
87 #define TDF_CSELIB (1 << 18) /* Dump cselib details. */ | |
88 #define TDF_SCEV (1 << 19) /* Dump SCEV details. */ | |
89 #define TDF_GIMPLE (1 << 20) /* Dump in GIMPLE FE syntax */ | |
90 #define TDF_FOLDING (1 << 21) /* Dump folding details. */ | |
91 #define MSG_OPTIMIZED_LOCATIONS (1 << 22) /* -fopt-info optimized sources */ | |
92 #define MSG_MISSED_OPTIMIZATION (1 << 23) /* missed opportunities */ | |
93 #define MSG_NOTE (1 << 24) /* general optimization info */ | |
94 #define MSG_ALL (MSG_OPTIMIZED_LOCATIONS | MSG_MISSED_OPTIMIZATION \ | |
95 | MSG_NOTE) | |
96 | |
97 | |
98 /* Value of TDF_NONE is used just for bits filtered by TDF_KIND_MASK. */ | |
99 | |
100 #define TDF_NONE 0 | |
101 | |
102 /* Flags to control high-level -fopt-info dumps. Usually these flags | |
103 define a group of passes. An optimization pass can be part of | |
104 multiple groups. */ | |
105 #define OPTGROUP_NONE (0) | |
106 #define OPTGROUP_IPA (1 << 1) /* IPA optimization passes */ | |
107 #define OPTGROUP_LOOP (1 << 2) /* Loop optimization passes */ | |
108 #define OPTGROUP_INLINE (1 << 3) /* Inlining passes */ | |
109 #define OPTGROUP_OMP (1 << 4) /* OMP (Offloading and Multi | |
110 Processing) transformations */ | |
111 #define OPTGROUP_VEC (1 << 5) /* Vectorization passes */ | |
112 #define OPTGROUP_OTHER (1 << 6) /* All other passes */ | |
113 #define OPTGROUP_ALL (OPTGROUP_IPA | OPTGROUP_LOOP | OPTGROUP_INLINE \ | |
114 | OPTGROUP_OMP | OPTGROUP_VEC | OPTGROUP_OTHER) | |
115 | |
116 /* Dump flags type. */ | |
117 | |
118 typedef uint64_t dump_flags_t; | |
119 | |
120 /* Define a tree dump switch. */ | |
121 struct dump_file_info | |
122 { | |
123 /* Suffix to give output file. */ | |
124 const char *suffix; | |
125 /* Command line dump switch. */ | |
126 const char *swtch; | |
127 /* Command line glob. */ | |
128 const char *glob; | |
129 /* Filename for the pass-specific stream. */ | |
130 const char *pfilename; | |
131 /* Filename for the -fopt-info stream. */ | |
132 const char *alt_filename; | |
133 /* Pass-specific dump stream. */ | |
134 FILE *pstream; | |
135 /* -fopt-info stream. */ | |
136 FILE *alt_stream; | |
137 /* Dump kind. */ | |
138 dump_kind dkind; | |
139 /* Dump flags. */ | |
140 dump_flags_t pflags; | |
141 /* A pass flags for -fopt-info. */ | |
142 int alt_flags; | |
143 /* Flags for -fopt-info given by a user. */ | |
144 int optgroup_flags; | |
145 /* State of pass-specific stream. */ | |
146 int pstate; | |
147 /* State of the -fopt-info stream. */ | |
148 int alt_state; | |
149 /* Dump file number. */ | |
150 int num; | |
151 /* Fields "suffix", "swtch", "glob" can be const strings, | |
152 or can be dynamically allocated, needing free. */ | |
153 bool owns_strings; | |
154 /* When a given dump file is being initialized, this flag is set to true | |
155 if the corresponding TDF_graph dump file has also been initialized. */ | |
156 bool graph_dump_initialized; | |
157 }; | |
158 | |
159 /* In dumpfile.c */ | |
160 extern FILE *dump_begin (int, dump_flags_t *); | |
161 extern void dump_end (int, FILE *); | |
162 extern int opt_info_switch_p (const char *); | |
163 extern const char *dump_flag_name (int); | |
164 extern void dump_printf (dump_flags_t, const char *, ...) ATTRIBUTE_PRINTF_2; | |
165 extern void dump_printf_loc (dump_flags_t, source_location, | |
166 const char *, ...) ATTRIBUTE_PRINTF_3; | |
167 extern void dump_function (int phase, tree fn); | |
168 extern void dump_basic_block (int, basic_block, int); | |
169 extern void dump_generic_expr_loc (int, source_location, int, tree); | |
170 extern void dump_generic_expr (dump_flags_t, dump_flags_t, tree); | |
171 extern void dump_gimple_stmt_loc (dump_flags_t, source_location, dump_flags_t, | |
172 gimple *, int); | |
173 extern void dump_gimple_stmt (dump_flags_t, dump_flags_t, gimple *, int); | |
174 extern void print_combine_total_stats (void); | |
175 extern bool enable_rtl_dump_file (void); | |
176 | |
177 /* In tree-dump.c */ | |
178 extern void dump_node (const_tree, dump_flags_t, FILE *); | |
179 | |
180 /* In combine.c */ | |
181 extern void dump_combine_total_stats (FILE *); | |
182 /* In cfghooks.c */ | |
183 extern void dump_bb (FILE *, basic_block, int, dump_flags_t); | |
184 | |
185 /* Global variables used to communicate with passes. */ | |
186 extern FILE *dump_file; | |
187 extern FILE *alt_dump_file; | |
188 extern dump_flags_t dump_flags; | |
189 extern const char *dump_file_name; | |
190 | |
191 /* Return true if any of the dumps is enabled, false otherwise. */ | |
192 static inline bool | |
193 dump_enabled_p (void) | |
194 { | |
195 return (dump_file || alt_dump_file); | |
196 } | |
197 | |
198 namespace gcc { | |
199 | |
200 class dump_manager | |
201 { | |
202 public: | |
203 | |
204 dump_manager (); | |
205 ~dump_manager (); | |
206 | |
207 /* Register a dumpfile. | |
208 | |
209 TAKE_OWNERSHIP determines whether callee takes ownership of strings | |
210 SUFFIX, SWTCH, and GLOB. */ | |
211 unsigned int | |
212 dump_register (const char *suffix, const char *swtch, const char *glob, | |
213 dump_kind dkind, int optgroup_flags, bool take_ownership); | |
214 | |
215 /* Allow languages and middle-end to register their dumps before the | |
216 optimization passes. */ | |
217 void | |
218 register_dumps (); | |
219 | |
220 /* Return the dump_file_info for the given phase. */ | |
221 struct dump_file_info * | |
222 get_dump_file_info (int phase) const; | |
223 | |
224 struct dump_file_info * | |
225 get_dump_file_info_by_switch (const char *swtch) const; | |
226 | |
227 /* Return the name of the dump file for the given phase. | |
228 If the dump is not enabled, returns NULL. */ | |
229 char * | |
230 get_dump_file_name (int phase) const; | |
231 | |
232 char * | |
233 get_dump_file_name (struct dump_file_info *dfi) const; | |
234 | |
235 int | |
236 dump_switch_p (const char *arg); | |
237 | |
238 /* Start a dump for PHASE. Store user-supplied dump flags in | |
239 *FLAG_PTR. Return the number of streams opened. Set globals | |
240 DUMP_FILE, and ALT_DUMP_FILE to point to the opened streams, and | |
241 set dump_flags appropriately for both pass dump stream and | |
242 -fopt-info stream. */ | |
243 int | |
244 dump_start (int phase, dump_flags_t *flag_ptr); | |
245 | |
246 /* Finish a tree dump for PHASE and close associated dump streams. Also | |
247 reset the globals DUMP_FILE, ALT_DUMP_FILE, and DUMP_FLAGS. */ | |
248 void | |
249 dump_finish (int phase); | |
250 | |
251 FILE * | |
252 dump_begin (int phase, dump_flags_t *flag_ptr); | |
253 | |
254 /* Returns nonzero if tree dump PHASE has been initialized. */ | |
255 int | |
256 dump_initialized_p (int phase) const; | |
257 | |
258 /* Returns the switch name of PHASE. */ | |
259 const char * | |
260 dump_flag_name (int phase) const; | |
261 | |
262 private: | |
263 | |
264 int | |
265 dump_phase_enabled_p (int phase) const; | |
266 | |
267 int | |
268 dump_switch_p_1 (const char *arg, struct dump_file_info *dfi, bool doglob); | |
269 | |
270 int | |
271 dump_enable_all (dump_kind dkind, dump_flags_t flags, const char *filename); | |
272 | |
273 int | |
274 opt_info_enable_passes (int optgroup_flags, dump_flags_t flags, | |
275 const char *filename); | |
276 | |
277 private: | |
278 | |
279 /* Dynamically registered dump files and switches. */ | |
280 int m_next_dump; | |
281 struct dump_file_info *m_extra_dump_files; | |
282 size_t m_extra_dump_files_in_use; | |
283 size_t m_extra_dump_files_alloced; | |
284 | |
285 /* Grant access to dump_enable_all. */ | |
286 friend bool ::enable_rtl_dump_file (void); | |
287 | |
288 /* Grant access to opt_info_enable_passes. */ | |
289 friend int ::opt_info_switch_p (const char *arg); | |
290 | |
291 }; // class dump_manager | |
292 | |
293 } // namespace gcc | |
294 | |
295 #endif /* GCC_DUMPFILE_H */ |