added two more hooks to the ir graph dumper
[libfirm] / ir / ir / irdump.h
index 21dc4dc..2e03d27 100644 (file)
 /*                                 GRAPH DUMPERS                                */
 /* **************************************************************************** */
 
+/**
+ * This hook is called to insert some special nodes into dumped graph
+ */
+typedef int (*DUMP_IR_GRAPH_FUNC)(FILE *F, ir_graph *irg);
+/**
+ * This hook is called to dump the vcg attributes of a node to a file.
+ * If this function returns zero, the default attributes are added, else
+ * removed.
+ */
+typedef int (*DUMP_NODE_VCGATTR_FUNC)(FILE *F, ir_node *node, ir_node *local);
+/**
+ * This hook is called to dump the vcg attributes of an edge to a file.
+ * If this function returns zero, the default attributes are added, else
+ * removed.
+ */
+typedef int (*DUMP_EDGE_VCGATTR_FUNC)(FILE *F, ir_node *node, int to);
+
+/** Set the ir graph dump hook. */
+void set_dump_ir_graph_hook(DUMP_IR_GRAPH_FUNC hook);
+/** Set the node_vcgattr hook. */
+void set_dump_node_vcgattr_hook(DUMP_NODE_VCGATTR_FUNC hook);
+/** Set the edge_vcgattr hook. */
+void set_dump_edge_vcgattr_hook(DUMP_EDGE_VCGATTR_FUNC hook);
+
+typedef int (*DUMP_NODE_EDGE_FUNC)(FILE *f, ir_node *node);
+
+/**
+ * Set the hook to be called to dump additional edges to a node.
+ * @param func The hook to be called.
+ */
+void set_dump_node_edge_hook(DUMP_NODE_EDGE_FUNC func);
+
+/**
+ * Get the additional edge dump hook.
+ * @return The current additional edge dump hook.]
+ */
+DUMP_NODE_EDGE_FUNC get_dump_node_edge_hook(void);
+
 /** Dump a firm graph.
  *
  *  @param irg  The firm graph to be dumped.
@@ -78,6 +116,24 @@ void dump_ir_graph (ir_graph *irg, const char *suffix);
  */
 void dump_ir_block_graph (ir_graph *irg, const char *suffix);
 
+/** Dump a firm graph without explicit block nodes but grouped in extended blocks.
+ *
+ *  @param irg   The firm graph to be dumped.
+ *
+ *  @return
+ *     A file containing the firm graph in vcg format.
+ *
+ *  Dumps all Firm nodes of a single graph for a single procedure in
+ *  extended xvcg format.
+ *  Dumps the graph to a file.  The file name is constructed from the
+ *  name of the entity describing the procedure (irg->entity) and the
+ *  ending <-ip>.vcg.  Eventually overwrites existing files.  Dumps several
+ *  procedures in boxes if interprocedural_view.
+ *
+ * @see turn_off_edge_labels()
+ */
+void dump_ir_extblock_graph (ir_graph *irg, const char *suffix);
+
 /** Dumps all graphs in interprocedural view to a file named All_graphs.vcg.
  */
 void dump_all_cg_block_graph(const char *suffix);
@@ -157,6 +213,21 @@ void dump_all_ir_graphs (dump_graph_func *dump_graph, const char *suffix);
  */
 void dump_cfg (ir_graph *irg, const char *suffix);
 
+/**  Dump a node and its predecessors forming a subgraph to a vcg file.
+ *
+ *   @param root   The node serving as root for the subgraph.
+ *   @param depth  Dump nodes on paths starting at root with length depth.
+ *   @param suffix A suffix for the file name.
+ *
+ *   Dumps the graph to a file.  The file name is constructed from the
+ *   name of the entity describing the procedure the passed node is
+ *   in, suffix and the ending -subg_<nr>.vcg.  nr is a unique number
+ *   for each graph dumped. Eventually overwrites existing files.
+ *
+ *   @return
+ *      A file containing the subgraph in vcg format.
+ */
+void dump_subgraph (ir_node *root, int depth, const char *suffix);
 
 /* **************************************************************************** */
 /*                              CALLGRAPH DUMPERS                               */
