renamed ird_color_side_effects to ird_color_uses_memory
[libfirm] / include / libfirm / irdump.h
1 /*
2  * Copyright (C) 1995-2007 University of Karlsruhe.  All right reserved.
3  *
4  * This file is part of libFirm.
5  *
6  * This file may be distributed and/or modified under the terms of the
7  * GNU General Public License version 2 as published by the Free Software
8  * Foundation and appearing in the file LICENSE.GPL included in the
9  * packaging of this file.
10  *
11  * Licensees holding valid libFirm Professional Edition licenses may use
12  * this file in accordance with the libFirm Commercial License.
13  * Agreement provided with the Software.
14  *
15  * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
16  * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17  * PURPOSE.
18  */
19
20 /**
21  * @file
22  * @brief   Write vcg representation of firm to file.
23  * @author  Martin Trapp, Christian Schaefer, Goetz Lindenmaier, Hubert Schmidt
24  * @version $Id$
25  * @summary
26  *  Dump routines for the ir graph and all type information.
27  *
28  *  The dump format of most functions is vcg.  This is a text based graph
29  *  representation. Some use the original format,
30  *  but most generate an extended format that is only read by some special
31  *  versions of xvcg or by the comercialized version now calles aiSee.
32  *  A test version of aiSee is available at
33  *   http://www.absint.de/aisee/download/index.htm.
34  *
35  *  We have developed an own advanced viewer called ycomp:
36  *    http://www.info.uni-karlsruhe.de/software.php/id=6&lang=en
37  *
38  *  Most routines use the name of the passed entity as the name of the
39  *  file dumped to.
40  */
41 #ifndef FIRM_IR_IRDUMP_H
42 #define FIRM_IR_IRDUMP_H
43
44 #include "irnode.h"
45 #include "irgraph.h"
46 #include "irloop.h"
47
48 /**
49  * Symbolic names for the different dumping colors.
50  */
51 typedef enum ird_color_t {
52         ird_color_prog_background,
53         ird_color_block_background,
54         ird_color_dead_block_background,
55         ird_color_block_inout,
56         ird_color_default_node,
57         ird_color_phi,
58         ird_color_memory,
59         ird_color_controlflow,
60         ird_color_const,
61         ird_color_anchor,
62         ird_color_proj,
63         ird_color_uses_memory,
64         ird_color_error,
65         ird_color_count
66 } ird_color_t;
67
68 /**
69  * Edge kinds.
70  */
71 typedef enum {
72         data_edge           = 0x01,   /**< A data edge between two basic blocks. */
73         block_edge          = 0x02,   /**< An edge from a node to its basic block. */
74         cf_edge             = 0x03,   /**< A regularly control flow edge. */
75         exc_cf_edge         = 0x04,   /**< An exceptional control flow edge. */
76         mem_edge            = 0x05,   /**< A memory edge. */
77         dominator_edge      = 0x06,   /**< A dominator edge from a block to its immediate dominator. */
78         node2type_edge      = 0x07,   /**< An edge from an IR node to a type. */
79
80         ent_type_edge       = 0x11,   /**< An edge from an entity to its type. */
81         ent_own_edge        = 0x12,   /**< An edge from an entity to its owner type. */
82         ent_overwrites_edge = 0x13,   /**< An edge from an entity to the entity it overwrites. */
83         ent_value_edge      = 0x14,   /**< An edge from an entity to its value entity. */
84         ent_corr_edge       = 0x15,   /**< An edge from an entity to the member entity its initializes. */
85
86         meth_par_edge       = 0x21,   /**< An edge from a method type to one of its parameter types. */
87         meth_res_edge       = 0x22,   /**< An edge from a method type to one of its result types. */
88         type_super_edge     = 0x23,   /**< An edge from a class type to its super/basis type. */
89         union_edge          = 0x24,   /**< An edge from a union type to its member types. */
90         ptr_pts_to_edge     = 0x25,   /**< An edge from a pointer type to its points-to type. */
91         arr_elt_type_edge   = 0x26,   /**< An edge from an array type to its element type. */
92         arr_ent_edge        = 0x27,   /**< An edge from a array type to its element entity. */
93         type_member_edge    = 0x28,   /**< An edge from a compound type to its member entities. */
94
95         /* additional flags */
96         intra_edge          = 0,      /**< Intra edge flag: edge do not cross basic block boundaries */
97         inter_edge          = 0x40,   /**< Inter edge flag: edge cross basic block boundaries */
98         back_edge           = 0x80    /**< Backwards edge flag. */
99 } edge_kind;
100
101 /* **************************************************************************** */
102 /*                                 GRAPH DUMPERS                                */
103 /* **************************************************************************** */
104
105 /**
106  * This hook is called to insert some special nodes into dumped graph
107  */
108 typedef int (*DUMP_IR_GRAPH_FUNC)(FILE *F, ir_graph *irg);
109 /**
110  * This hook is called to dump the vcg attributes of a node to a file.
111  * If this function returns zero, the default attributes are added, else
112  * removed.
113  */
114 typedef int (*DUMP_NODE_VCGATTR_FUNC)(FILE *F, ir_node *node, ir_node *local);
115 /**
116  * This hook is called to dump the vcg attributes of an edge to a file.
117  * If this function returns zero, the default attributes are added, else
118  * removed.
119  */
120 typedef int (*DUMP_EDGE_VCGATTR_FUNC)(FILE *F, ir_node *node, int to);
121
122 /** Set the ir graph dump hook. */
123 void set_dump_ir_graph_hook(DUMP_IR_GRAPH_FUNC hook);
124 /** Set the node_vcgattr hook. */
125 void set_dump_node_vcgattr_hook(DUMP_NODE_VCGATTR_FUNC hook);
126 /** Set the edge_vcgattr hook. */
127 void set_dump_edge_vcgattr_hook(DUMP_EDGE_VCGATTR_FUNC hook);
128
129 typedef int (*DUMP_NODE_EDGE_FUNC)(FILE *f, ir_node *node);
130
131 /**
132  * Set the hook to be called to dump additional edges to a node.
133  * @param func The hook to be called.
134  */
135 void set_dump_node_edge_hook(DUMP_NODE_EDGE_FUNC func);
136
137 /**
138  * Get the additional edge dump hook.
139  * @return The current additional edge dump hook.]
140  */
141 DUMP_NODE_EDGE_FUNC get_dump_node_edge_hook(void);
142
143 /**
144  * Set the hook to be called to dump additional edges to a block.
145  * @param func The hook to be called.
146  */
147 void set_dump_block_edge_hook(DUMP_NODE_EDGE_FUNC func);
148
149 /**
150  * Get the additional block edge dump hook.
151  * @return The current additional block edge dump hook.
152  */
153 DUMP_NODE_EDGE_FUNC get_dump_block_edge_hook(void);
154
155 /** Dump a firm graph.
156  *
157  *  @param irg     The firm graph to be dumped.
158  *  @param suffix  A suffix for the file name.
159  *
160  *  @return
161  *     A file containing the firm graph in vcg format.
162  *
163  *  Dumps all Firm nodes of a single graph for a single procedure in
164  *  standard xvcg format.  Dumps the graph to a file.  The file name
165  *  is constructed from the name of the entity describing the
166  *  procedure (irg->entity) and the ending -pure<-ip>.vcg.  Eventually
167  *  overwrites existing files.  Visits all nodes in
168  *  interprocedural_view.
169  *
170  * @see turn_off_edge_labels()
171  */
172 void dump_ir_graph (ir_graph *irg, const char *suffix);
173
174 /** Dump a firm graph without explicit block nodes.
175  *
176  *  @param irg     The firm graph to be dumped.
177  *  @param suffix  A suffix for the file name.
178  *
179  *  @return
180  *     A file containing the firm graph in vcg format.
181  *
182  *  Dumps all Firm nodes of a single graph for a single procedure in
183  *  extended xvcg format.
184  *  Dumps the graph to a file.  The file name is constructed from the
185  *  name of the entity describing the procedure (irg->entity) and the
186  *  ending <-ip>.vcg.  Eventually overwrites existing files.  Dumps several
187  *  procedures in boxes if interprocedural_view.
188  *
189  * @see turn_off_edge_labels()
190  */
191 void dump_ir_block_graph (ir_graph *irg, const char *suffix);
192
193 /** Dump a firm graph without explicit block nodes but grouped in extended blocks.
194  *
195  *  @param irg   The firm graph to be dumped.
196  *
197  *  @return
198  *     A file containing the firm graph in vcg format.
199  *
200  *  Dumps all Firm nodes of a single graph for a single procedure in
201  *  extended xvcg format.
202  *  Dumps the graph to a file.  The file name is constructed from the
203  *  name of the entity describing the procedure (irg->entity) and the
204  *  ending <-ip>.vcg.  Eventually overwrites existing files.  Dumps several
205  *  procedures in boxes if interprocedural_view.
206  *
207  * @see turn_off_edge_labels()
208  */
209 void dump_ir_extblock_graph (ir_graph *irg, const char *suffix);
210
211 /** Dumps all graphs in interprocedural view to a file named All_graphs<suffix>.vcg.
212  *
213  * @param suffix  A suffix for the file name.
214  */
215 void dump_all_cg_block_graph(const char *suffix);
216
217 /** Dumps a firm graph and  all the type information needed for Calls,
218  *  Sels, ... in this graph.
219  *
220  *  @param irg     The firm graph to be dumped with its type information.
221  *  @param suffix  A suffix for the file name.
222  *
223  *  @return
224  *      A file containing the firm graph and the type information of the firm graph in vcg format.
225  *
226  *  Dumps the graph to a file.  The file name is constructed from the
227  *  name of the entity describing the procedure (irg->entity) and the
228  *  ending -all.vcg.  Eventually overwrites existing files.
229  *
230  * @see turn_off_edge_labels()
231  */
232 void dump_ir_graph_w_types (ir_graph *irg, const char *suffix);
233
234 /** Dumps a firm graph and  all the type information needed for Calls,
235  *  Sels, ... in this graph.
236  *
237  *  @param irg     The firm graph to be dumped with its type information.
238  *  @param suffix  A suffix for the file name.
239  *
240  *  @return
241  *      A file containing the firm graph and the type information of the firm graph in vcg format.
242  *
243  *  The graph is in blocked format.
244  *  Dumps the graph to a file.  The file name is constructed from the
245  *  name of the entity describing the procedure (irg->entity) and the
246  *  ending -all.vcg.  Eventually overwrites existing files.
247  *
248  * @see turn_off_edge_labels()
249  */
250 void dump_ir_block_graph_w_types (ir_graph *irg, const char *suffix);
251
252 /** The type of a dump function that is called for each graph.
253  *
254  *  @param irg     current visited graph
255  *  @param suffix  A suffix for the file name.
256  */
257 typedef void dump_graph_func(ir_graph *irg, const char *suffix);
258
259 /**
260  * A walker that calls a dumper for each graph.
261  *
262  * @param dump_graph    The dumper to be used for dumping.
263  * @param suffix        A suffix for the file name.
264  *
265  * @return
266  *      Whatever the dumper creates.
267  *
268  *  Walks over all firm graphs and  calls a dumper for each graph.
269  *  The following dumpers can be passed as arguments:
270  *   - dump_ir_graph()
271  *   - dump_ir_block_graph()
272  *   - dump_cfg()
273  *   - dump_type_graph()
274  *   - dump_ir_graph_w_types()
275  *
276  * @see turn_off_edge_labels()
277  */
278 void dump_all_ir_graphs (dump_graph_func *dump_graph, const char *suffix);
279
280
281 /**
282  * Dump the control flow graph of a procedure.
283  *
284  * @param irg     The firm graph whose CFG shall be dumped.
285  * @param suffix  A suffix for the file name.
286  *
287  * @return
288  *      A file containing the CFG in vcg format.
289  *
290  * Dumps the control flow graph of a procedure in standard xvcg format.
291  * Dumps the graph to a file.  The file name is constructed from the
292  * name of the entity describing the procedure (irg->entity) and the
293  * ending -cfg.vcg.  Eventually overwrites existing files.
294  *
295  * @see turn_off_edge_labels()
296  */
297 void dump_cfg (ir_graph *irg, const char *suffix);
298
299 /**
300  * Dump a node and its predecessors forming a subgraph to a vcg file.
301  *
302  * @param root   The node serving as root for the subgraph.
303  * @param depth  Dump nodes on paths starting at root with length depth.
304  * @param suffix A suffix for the file name.
305  *
306  * Dumps the graph to a file.  The file name is constructed from the
307  * name of the entity describing the procedure the passed node is
308  * in, suffix and the ending -subg_<nr>.vcg.  nr is a unique number
309  * for each graph dumped. Eventually overwrites existing files.
310  *
311  * @return
312  *      A file containing the subgraph in vcg format.
313  */
314 void dump_subgraph (ir_node *root, int depth, const char *suffix);
315
316 /* **************************************************************************** */
317 /*                              CALLGRAPH DUMPERS                               */
318 /* **************************************************************************** */
319
320
321 /** Dump the call graph.
322  *
323  * Dumps the callgraph to a file "Callgraph"<suffix>".vcg".
324  *
325  * @param suffix A suffix for the file name.
326  *
327  * @see dump_callgraph_loop_tree(const char *suffix)
328  */
329 void dump_callgraph(const char *suffix);
330
331 /* **************************************************************************** */
332 /*                              TYPEGRAPH DUMPERS                               */
333 /* **************************************************************************** */
334
335 /**
336  * Dumps all the type information needed for Calls, Sels, ... in this graph.
337  * Does not dump the graph!
338  *
339  * @param irg    The firm graph whose type information is to be dumped.
340  * @param suffix A suffix for the file name.
341  *
342  * @return
343  *      A file containing the type information of the firm graph in vcg format.
344  *
345  *  Dumps this graph to a file.  The file name is constructed from the
346  *  name of the entity describing the procedure (irg->entity) and the
347  *  ending -type.vcg.  Eventually overwrites existing files.
348  *
349  * @see turn_off_edge_labels()
350  */
351 void dump_type_graph (ir_graph *irg, const char *suffix);
352
353 /**
354  * Dumps all type information.
355  *
356  * @param suffix A suffix for the file name.
357  *
358  * @return
359  *      A file containing all type information for the program in standard
360  *      vcg format.
361  *
362  * Dumps all type information that is somehow reachable in standard vcg
363  * format.
364  * Dumps the graph to a file named All_types.vcg.
365  *
366  * @see turn_off_edge_labels()
367  */
368 void dump_all_types (const char *suffix);
369
370 /**
371  * Dumps the class hierarchy with or without entities.
372  *
373  * @param entities    Flag whether to dump the entities.
374  * @param suffix      A suffix for the file name.
375  *
376  * @return
377  *      A file containing the class hierarchy tree for the program in standard
378  *      vcg format.
379  *
380  * Does not dump the global type.
381  * Dumps a node for all classes and the sub/supertype relations.  If
382  * entities is set to true also dumps the entities of classes, but without
383  * any additional information as the entities type.  The overwrites relation
384  * is dumped along with the entities.
385  * Dumps to a file class_hierarchy.vcg
386  */
387 void dump_class_hierarchy (int entities, const char *suffix);
388
389 /* **************************************************************************** */
390 /*                              LOOPTREE DUMPERS                                */
391 /* **************************************************************************** */
392
393 /**
394  * Dump a standalone loop tree, which contains the loop nodes and the firm nodes
395  * belonging to one loop packed together in one subgraph.  Dumps to file
396  * <name of irg><suffix>-looptree.vcg
397  * Turns on edge labels by default.
398  *
399  * Implementing this dumper was stimulated by Florian Liekwegs similar dumper.
400  *
401  * @param irg     Dump the loop tree for this graph.
402  * @param suffix  A suffix for the file name.
403  */
404 void dump_loop_tree(ir_graph *irg, const char *suffix);
405
406 /** Dumps the firm nodes in the sub-loop-tree of loop to a graph.
407  *
408  * Dumps the loop nodes if dump_loop_information() is set.
409  * The name of the file is loop_<loop_nr><suffix>.vcg.
410  *
411  * @param l       Dump the loop tree for this loop.
412  * @param suffix  A suffix for the file name.
413  */
414 void dump_loop (ir_loop *l, const char *suffix);
415
416 /** Dumps the loop tree over the call graph.
417  *
418  * See for yourself what you can use this for.
419  * The filename is "Callgraph_looptree<suffix>.vcg".
420  *
421  * @param suffix  A suffix for the file name.
422  */
423 void dump_callgraph_loop_tree(const char *suffix);
424
425
426 /* **************************************************************************** */
427 /*                                TEXT DUMPERS                                  */
428 /* **************************************************************************** */
429
430
431 /** Write the irnode and all its attributes to the file passed.
432  * */
433 int dump_irnode_to_file (FILE *f, ir_node *n);
434
435 /** Write the irnode and all its attributes to stdout.
436  *  */
437 void dump_irnode (ir_node *n);
438
439 /** Write the graph and all its attributes to the file passed.
440  *  Does not write the nodes.
441  * */
442 void dump_graph_to_file(FILE *F, ir_graph *irg);
443
444 /** Write the graph and all its attributes to stdout.
445  *  Does not write the nodes.
446  *  */
447 void dump_graph(ir_graph *g);
448
449
450 /** Dump graph information as text.
451  *
452  *  Often graphs are unhandy in their vcg representation.  The text
453  *  dumper represents the information for the firm nodes more compact,
454  *  but the relations between the nodes only implicitly.
455  *
456  *  The file name is the graph name (get_entity_name()), appended by
457  *  <suffix>.txt.
458  */
459 void dump_graph_as_text(ir_graph *irg, const char *suffix);
460
461
462 /** Verbosity for text dumpers */
463 typedef enum {
464         dump_verbosity_onlynames         = 0x00000001,   /**< Only dump names. Turns off all other
465                                                               flags up to 0x00010000. */
466         dump_verbosity_fields            = 0x00000002,   /**< Dump types and fields (like a type declaration). */
467         dump_verbosity_methods           = 0x00000004,   /**< Dump types and methods (like a type declaration). */
468         dump_verbosity_nostatic          = 0x00000040,   /**< Dump types and dynamic allocated fields (like a
469                                                               type declaration). This excludes methods and
470                                                               static, polymorphic fields. */
471         dump_verbosity_typeattrs         = 0x00000008,   /**< Dump all type attributes. */
472         dump_verbosity_entattrs          = 0x00000010,   /**< Dump all entity attributes. */
473         dump_verbosity_entconsts         = 0x00000020,   /**< Dump entity constants. */
474
475         dump_verbosity_accessStats       = 0x00000100,   /**< Dump entity access statistics. */
476         dump_verbosity_csv               = 0x00000200,   /**< Dump access statistics as comma separated list. */
477
478         dump_verbosity_noClassTypes      = 0x00001000,   /**< Dump no class       types. */
479         dump_verbosity_noStructTypes     = 0x00002000,   /**< Dump no struct      types. */
480         dump_verbosity_noUnionTypes      = 0x00004000,   /**< Dump no union       types. */
481         dump_verbosity_noArrayTypes      = 0x00008000,   /**< Dump no array       types. */
482         dump_verbosity_noPointerTypes    = 0x00010000,   /**< Dump no pointer     types. */
483         dump_verbosity_noMethodTypes     = 0x00020000,   /**< Dump no method      types. */
484         dump_verbosity_noPrimitiveTypes  = 0x00040000,   /**< Dump no primitive   types .*/
485         dump_verbosity_noEnumerationTypes= 0x00080000,   /**< Dump no enumeration types. */
486
487         dump_verbosity_onlyClassTypes     = 0x000FE000,  /**< Dump only class     types. */
488         dump_verbosity_onlyStructTypes    = 0x000FD000,  /**< Dump only struct    types. */
489         dump_verbosity_onlyUnionTypes     = 0x000FB000,  /**< Dump only union     types. */
490         dump_verbosity_onlyArrayTypes     = 0x000F7000,  /**< Dump only array     types. */
491         dump_verbosity_onlyPointerTypes   = 0x000EF000,  /**< Dump only pointer   types. */
492         dump_verbosity_onlyMethodTypes    = 0x000DF000,  /**< Dump only method    types. */
493         dump_verbosity_onlyPrimitiveTypes = 0x000BF000,  /**< Dump only primitive types. */
494         dump_verbosity_onlyEnumerationTypes=0x0007F000,  /**< Dump only enumeration types. */
495
496         dump_verbosity_max                = 0x4FF00FBE   /**< Turn on all verbosity.
497                                                               Do not turn on negative flags!
498                                                               @@@ Because of a bug in gcc 3.2 we can not set the
499                                                               first two bits. */
500 } dump_verbosity;
501
502
503 /** Write the entity and all its attributes to the passed file.
504  *  */
505 void    dump_entity_to_file (FILE *F, ir_entity *ent, unsigned verbosity);
506
507 /** Write the entity and all its attributes to the stdout.
508  *
509  *  Calls dump_entity_to_file().  */
510 void    dump_entity (ir_entity *ent);
511
512 /** Write the type and all its attributes to the file passed.
513  * */
514 void    dump_type_to_file (FILE *f, ir_type *tp, dump_verbosity verbosity);
515
516 /** Write the type and all its attributes to stdout.
517  *  */
518 void    dump_type (ir_type *tp);
519
520
521 /** Dump type information as text.
522  *
523  *  Often type graphs are unhandy in their vcg representation.  The text
524  *  dumper represents the information for a single type more compact, but
525  *  the relations between the types only implicitly.
526  *  Dumps only 'real' types, i.e., those in the type list.  Does not dump
527  *  the global type nor frame types or the like.
528  *
529  *  The file name is the program name (get_irp_name()), or 'TextTypes'
530  *  if the program name is not set, appended by <suffix>-types.txt.
531  *  For verbosity see the documentation of the verbosity flags above.
532  */
533 void dump_types_as_text(unsigned verbosity, const char *suffix);
534
535 /** Dumps all global variables as text.
536  *
537  * @param suffix  A suffix for the file name.
538  *
539  * Dumps a text representation of the entities in the global type.
540  *
541  * The file name is the program name (get_irp_name()), or 'TextTypes'
542  * if the program name is not set, appended by <suffix>-globals.txt.
543  * For verbosity see the documentation of the verbosity flags above.
544  */
545 void dump_globals_as_text(unsigned verbosity, const char *suffix);
546
547 /* **************************************************************************** */
548 /*                                    FLAGS                                     */
549 /* **************************************************************************** */
550
551 /** Set a prefix filter for output functions.
552  *
553  * All graph dumpers check this name.  If the name is != "" and
554  * not a prefix of the graph to be dumped, the dumper does not
555  * dump the graph.
556  *
557  * @param name The prefix of the name (not the ld_name) of the method
558  *              entity to be dumped.
559  */
560 void   only_dump_method_with_name(ident *name);
561
562 /** Returns the prefix filter set with only_dump_method_with_name(). */
563 ident *get_dump_file_filter_ident(void);
564
565 /** Returns true if dump file filter is not set, or if it is a
566  *  prefix of name. */
567 int is_filtered_dump_name(ident *name);
568
569 /** Sets the vcg flag "display_edge_labels" to no.
570  *
571  * This is necessary as xvcg and aisee both fail to display graphs
572  * with self-edges if these edges have labels.
573  */
574 void turn_off_edge_labels(void);
575
576 /**
577  * If set to non-zero constants will be replicated for every use. In non
578  * blocked view edges from constant to block are skipped.  Vcg then
579  * layouts the graphs more compact, this makes them better readable.
580  * The flag is automatically and temporarily set to false if other
581  * edges are dumped, as outs, loop, ...
582  * Default setting: false.
583  */
584 void dump_consts_local(int flag);
585
586 /**
587  * if set to non-zero node idx will be added to node labels
588  */
589 void dump_node_idx_label(int flag);
590
591 /**
592  * Returns 0 if dump_out_edge_flag or dump_loop_information_flag
593  * are set, else returns dump_const_local_flag.
594  */
595 int get_opt_dump_const_local(void);
596
597 /**  Turns off dumping the values of constant entities. Makes type graphs
598  *   better readable.
599  */
600 void dump_constant_entity_values(int flag);
601
602 /**  Turns on dumping the edges from the End node to nodes to be kept
603  *   alive.
604  */
605 void dump_keepalive_edges(int flag);
606 int get_opt_dump_keepalive_edges(void);
607
608 /** Turns on dumping the out edges starting from the Start block in
609  *  dump_ir_graph.
610  *
611  *  To test the consistency of the out data structure.
612  */
613 void dump_out_edges(int flag);
614
615 /** If this flag is set the dumper dumps edges to immediate dominator in cfg.
616  */
617 void dump_dominator_information(int flag);
618
619 /** If this flag is set the dumper dumps loop nodes and edges from
620  *  these nodes to the contained ir nodes.
621  *
622  *  If the loops are interprocedural nodes can be missing.
623  */
624 void dump_loop_information(int flag);
625
626 /** If set and backedge info is computed, backedges are dumped dashed
627  *  and as vcg 'backedge' construct.
628  *
629  *  Default: set.
630  */
631 void dump_backedge_information(int flag);
632
633 /** Dump the information of type field specified in ana/irtypeinfo.h.
634  *
635  *  If the flag is set, the type name is output in [] in the node label,
636  *  else it is output as info.
637  */
638 void set_opt_dump_analysed_type_info(int flag);
639
640 /** Write the address of a node into the vcg info.
641  *
642  *  This is off per default for automatic comparisons of
643  *  vcg graphs -- these will differ in the pointer values!
644  */
645 void dump_pointer_values_to_info(int flag);
646
647 /** Dumps ld_names of entities instead of there names.
648  *
649  * This option is on per default.
650  */
651 void dump_ld_names(int flag);
652
653 /** Dumps all graph anchor nodes, even if they
654  * are dead.
655  *
656  * This option is off per default.
657  */
658 void dump_all_anchors(int flag);
659
660 /** A node info dumper callback. */
661 typedef void (dump_node_info_cb_t)(void *data, FILE *f, const ir_node *n);
662
663 /**
664  * Adds a new node info dumper callback. It is possible to add an unlimited
665  * number of callbacks. The callbacks are called at the end of the default
666  * info dumper.
667  *
668  * @param cb    the callback function to be called
669  * @param data  a context parameter
670  *
671  * @return A callback handle.
672  *
673  * @note This functionality is only available, if Firm hooks are enabled (default).
674  */
675 void *dump_add_node_info_callback(dump_node_info_cb_t *cb, void *data);
676
677 /**
678  * Remove a previously added info dumper callback.
679  *
680  * @param handle  the callback handle returned from dump_add_node_info_callback()
681  */
682 void dump_remv_node_info_callback(void *handle);
683
684 #endif