1 /* Instruction scheduling pass. Log dumping infrastructure. 2 Copyright (C) 2006-2018 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 it under 7 the terms of the GNU General Public License as published by the Free 8 Software Foundation; either version 3, or (at your option) any later 9 version. 10 11 GCC is distributed in the hope that it will be useful, but WITHOUT ANY 12 WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 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_SEL_SCHED_DUMP_H 22 #define GCC_SEL_SCHED_DUMP_H 23 24 25 26 /* These values control the dumping of control flow graph to the .dot file. */ 27 enum sel_dump_cfg_def 28 { 29 /* Dump only current region. */ 30 SEL_DUMP_CFG_CURRENT_REGION = 2, 31 32 /* Dump note_list for this bb. */ 33 SEL_DUMP_CFG_BB_NOTES_LIST = 4, 34 35 /* Dump availability set from the bb header. */ 36 SEL_DUMP_CFG_AV_SET = 8, 37 38 /* Dump liveness set from the bb header. */ 39 SEL_DUMP_CFG_LV_SET = 16, 40 41 /* Dump insns of the given block. */ 42 SEL_DUMP_CFG_BB_INSNS = 32, 43 44 /* Show current fences when dumping cfg. */ 45 SEL_DUMP_CFG_FENCES = 64, 46 47 /* Show insn's seqnos when dumping cfg. */ 48 SEL_DUMP_CFG_INSN_SEQNO = 128, 49 50 /* Dump function name when dumping cfg. */ 51 SEL_DUMP_CFG_FUNCTION_NAME = 256, 52 53 /* Dump loop father number of the given bb. */ 54 SEL_DUMP_CFG_BB_LOOP = 512, 55 56 /* The default flags for cfg dumping. */ 57 SEL_DUMP_CFG_FLAGS = (SEL_DUMP_CFG_CURRENT_REGION 58 | SEL_DUMP_CFG_BB_NOTES_LIST 59 | SEL_DUMP_CFG_AV_SET 60 | SEL_DUMP_CFG_LV_SET 61 | SEL_DUMP_CFG_BB_INSNS 62 | SEL_DUMP_CFG_FENCES 63 | SEL_DUMP_CFG_INSN_SEQNO 64 | SEL_DUMP_CFG_BB_LOOP) 65 }; 66 67 /* These values control the dumping of insns containing in expressions. */ 68 enum dump_insn_rtx_def 69 { 70 /* Dump insn's UID. */ 71 DUMP_INSN_RTX_UID = 2, 72 73 /* Dump insn's pattern. */ 74 DUMP_INSN_RTX_PATTERN = 4, 75 76 /* Dump insn's basic block number. */ 77 DUMP_INSN_RTX_BBN = 8, 78 79 /* Dump all of the above. */ 80 DUMP_INSN_RTX_ALL = (DUMP_INSN_RTX_UID | DUMP_INSN_RTX_PATTERN 81 | DUMP_INSN_RTX_BBN) 82 }; 83 84 extern void dump_insn_rtx_1 (rtx, int); 85 extern void dump_insn_rtx (rtx); 86 extern void debug_insn_rtx (rtx); 87 88 /* These values control dumping of vinsns. The meaning of different fields 89 of a vinsn is explained in sel-sched-ir.h. */ 90 enum dump_vinsn_def 91 { 92 /* Dump the insn behind this vinsn. */ 93 DUMP_VINSN_INSN_RTX = 2, 94 95 /* Dump vinsn's type. */ 96 DUMP_VINSN_TYPE = 4, 97 98 /* Dump vinsn's count. */ 99 DUMP_VINSN_COUNT = 8, 100 101 /* Dump the cost (default latency) of the insn behind this vinsn. */ 102 DUMP_VINSN_COST = 16, 103 104 /* Dump all of the above. */ 105 DUMP_VINSN_ALL = (DUMP_VINSN_INSN_RTX | DUMP_VINSN_TYPE | DUMP_VINSN_COUNT 106 | DUMP_VINSN_COST) 107 }; 108 109 extern void dump_vinsn_1 (vinsn_t, int); 110 extern void dump_vinsn (vinsn_t); 111 extern void debug_vinsn (vinsn_t); 112 113 extern void debug (vinsn_def &ref); 114 extern void debug (vinsn_def *ptr); 115 extern void debug_verbose (vinsn_def &ref); 116 extern void debug_verbose (vinsn_def *ptr); 117 118 119 /* These values control dumping of expressions. The meaning of the fields 120 is explained in sel-sched-ir.h. */ 121 enum dump_expr_def 122 { 123 /* Dump the vinsn behind this expression. */ 124 DUMP_EXPR_VINSN = 2, 125 126 /* Dump expression's SPEC parameter. */ 127 DUMP_EXPR_SPEC = 4, 128 129 /* Dump expression's priority. */ 130 DUMP_EXPR_PRIORITY = 8, 131 132 /* Dump the number of times this expression was scheduled. */ 133 DUMP_EXPR_SCHED_TIMES = 16, 134 135 /* Dump speculative status of the expression. */ 136 DUMP_EXPR_SPEC_DONE_DS = 32, 137 138 /* Dump the basic block number which originated this expression. */ 139 DUMP_EXPR_ORIG_BB = 64, 140 141 /* Dump expression's usefulness. */ 142 DUMP_EXPR_USEFULNESS = 128, 143 144 /* Dump all of the above. */ 145 DUMP_EXPR_ALL = (DUMP_EXPR_VINSN | DUMP_EXPR_SPEC | DUMP_EXPR_PRIORITY 146 | DUMP_EXPR_SCHED_TIMES | DUMP_EXPR_SPEC_DONE_DS 147 | DUMP_EXPR_ORIG_BB | DUMP_EXPR_USEFULNESS) 148 }; 149 150 extern void dump_expr_1 (expr_t, int); 151 extern void dump_expr (expr_t); 152 extern void debug_expr (expr_t); 153 154 extern void debug (expr_def &ref); 155 extern void debug (expr_def *ptr); 156 extern void debug_verbose (expr_def &ref); 157 extern void debug_verbose (expr_def *ptr); 158 159 160 /* A enumeration for dumping flags of an insn. The difference from 161 dump_insn_rtx_def is that these fields are for insns in stream only. */ 162 enum dump_insn_def 163 { 164 /* Dump expression of this insn. */ 165 DUMP_INSN_EXPR = 2, 166 167 /* Dump insn's seqno. */ 168 DUMP_INSN_SEQNO = 4, 169 170 /* Dump the cycle on which insn was scheduled. */ 171 DUMP_INSN_SCHED_CYCLE = 8, 172 173 /* Dump insn's UID. */ 174 DUMP_INSN_UID = 16, 175 176 /* Dump insn's pattern. */ 177 DUMP_INSN_PATTERN = 32, 178 179 /* Dump insn's basic block number. */ 180 DUMP_INSN_BBN = 64, 181 182 /* Dump all of the above. */ 183 DUMP_INSN_ALL = (DUMP_INSN_EXPR | DUMP_INSN_SEQNO | DUMP_INSN_BBN 184 | DUMP_INSN_SCHED_CYCLE | DUMP_INSN_UID | DUMP_INSN_PATTERN) 185 }; 186 187 extern void dump_insn_1 (insn_t, int); 188 extern void dump_insn (insn_t); 189 extern void debug_insn (insn_t); 190 191 /* When this flag is on, we are dumping to the .dot file. 192 When it is off, we are dumping to log. */ 193 extern bool sched_dump_to_dot_p; 194 195 196 /* Functions from sel-sched-dump.c. */ 197 extern void sel_print (const char *fmt, ...) ATTRIBUTE_PRINTF_1; 198 extern const char * sel_print_insn (const rtx_insn *, int); 199 extern void free_sel_dump_data (void); 200 201 extern void block_start (void); 202 extern void block_finish (void); 203 extern int get_print_blocks_num (void); 204 extern void line_start (void); 205 extern void line_finish (void); 206 207 extern void sel_print_rtl (rtx x); 208 extern void dump_insn_1 (insn_t, int); 209 extern void dump_insn (insn_t); 210 extern void dump_insn_vector (rtx_vec_t); 211 extern void dump_expr (expr_t); 212 extern void dump_used_regs (bitmap); 213 extern void dump_av_set (av_set_t); 214 extern void dump_lv_set (regset); 215 extern void dump_blist (blist_t); 216 extern void dump_flist (flist_t); 217 extern void dump_hard_reg_set (const char *, HARD_REG_SET); 218 extern void sel_debug_cfg_1 (int); 219 extern void sel_debug_cfg (void); 220 extern void setup_dump_cfg_params (void); 221 222 /* Debug functions. */ 223 extern void debug_expr (expr_t); 224 extern void debug_av_set (av_set_t); 225 extern void debug_lv_set (regset); 226 extern void debug_ilist (ilist_t); 227 extern void debug_blist (blist_t); 228 extern void debug (vec<rtx> &ref); 229 extern void debug (vec<rtx> *ptr); 230 extern void debug_insn_vector (rtx_vec_t); 231 extern void debug_hard_reg_set (HARD_REG_SET); 232 extern rtx debug_mem_addr_value (rtx); 233 #endif 234