@@ -166,6 +237,8 @@ void dump_cfg (ir_graph *irg, const char *suffix);
 /** Dump the call graph.
  *
  * Dumps the callgraph to a file "Callgraph"<suffix>".vcg".
+ *
+ * @see dump_callgraph_loop_tree(const char *suffix)
  */
 void dump_callgraph(const char *suffix);
 
@@ -261,16 +334,54 @@ void dump_callgraph_loop_tree(const char *suffix);
 /*                                TEXT DUMPERS                                  */
 /* **************************************************************************** */
 
+
+/** Write the irnode and all its attributes to the file passed.
+ * */
+int dump_irnode_to_file (FILE *f, ir_node *n);
+
+/** Write the irnode and all its attributes to stdout.
+ *  */
+void dump_irnode (ir_node *n);
+
+/** Write the graph and all its attributes to the file passed.
+ *  Does not write the nodes.
+ * */
+void dump_graph_to_file(FILE *F, ir_graph *irg);
+
+/** Write the graph and all its attributes to stdout.
+ *  Does not write the nodes.
+ *  */
+void dump_graph(ir_graph *g);
+
+
+/** Dump graph information as text.
+ *
+ *  Often graphs are unhandy in their vcg representation.  The text
+ *  dumper represents the information for the firm nodes more compact,
+ *  but the relations between the nodes only implicitly.
+ *
+ *  The file name is the graph name (get_entity_name()), appended by
+ *  <suffix>.txt.
+ */
+void dump_graph_as_text(ir_graph *irg, const char *suffix);
+
+
 /** Verbosity for text dumpers */
 typedef enum {
-  dump_verbosity_onlynames         = 0x00000001,   /**< only dump type names. turns off all other
+  dump_verbosity_onlynames         = 0x00000001,   /**< only dump names. turns off all other
                                                      flags up to 0x00010000. */
   dump_verbosity_fields            = 0x00000002,   /**< dump types and fields (like a type declaration) */
   dump_verbosity_methods           = 0x00000004,   /**< dump types and methods (like a type declaration) */
+  dump_verbosity_nostatic          = 0x00000040,   /**< dump types and dynamic allocated fields (like a
+                                                       type declaration). This excludes methods and
+                                                       static, polymorphic fields. */
   dump_verbosity_typeattrs         = 0x00000008,   /**< dump all type attributes */
   dump_verbosity_entattrs          = 0x00000010,   /**< dump all entity attributes */
   dump_verbosity_entconsts         = 0x00000020,   /**< dump entity constants */
 
+  dump_verbosity_accessStats       = 0x00000100,   /**< dump entity access statistics */
+  dump_verbosity_csv               = 0x00000200,   /**< dump access statistics as comma separated list */
+
   dump_verbosity_noClassTypes      = 0x00001000,   /**< dump no class       types */
   dump_verbosity_noStructTypes     = 0x00002000,   /**< dump no struct      types */
   dump_verbosity_noUnionTypes      = 0x00004000,   /**< dump no union       types */
@@ -283,13 +394,16 @@ typedef enum {
   dump_verbosity_onlyClassTypes     = 0x000FE000,  /**< dump only class     types */
   dump_verbosity_onlyStructTypes    = 0x000FD000,  /**< dump only struct    types */
   dump_verbosity_onlyUnionTypes     = 0x000FB000,  /**< dump only union     types */
-  dump_verbosity_onlyArrayTypes     = 0x000F8000,  /**< dump only array     types */
+  dump_verbosity_onlyArrayTypes     = 0x000F7000,  /**< dump only array     types */
   dump_verbosity_onlyPointerTypes   = 0x000EF000,  /**< dump only pointer   types */
   dump_verbosity_onlyMethodTypes    = 0x000DF000,  /**< dump only method    types */
   dump_verbosity_onlyPrimitiveTypes = 0x000BF000,  /**< dump only primitive types */
-  dump_verbosity_onlyEnumerationTypes=0x0008F000,  /**< dump only enumeration types */
+  dump_verbosity_onlyEnumerationTypes=0x0007F000,  /**< dump only enumeration types */
 
-  dump_verbosity_max               = 0x48888887,   /**< turn on all verbosity. */
+  dump_verbosity_max                = 0x4FF00FBE   /**< turn on all verbosity.
+                                                       Do not turn on negative flags!
+                                                       @@@ Because of a bug in gcc 3.2 we can not set the
+                                                       first two bits. */
 } dump_verbosity;
 
 
@@ -304,7 +418,7 @@ void    dump_entity (entity *ent);
 
 /** Write the type and all its attributes to the file passed.
  * */
-void    dump_type_to_file (FILE *f, type *tp, unsigned verbosity);
+void    dump_type_to_file (FILE *f, type *tp, dump_verbosity verbosity);
 
 /** Write the type and all its attributes to stdout.
  *  */
@@ -320,10 +434,21 @@ void    dump_type (type *tp);
  *  the global type nor frame types or the like.
  *
  *  The file name is the program name (get_irp_name()), or 'TextTypes'
- *  if the program name is not set appended by <suffix>-types.txt.
+ *  if the program name is not set, appended by <suffix>-types.txt.
+ *  For verbosity see the documentation of the verbosity flags above.
  */
 void dump_types_as_text(unsigned verbosity, const char *suffix);
 
+/** Dumps all global variables as text.
+ *
+ *  Dumps a text representation of the entities in the global type.
+ *
+ *  The file name is the program name (get_irp_name()), or 'TextTypes'
+ *  if the program name is not set, appended by <suffix>-globals.txt.
+ *  For verbosity see the documentation of the verbosity flags above.
+ */
+void dump_globals_as_text(unsigned verbosity, const char *suffix);
+
 /* **************************************************************************** */
 /*                                    FLAGS                                     */
 /* **************************************************************************** */
@@ -337,12 +462,19 @@ void dump_types_as_text(unsigned verbosity, const char *suffix);
  *  @param name The prefix of the name (not the ld_name) of the method
  *              entity to be dumped.
  */
-void only_dump_method_with_name(ident *name);
+void   only_dump_method_with_name(ident *name);
+
+/** Returns the name set with only_dump_method_with_name(). */
+ident *get_dump_file_filter_ident(void);
+
+/** Returns true if dump file filter is not set, or if it is a
+ *  prefix of name. */
+int is_filtered_dump_name(ident *name);
 
 /**  Sets the vcg flag "display_edge_labels" to no.
  *
  *   This is necessary as xvcg and aisee both fail to display graphs
- *   with self-edges if these edges have labes.
+ *   with self-edges if these edges have labels.
  */
 void turn_off_edge_labels(void);
 
@@ -365,7 +497,7 @@ bool get_opt_dump_const_local(void);
 /**  Turns off dumping the values of constant entities. Makes type graphs
  *   better readable.
  */
-void turn_off_constant_entity_values(void);
+void dump_constant_entity_values(bool b);
 
 /**  Turns on dumping the edges from the End node to nodes to be kept
  *   alive.
@@ -376,26 +508,20 @@ bool get_opt_dump_keepalive_edges(void);
 /** Turns on dumping the out edges starting from the Start block in
  *  dump_ir_graph.
  *
- *  To test the consistency of the out datastructure.
+ *  To test the consistency of the out data structure.
  */
-void dump_out_edges(void);
+void dump_out_edges(bool b);
 
 /** If this flag is set the dumper dumps edges to immediate dominator in cfg.
  */
-void dump_dominator_information(void);
+void dump_dominator_information(bool b);
 
 /** If this flag is set the dumper dumps loop nodes and edges from
  *  these nodes to the contained ir nodes.
  *
- *  Can be turned off with dont_dump_loop_information().
  *  If the loops are interprocedural nodes can be missing.
  */
-void dump_loop_information(void);
-
-/**
- * @see dump_loop_information()
- */
-void dont_dump_loop_information(void);
+void dump_loop_information(bool b);
 
 /** If set and backedge info is computed, backedges are dumped dashed
  *  and as vcg 'backedge' construct.
@@ -409,7 +535,7 @@ void dump_backedge_information(bool b);
  *  If the flag is set, the type name is output in [] in the node label,
  *  else it is output as info.
  */
-void dump_analysed_type_info(bool b);
+void set_opt_dump_analysed_type_info(bool b);
 
 /** Write the address of a node into the vcg info.
  *
@@ -418,5 +544,10 @@ void dump_analysed_type_info(bool b);
  */
 void dump_pointer_values_to_info(bool b);
 
+/** Dumps ld_names of entities instead of there names.
+ *
+ * This option is on per default.
+ */
+void dump_ld_names(bool b);
 
 # endif /* _IRDUMP_H_ */