OSDN Git Service

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