normalized, reengeneered ...
[libfirm] / ir / ir / irdump.h
1 /*
2  * Project:     libFIRM
3  * File name:   ir/ir/irdump.h
4  * Purpose:     Write vcg representation of firm to file.
5  * Author:      Martin Trapp, Christian Schaefer
6  * Modified by: Goetz Lindenmaier, Hubert Schmidt
7  * Created:
8  * CVS-ID:      $Id$
9  * Copyright:   (c) 1998-2003 Universität Karlsruhe
10  * Licence:     This file protected by GPL -  GNU GENERAL PUBLIC LICENSE.
11  */
12
13
14 /**
15  * @file irdump.h
16  *
17  * Dump routines for the ir graph and all type information.
18  *
19  * @author Martin Trapp, Christian Schaefer
20  *
21  * The dump format of most functions is vcg.  This is a text based graph
22  * representation. Some use the original format,
23  * but most generate an extended format that is only read by some special
24  * versions of xvcg or by the comercialized version now calles aiSee.
25  * A test version of aiSee is available at
26  * http://www.absint.de/aisee/download/index.htm.
27  *
28  * Most routines use the name of the passed entity as the name of the
29  * file dumped to.
30  */
31
32
33 # ifndef _IRDUMP_H_
34 # define _IRDUMP_H_
35
36 # include "irnode.h"
37 # include "irgraph.h"
38
39 /**
40  * The value of this string will be added to the file name before .vcg
41  *
42  * @todo  GL: A hack -- add parameter to dumper function.
43  */
44 extern char *dump_file_suffix;
45
46 /**
47  *  Dump a firm graph.
48  *
49  *  @param irg  The firm graph to be dumped.
50  *
51  *  @return
52  *     A file containing the firm graph in vcg format.
53  *
54  *  Dumps all Firm nodes of a single graph for a single procedure in
55  *  standard xvcg format.  Dumps the graph to a file.  The file name
56  *  is constructed from the name of the entity describing the
57  *  procedure (irg->entity) and the ending -pure<-ip>.vcg.  Eventually
58  *  overwrites existing files.  Visits all nodes in
59  *  interprocedural_view.
60  *
61  * @see turn_off_edge_labels()
62  */
63 void dump_ir_graph (ir_graph *irg);
64 #define dump_cg_graph dump_ir_graph
65
66 /**
67  *  Dump a firm graph without explicit block nodes.
68  *
69  *  @param irg   The firm graph to be dumped.
70  *
71  *  @return
72  *     A file containing the firm graph in vcg format.
73  *
74  *  Dumps all Firm nodes of a single graph for a single procedure in
75  *  extended xvcg format.
76  *  Dumps the graph to a file.  The file name is constructed from the
77  *  name of the entity describing the procedure (irg->entity) and the
78  *  ending <-ip>.vcg.  Eventually overwrites existing files.  Dumps several
79  *  procedures in boxes if interprocedural_view.
80  *
81  * @see turn_off_edge_labels()
82  */
83 void dump_ir_block_graph (ir_graph *irg);
84 #define dump_cg_block_graph dump_ir_block_graph
85
86 /** Dumps all graphs in interprocedural view to a file named All_graphs.vcg.
87  */
88 void dump_all_cg_block_graph(void);
89
90 /**
91  *  Dumps a firm graph and  all the type information needed for Calls,
92  *  Sels, ... in this graph.
93  *
94  *  @param irg   The firm graph to be dumped with its type information.
95  *
96  *  @return
97  *      A file containing the firm graph and the type information of the firm graph in vcg format.
98  *
99  *  Dumps the graph to a file.  The file name is constructed from the
100  *  name of the entity describing the procedure (irg->entity) and the
101  *  ending -all.vcg.  Eventually overwrites existing files.
102  *
103  * @see turn_off_edge_labels()
104  */
105 void dump_ir_graph_w_types (ir_graph *irg);
106
107 /**
108  *  Dumps a firm graph and  all the type information needed for Calls,
109  *  Sels, ... in this graph.
110  *
111  *  @param irg   The firm graph to be dumped with its type information.
112  *
113  *  @return
114  *      A file containing the firm graph and the type information of the firm graph in vcg format.
115  *
116  *  The graph is in blocked format.
117  *  Dumps the graph to a file.  The file name is constructed from the
118  *  name of the entity describing the procedure (irg->entity) and the
119  *  ending -all.vcg.  Eventually overwrites existing files.
120  *
121  * @see turn_off_edge_labels()
122  */
123 void dump_ir_block_graph_w_types (ir_graph *irg);
124
125 /**
126  *   The type of a walker function that is called for each graph.
127  *
128  *   @param irg   current visited graph
129  */
130 typedef void dump_graph_func(ir_graph *irg);
131
132 /**
133  *   A walker that calls a dumper for each graph.
134  *
135  *   @param dump_graph    The dumper to be used for dumping.
136  *
137  *   @return
138  *      Whatever the dumper creates.
139  *
140  *   Walks over all firm graphs and  calls a dumper for each graph.
141  *   The following dumpers can be passed as arguments:
142  *   - dump_ir_graph()
143  *   - dump_ir_block_graph()
144  *   - dump_cfg()
145  *   - dump_type_graph()
146  *   - dump_ir_graph_w_types()
147  *
148  * @see turn_off_edge_labels()
149  */
150 void dump_all_ir_graphs (dump_graph_func *dump_graph);
151
152
153 /**
154  *   Dump the control flow graph of a procedure.
155  *
156  *   @param irg  The firm graph whose CFG shall be dumped.
157  *
158  *   @return
159  *      A file containing the CFG in vcg format.
160  *
161  *   Dumps the control flow graph of a procedure in standard xvcg format.
162  *   Dumps the graph to a file.  The file name is constructed from the
163  *   name of the entity describing the procedure (irg->entity) and the
164  *   ending -cfg.vcg.  Eventually overwrites existing files.
165  *
166  * @see turn_off_edge_labels()
167  */
168 void dump_cfg (ir_graph *irg);
169
170 /**
171  *  Dumps all the type information needed for Calls, Sels, ... in this graph.
172  *  Does not dump the graph!
173  *
174  *  @param irg   The firm graph whose type information is to be dumped.
175  *  @return
176  *      A file containing the type information of the firm graph in vcg format.
177  *
178  *  Dumps this graph to a file.  The file name is constructed from the
179  *  name of the entity describing the procedure (irg->entity) and the
180  *  ending -type.vcg.  Eventually overwrites existing files.
181  *
182  * @see turn_off_edge_labels()
183  */
184 void dump_type_graph (ir_graph *irg);
185
186 /**
187  *   Dumps all type information.
188  *
189  *   @return
190  *      A file containing all type information for the program in standard
191  *      vcg format.
192  *
193  *   Dumps all type information that is somehow reachable in standard vcg
194  *   format.
195  *   Dumps the graph to a file named All_types.vcg.
196  *
197  * @see turn_off_edge_labels()
198  */
199 void dump_all_types (void);
200
201 /**
202  *   Dumps the class hierarchy with or without entities.
203  *
204  *   @param entities    Flag whether to dump the entities.
205  *
206  *   @return
207  *      A file containing the class hierarchy tree for the program in standard
208  *      vcg format.
209  *
210  *   Does not dump the global type.
211  *   Dumps a node for all classes and the sub/supertype relations.  If
212  *   entities is set to true also dumps the entities of classes, but without
213  *   any additional information as the entities type.  The overwrites relation
214  *   is dumped along with the entities.
215  *   Dumps to a file class_hierarchy.vcg
216  */
217 void dump_class_hierarchy (bool entities);
218
219 /**
220  *   Sets the vcg flag "display_edge_labels" to no.
221  *
222  *   This is necessary
223  *   as xvcg and aisee both fail to display graphs with self-edges if these
224  *   edges have labes.
225  *   Dumpers will generate vcg flags with a different header.
226  */
227 void turn_off_edge_labels(void);
228
229 /**
230  *   If set to true constants will be replicated for every use. In non blocked
231  *   view edges from constant to block are scipped.  Vcg
232  *   then layouts the graphs more compact, this makes them better readable.
233  *   The flag is automatically and temporarily set to false if other
234  *   edges are dumped, as outs, loop, ...
235  *   Default setting: false.
236  */
237 void dump_consts_local(bool b);
238 /**
239  * Returns false if dump_out_edge_flag or dump_loop_information_flag
240  * are set, else returns dump_const_local_flag.
241  */
242 bool get_opt_dump_const_local(void);
243
244 /**
245  *   Turns off dumping the values of constant entities. Makes type graphs
246  *   better readable.
247  */
248 void turn_off_constant_entity_values(void);
249
250 /**
251  *   Turns on dumping the edges from the End node to nodes to be kept
252  *   alive
253  */
254 void dump_keepalive_edges(bool b);
255 bool get_opt_dump_keepalive_edges(void);
256
257 /**
258  *   Turns on dumping the out edges starting from the Start block in
259  *   dump_ir_graph.  To test the consistency of the out datastructure.
260  */
261 void dump_out_edges(void);
262
263 /**
264  *   If this flag is set the dumper dumps edges to immediate dominator in cfg.
265  */
266 void dump_dominator_information(void);
267
268 /**
269  *   If this flag is set the dumper dumps loop nodes and edges from
270  *   these nodes to the contained ir nodes.
271  *   Can be turned off with dont_dump_loop_information().
272  *   If the loops are interprocedural nodes can be missing.
273  */
274 void dump_loop_information(void);
275
276 /**
277  * @see dump_loop_information()
278  */
279 void dont_dump_loop_information(void);
280
281 /**
282  * If set and backedge info is computed, backedges are dumped dashed
283  * and as vcg 'backedge' construct.  Default: set.
284  */
285 void dump_backedge_information(bool b);
286
287 /**
288  *  Dump the information of type field specified in ana/irtypeinfo.h.
289  *  If the flag is set, the type name is output in [] in the node label,
290  *  else it is output as info.
291  */
292 void dump_analysed_type_info(bool b);
293
294 # endif /* _IRDUMP_H_ */