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