dumpfile.h revision 1.1.1.2 1 1.1 mrg /* Definitions for the shared dumpfile.
2 1.1.1.2 mrg Copyright (C) 2004-2015 Free Software Foundation, Inc.
3 1.1 mrg
4 1.1 mrg This file is part of GCC.
5 1.1 mrg
6 1.1 mrg GCC is free software; you can redistribute it and/or modify
7 1.1 mrg it under the terms of the GNU General Public License as published by
8 1.1 mrg the Free Software Foundation; either version 3, or (at your option)
9 1.1 mrg any later version.
10 1.1 mrg
11 1.1 mrg GCC is distributed in the hope that it will be useful,
12 1.1 mrg but WITHOUT ANY WARRANTY; without even the implied warranty of
13 1.1 mrg MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 1.1 mrg GNU General Public License for more details.
15 1.1 mrg
16 1.1 mrg You should have received a copy of the GNU General Public License
17 1.1 mrg along with GCC; see the file COPYING3. If not see
18 1.1 mrg <http://www.gnu.org/licenses/>. */
19 1.1 mrg
20 1.1 mrg
21 1.1 mrg #ifndef GCC_DUMPFILE_H
22 1.1 mrg #define GCC_DUMPFILE_H 1
23 1.1 mrg
24 1.1 mrg #include "line-map.h"
25 1.1 mrg
26 1.1 mrg /* Different tree dump places. When you add new tree dump places,
27 1.1 mrg extend the DUMP_FILES array in dumpfile.c. */
28 1.1 mrg enum tree_dump_index
29 1.1 mrg {
30 1.1 mrg TDI_none, /* No dump */
31 1.1 mrg TDI_cgraph, /* dump function call graph. */
32 1.1.1.2 mrg TDI_inheritance, /* dump type inheritance graph. */
33 1.1 mrg TDI_tu, /* dump the whole translation unit. */
34 1.1 mrg TDI_class, /* dump class hierarchy. */
35 1.1 mrg TDI_original, /* dump each function before optimizing it */
36 1.1 mrg TDI_generic, /* dump each function after genericizing it */
37 1.1 mrg TDI_nested, /* dump each function after unnesting it */
38 1.1 mrg TDI_tree_all, /* enable all the GENERIC/GIMPLE dumps. */
39 1.1 mrg TDI_rtl_all, /* enable all the RTL dumps. */
40 1.1 mrg TDI_ipa_all, /* enable all the IPA dumps. */
41 1.1 mrg
42 1.1 mrg TDI_end
43 1.1 mrg };
44 1.1 mrg
45 1.1 mrg /* Bit masks to control dumping. Not all values are applicable to all
46 1.1 mrg dumps. Add new ones at the end. When you define new values, extend
47 1.1 mrg the DUMP_OPTIONS array in dumpfile.c. The TDF_* flags coexist with
48 1.1 mrg MSG_* flags (for -fopt-info) and the bit values must be chosen to
49 1.1 mrg allow that. */
50 1.1 mrg #define TDF_ADDRESS (1 << 0) /* dump node addresses */
51 1.1 mrg #define TDF_SLIM (1 << 1) /* don't go wild following links */
52 1.1 mrg #define TDF_RAW (1 << 2) /* don't unparse the function */
53 1.1 mrg #define TDF_DETAILS (1 << 3) /* show more detailed info about
54 1.1 mrg each pass */
55 1.1 mrg #define TDF_STATS (1 << 4) /* dump various statistics about
56 1.1 mrg each pass */
57 1.1 mrg #define TDF_BLOCKS (1 << 5) /* display basic block boundaries */
58 1.1 mrg #define TDF_VOPS (1 << 6) /* display virtual operands */
59 1.1 mrg #define TDF_LINENO (1 << 7) /* display statement line numbers */
60 1.1 mrg #define TDF_UID (1 << 8) /* display decl UIDs */
61 1.1 mrg
62 1.1 mrg #define TDF_TREE (1 << 9) /* is a tree dump */
63 1.1 mrg #define TDF_RTL (1 << 10) /* is a RTL dump */
64 1.1 mrg #define TDF_IPA (1 << 11) /* is an IPA dump */
65 1.1 mrg #define TDF_STMTADDR (1 << 12) /* Address of stmt. */
66 1.1 mrg
67 1.1 mrg #define TDF_GRAPH (1 << 13) /* a graph dump is being emitted */
68 1.1 mrg #define TDF_MEMSYMS (1 << 14) /* display memory symbols in expr.
69 1.1 mrg Implies TDF_VOPS. */
70 1.1 mrg
71 1.1 mrg #define TDF_DIAGNOSTIC (1 << 15) /* A dump to be put in a diagnostic
72 1.1 mrg message. */
73 1.1 mrg #define TDF_VERBOSE (1 << 16) /* A dump that uses the full tree
74 1.1 mrg dumper to print stmts. */
75 1.1 mrg #define TDF_RHS_ONLY (1 << 17) /* a flag to only print the RHS of
76 1.1 mrg a gimple stmt. */
77 1.1 mrg #define TDF_ASMNAME (1 << 18) /* display asm names of decls */
78 1.1 mrg #define TDF_EH (1 << 19) /* display EH region number
79 1.1 mrg holding this gimple statement. */
80 1.1 mrg #define TDF_NOUID (1 << 20) /* omit UIDs from dumps. */
81 1.1 mrg #define TDF_ALIAS (1 << 21) /* display alias information */
82 1.1 mrg #define TDF_ENUMERATE_LOCALS (1 << 22) /* Enumerate locals by uid. */
83 1.1 mrg #define TDF_CSELIB (1 << 23) /* Dump cselib details. */
84 1.1 mrg #define TDF_SCEV (1 << 24) /* Dump SCEV details. */
85 1.1 mrg #define TDF_COMMENT (1 << 25) /* Dump lines with prefix ";;" */
86 1.1 mrg #define MSG_OPTIMIZED_LOCATIONS (1 << 26) /* -fopt-info optimized sources */
87 1.1 mrg #define MSG_MISSED_OPTIMIZATION (1 << 27) /* missed opportunities */
88 1.1 mrg #define MSG_NOTE (1 << 28) /* general optimization info */
89 1.1 mrg #define MSG_ALL (MSG_OPTIMIZED_LOCATIONS | MSG_MISSED_OPTIMIZATION \
90 1.1 mrg | MSG_NOTE)
91 1.1 mrg
92 1.1 mrg
93 1.1 mrg /* Flags to control high-level -fopt-info dumps. Usually these flags
94 1.1 mrg define a group of passes. An optimization pass can be part of
95 1.1 mrg multiple groups. */
96 1.1 mrg #define OPTGROUP_NONE (0)
97 1.1 mrg #define OPTGROUP_IPA (1 << 1) /* IPA optimization passes */
98 1.1 mrg #define OPTGROUP_LOOP (1 << 2) /* Loop optimization passes */
99 1.1 mrg #define OPTGROUP_INLINE (1 << 3) /* Inlining passes */
100 1.1 mrg #define OPTGROUP_VEC (1 << 4) /* Vectorization passes */
101 1.1.1.2 mrg #define OPTGROUP_OTHER (1 << 5) /* All other passes */
102 1.1 mrg #define OPTGROUP_ALL (OPTGROUP_IPA | OPTGROUP_LOOP | OPTGROUP_INLINE \
103 1.1.1.2 mrg | OPTGROUP_VEC | OPTGROUP_OTHER)
104 1.1 mrg
105 1.1 mrg /* Define a tree dump switch. */
106 1.1 mrg struct dump_file_info
107 1.1 mrg {
108 1.1 mrg const char *suffix; /* suffix to give output file. */
109 1.1 mrg const char *swtch; /* command line dump switch */
110 1.1 mrg const char *glob; /* command line glob */
111 1.1 mrg const char *pfilename; /* filename for the pass-specific stream */
112 1.1 mrg const char *alt_filename; /* filename for the -fopt-info stream */
113 1.1 mrg FILE *pstream; /* pass-specific dump stream */
114 1.1 mrg FILE *alt_stream; /* -fopt-info stream */
115 1.1 mrg int pflags; /* dump flags */
116 1.1 mrg int optgroup_flags; /* optgroup flags for -fopt-info */
117 1.1 mrg int alt_flags; /* flags for opt-info */
118 1.1 mrg int pstate; /* state of pass-specific stream */
119 1.1 mrg int alt_state; /* state of the -fopt-info stream */
120 1.1 mrg int num; /* dump file number */
121 1.1.1.2 mrg bool owns_strings; /* fields "suffix", "swtch", "glob" can be
122 1.1.1.2 mrg const strings, or can be dynamically
123 1.1.1.2 mrg allocated, needing free. */
124 1.1 mrg };
125 1.1 mrg
126 1.1 mrg /* In dumpfile.c */
127 1.1 mrg extern FILE *dump_begin (int, int *);
128 1.1 mrg extern void dump_end (int, FILE *);
129 1.1 mrg extern int opt_info_switch_p (const char *);
130 1.1 mrg extern const char *dump_flag_name (int);
131 1.1 mrg extern void dump_printf (int, const char *, ...) ATTRIBUTE_PRINTF_2;
132 1.1 mrg extern void dump_printf_loc (int, source_location,
133 1.1 mrg const char *, ...) ATTRIBUTE_PRINTF_3;
134 1.1 mrg extern void dump_basic_block (int, basic_block, int);
135 1.1 mrg extern void dump_generic_expr_loc (int, source_location, int, tree);
136 1.1 mrg extern void dump_generic_expr (int, int, tree);
137 1.1 mrg extern void dump_gimple_stmt_loc (int, source_location, int, gimple, int);
138 1.1 mrg extern void dump_gimple_stmt (int, int, gimple, int);
139 1.1 mrg extern void print_combine_total_stats (void);
140 1.1 mrg extern bool enable_rtl_dump_file (void);
141 1.1 mrg
142 1.1.1.2 mrg /* In tree-dump.c */
143 1.1.1.2 mrg extern void dump_node (const_tree, int, FILE *);
144 1.1.1.2 mrg
145 1.1 mrg /* In combine.c */
146 1.1 mrg extern void dump_combine_total_stats (FILE *);
147 1.1 mrg /* In cfghooks.c */
148 1.1 mrg extern void dump_bb (FILE *, basic_block, int, int);
149 1.1 mrg
150 1.1 mrg /* Global variables used to communicate with passes. */
151 1.1 mrg extern FILE *dump_file;
152 1.1 mrg extern FILE *alt_dump_file;
153 1.1 mrg extern int dump_flags;
154 1.1 mrg extern const char *dump_file_name;
155 1.1 mrg
156 1.1 mrg /* Return true if any of the dumps is enabled, false otherwise. */
157 1.1 mrg static inline bool
158 1.1 mrg dump_enabled_p (void)
159 1.1 mrg {
160 1.1 mrg return (dump_file || alt_dump_file);
161 1.1 mrg }
162 1.1 mrg
163 1.1.1.2 mrg namespace gcc {
164 1.1.1.2 mrg
165 1.1.1.2 mrg class dump_manager
166 1.1.1.2 mrg {
167 1.1.1.2 mrg public:
168 1.1.1.2 mrg
169 1.1.1.2 mrg dump_manager ();
170 1.1.1.2 mrg ~dump_manager ();
171 1.1.1.2 mrg
172 1.1.1.2 mrg /* Register a dumpfile.
173 1.1.1.2 mrg
174 1.1.1.2 mrg TAKE_OWNERSHIP determines whether callee takes ownership of strings
175 1.1.1.2 mrg SUFFIX, SWTCH, and GLOB. */
176 1.1.1.2 mrg unsigned int
177 1.1.1.2 mrg dump_register (const char *suffix, const char *swtch, const char *glob,
178 1.1.1.2 mrg int flags, int optgroup_flags,
179 1.1.1.2 mrg bool take_ownership);
180 1.1.1.2 mrg
181 1.1.1.2 mrg /* Return the dump_file_info for the given phase. */
182 1.1.1.2 mrg struct dump_file_info *
183 1.1.1.2 mrg get_dump_file_info (int phase) const;
184 1.1.1.2 mrg
185 1.1.1.2 mrg struct dump_file_info *
186 1.1.1.2 mrg get_dump_file_info_by_switch (const char *swtch) const;
187 1.1.1.2 mrg
188 1.1.1.2 mrg /* Return the name of the dump file for the given phase.
189 1.1.1.2 mrg If the dump is not enabled, returns NULL. */
190 1.1.1.2 mrg char *
191 1.1.1.2 mrg get_dump_file_name (int phase) const;
192 1.1.1.2 mrg
193 1.1.1.2 mrg char *
194 1.1.1.2 mrg get_dump_file_name (struct dump_file_info *dfi) const;
195 1.1.1.2 mrg
196 1.1.1.2 mrg int
197 1.1.1.2 mrg dump_switch_p (const char *arg);
198 1.1.1.2 mrg
199 1.1.1.2 mrg /* Start a dump for PHASE. Store user-supplied dump flags in
200 1.1.1.2 mrg *FLAG_PTR. Return the number of streams opened. Set globals
201 1.1.1.2 mrg DUMP_FILE, and ALT_DUMP_FILE to point to the opened streams, and
202 1.1.1.2 mrg set dump_flags appropriately for both pass dump stream and
203 1.1.1.2 mrg -fopt-info stream. */
204 1.1.1.2 mrg int
205 1.1.1.2 mrg dump_start (int phase, int *flag_ptr);
206 1.1.1.2 mrg
207 1.1.1.2 mrg /* Finish a tree dump for PHASE and close associated dump streams. Also
208 1.1.1.2 mrg reset the globals DUMP_FILE, ALT_DUMP_FILE, and DUMP_FLAGS. */
209 1.1.1.2 mrg void
210 1.1.1.2 mrg dump_finish (int phase);
211 1.1.1.2 mrg
212 1.1.1.2 mrg FILE *
213 1.1.1.2 mrg dump_begin (int phase, int *flag_ptr);
214 1.1.1.2 mrg
215 1.1.1.2 mrg /* Returns nonzero if tree dump PHASE has been initialized. */
216 1.1.1.2 mrg int
217 1.1.1.2 mrg dump_initialized_p (int phase) const;
218 1.1.1.2 mrg
219 1.1.1.2 mrg /* Returns the switch name of PHASE. */
220 1.1.1.2 mrg const char *
221 1.1.1.2 mrg dump_flag_name (int phase) const;
222 1.1.1.2 mrg
223 1.1.1.2 mrg private:
224 1.1.1.2 mrg
225 1.1.1.2 mrg int
226 1.1.1.2 mrg dump_phase_enabled_p (int phase) const;
227 1.1.1.2 mrg
228 1.1.1.2 mrg int
229 1.1.1.2 mrg dump_switch_p_1 (const char *arg, struct dump_file_info *dfi, bool doglob);
230 1.1.1.2 mrg
231 1.1.1.2 mrg int
232 1.1.1.2 mrg dump_enable_all (int flags, const char *filename);
233 1.1.1.2 mrg
234 1.1.1.2 mrg int
235 1.1.1.2 mrg opt_info_enable_passes (int optgroup_flags, int flags, const char *filename);
236 1.1.1.2 mrg
237 1.1.1.2 mrg private:
238 1.1.1.2 mrg
239 1.1.1.2 mrg /* Dynamically registered dump files and switches. */
240 1.1.1.2 mrg int m_next_dump;
241 1.1.1.2 mrg struct dump_file_info *m_extra_dump_files;
242 1.1.1.2 mrg size_t m_extra_dump_files_in_use;
243 1.1.1.2 mrg size_t m_extra_dump_files_alloced;
244 1.1.1.2 mrg
245 1.1.1.2 mrg /* Grant access to dump_enable_all. */
246 1.1.1.2 mrg friend bool ::enable_rtl_dump_file (void);
247 1.1.1.2 mrg
248 1.1.1.2 mrg /* Grant access to opt_info_enable_passes. */
249 1.1.1.2 mrg friend int ::opt_info_switch_p (const char *arg);
250 1.1.1.2 mrg
251 1.1.1.2 mrg }; // class dump_manager
252 1.1.1.2 mrg
253 1.1.1.2 mrg } // namespace gcc
254 1.1.1.2 mrg
255 1.1 mrg #endif /* GCC_DUMPFILE_H */
256