1 /* Definitions for the shared dumpfile. 2 Copyright (C) 2004-2013 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 #include "line-map.h" 25 26 /* Different tree dump places. When you add new tree dump places, 27 extend the DUMP_FILES array in dumpfile.c. */ 28 enum tree_dump_index 29 { 30 TDI_none, /* No dump */ 31 TDI_cgraph, /* dump function call graph. */ 32 TDI_tu, /* dump the whole translation unit. */ 33 TDI_class, /* dump class hierarchy. */ 34 TDI_original, /* dump each function before optimizing it */ 35 TDI_generic, /* dump each function after genericizing it */ 36 TDI_nested, /* dump each function after unnesting it */ 37 TDI_tree_all, /* enable all the GENERIC/GIMPLE dumps. */ 38 TDI_rtl_all, /* enable all the RTL dumps. */ 39 TDI_ipa_all, /* enable all the IPA dumps. */ 40 41 TDI_end 42 }; 43 44 /* Bit masks to control dumping. Not all values are applicable to all 45 dumps. Add new ones at the end. When you define new values, extend 46 the DUMP_OPTIONS array in dumpfile.c. The TDF_* flags coexist with 47 MSG_* flags (for -fopt-info) and the bit values must be chosen to 48 allow that. */ 49 #define TDF_ADDRESS (1 << 0) /* dump node addresses */ 50 #define TDF_SLIM (1 << 1) /* don't go wild following links */ 51 #define TDF_RAW (1 << 2) /* don't unparse the function */ 52 #define TDF_DETAILS (1 << 3) /* show more detailed info about 53 each pass */ 54 #define TDF_STATS (1 << 4) /* dump various statistics about 55 each pass */ 56 #define TDF_BLOCKS (1 << 5) /* display basic block boundaries */ 57 #define TDF_VOPS (1 << 6) /* display virtual operands */ 58 #define TDF_LINENO (1 << 7) /* display statement line numbers */ 59 #define TDF_UID (1 << 8) /* display decl UIDs */ 60 61 #define TDF_TREE (1 << 9) /* is a tree dump */ 62 #define TDF_RTL (1 << 10) /* is a RTL dump */ 63 #define TDF_IPA (1 << 11) /* is an IPA dump */ 64 #define TDF_STMTADDR (1 << 12) /* Address of stmt. */ 65 66 #define TDF_GRAPH (1 << 13) /* a graph dump is being emitted */ 67 #define TDF_MEMSYMS (1 << 14) /* display memory symbols in expr. 68 Implies TDF_VOPS. */ 69 70 #define TDF_DIAGNOSTIC (1 << 15) /* A dump to be put in a diagnostic 71 message. */ 72 #define TDF_VERBOSE (1 << 16) /* A dump that uses the full tree 73 dumper to print stmts. */ 74 #define TDF_RHS_ONLY (1 << 17) /* a flag to only print the RHS of 75 a gimple stmt. */ 76 #define TDF_ASMNAME (1 << 18) /* display asm names of decls */ 77 #define TDF_EH (1 << 19) /* display EH region number 78 holding this gimple statement. */ 79 #define TDF_NOUID (1 << 20) /* omit UIDs from dumps. */ 80 #define TDF_ALIAS (1 << 21) /* display alias information */ 81 #define TDF_ENUMERATE_LOCALS (1 << 22) /* Enumerate locals by uid. */ 82 #define TDF_CSELIB (1 << 23) /* Dump cselib details. */ 83 #define TDF_SCEV (1 << 24) /* Dump SCEV details. */ 84 #define TDF_COMMENT (1 << 25) /* Dump lines with prefix ";;" */ 85 #define MSG_OPTIMIZED_LOCATIONS (1 << 26) /* -fopt-info optimized sources */ 86 #define MSG_MISSED_OPTIMIZATION (1 << 27) /* missed opportunities */ 87 #define MSG_NOTE (1 << 28) /* general optimization info */ 88 #define MSG_ALL (MSG_OPTIMIZED_LOCATIONS | MSG_MISSED_OPTIMIZATION \ 89 | MSG_NOTE) 90 91 92 /* Flags to control high-level -fopt-info dumps. Usually these flags 93 define a group of passes. An optimization pass can be part of 94 multiple groups. */ 95 #define OPTGROUP_NONE (0) 96 #define OPTGROUP_IPA (1 << 1) /* IPA optimization passes */ 97 #define OPTGROUP_LOOP (1 << 2) /* Loop optimization passes */ 98 #define OPTGROUP_INLINE (1 << 3) /* Inlining passes */ 99 #define OPTGROUP_VEC (1 << 4) /* Vectorization passes */ 100 #define OPTGROUP_ALL (OPTGROUP_IPA | OPTGROUP_LOOP | OPTGROUP_INLINE \ 101 | OPTGROUP_VEC) 102 103 /* Define a tree dump switch. */ 104 struct dump_file_info 105 { 106 const char *suffix; /* suffix to give output file. */ 107 const char *swtch; /* command line dump switch */ 108 const char *glob; /* command line glob */ 109 const char *pfilename; /* filename for the pass-specific stream */ 110 const char *alt_filename; /* filename for the -fopt-info stream */ 111 FILE *pstream; /* pass-specific dump stream */ 112 FILE *alt_stream; /* -fopt-info stream */ 113 int pflags; /* dump flags */ 114 int optgroup_flags; /* optgroup flags for -fopt-info */ 115 int alt_flags; /* flags for opt-info */ 116 int pstate; /* state of pass-specific stream */ 117 int alt_state; /* state of the -fopt-info stream */ 118 int num; /* dump file number */ 119 }; 120 121 /* In dumpfile.c */ 122 extern char *get_dump_file_name (int); 123 extern int dump_initialized_p (int); 124 extern FILE *dump_begin (int, int *); 125 extern void dump_end (int, FILE *); 126 extern int dump_start (int, int *); 127 extern void dump_finish (int); 128 extern void dump_node (const_tree, int, FILE *); 129 extern int dump_switch_p (const char *); 130 extern int opt_info_switch_p (const char *); 131 extern const char *dump_flag_name (int); 132 extern void dump_printf (int, const char *, ...) ATTRIBUTE_PRINTF_2; 133 extern void dump_printf_loc (int, source_location, 134 const char *, ...) ATTRIBUTE_PRINTF_3; 135 extern void dump_basic_block (int, basic_block, int); 136 extern void dump_generic_expr_loc (int, source_location, int, tree); 137 extern void dump_generic_expr (int, int, tree); 138 extern void dump_gimple_stmt_loc (int, source_location, int, gimple, int); 139 extern void dump_gimple_stmt (int, int, gimple, int); 140 extern void print_combine_total_stats (void); 141 extern unsigned int dump_register (const char *, const char *, const char *, 142 int, int); 143 extern bool enable_rtl_dump_file (void); 144 145 /* In combine.c */ 146 extern void dump_combine_total_stats (FILE *); 147 /* In cfghooks.c */ 148 extern void dump_bb (FILE *, basic_block, int, int); 149 150 /* Global variables used to communicate with passes. */ 151 extern FILE *dump_file; 152 extern FILE *alt_dump_file; 153 extern int dump_flags; 154 extern const char *dump_file_name; 155 156 /* Return the dump_file_info for the given phase. */ 157 extern struct dump_file_info *get_dump_file_info (int); 158 159 /* Return true if any of the dumps is enabled, false otherwise. */ 160 static inline bool 161 dump_enabled_p (void) 162 { 163 return (dump_file || alt_dump_file); 164 } 165 166 #endif /* GCC_DUMPFILE_H */ 167